我正在學習servlets,我提出了getLocalPort()
和getServerPort()
之間的疑問差異。 這裏的getLocalPort()
表示服務器端只有那麼getServerPort()
的含義是什麼?Servlet中getLocalPort()和getServerPort()之間的區別
謝謝。
我正在學習servlets,我提出了getLocalPort()
和getServerPort()
之間的疑問差異。 這裏的getLocalPort()
表示服務器端只有那麼getServerPort()
的含義是什麼?Servlet中getLocalPort()和getServerPort()之間的區別
謝謝。
在一個簡單的設置中(您的應用程序服務器/ servlet容器直接接受客戶端的請求),兩種方法都會返回相同的值。
當servlet容器不是接受客戶端請求的應用程序時(例如,當您使用帶有mod_jk的Apache HTTP服務器接受請求並通過AJP將請求轉發給Tomcat實例時),那麼getServerPort()
將返回端口連接到的客戶端(可能是80,當使用默認端口時)和getLocalPort()
將返回Tomcat用來接受來自HTTP服務器(可能是8009或類似的)的連接的端口。
讓我們來看看javadoc的是怎麼說getLocalPort()
:
返回在其收到請求接口的互聯網協議(IP)端口號。
這是我們能讀到getServerPort()
:
返回到發送請求的端口號。它是Host頭部值(如果有)中的「:」之後的部分值,或者客戶端連接被接受的服務器端口。
所以,如果一個客戶端發送到http://mydomain.com:80/的請求是那麼「全軍覆沒」到另一個端口上的容器聽力(也許另一臺機器),getServerPort()
將返回80
和getLocalPort()
將容器口返回請求被轉發的請求,例如7001
,以獲取偵聽該端口的WebLogic實例。
我看着Jetty和Tomcat的實現的服務器端口的,這是我的發現:
因此,getServerPort()無關,與Apache HTTP服務器或負載均衡坐在它前面(如果任何),或者坐在Tomcat/Jetty服務器上的IP表路由。除非請求URL中指定了端口號,否則它們將始終返回基於http/https的標準端口號。
當我第一次看到這個問題時,我閱讀了API,直到我看到Joachim的回答(我以此爲生)之前,它並沒有立即明白我的區別。所以我認爲原始的海報(誰在「學習servlets」)與差異化鬥爭是相當合理的。 –
@Jack絕對的,我只粘貼了API文檔作爲參考(以及主機頭文件)。 –