我正在研究servlet,我在getLocalPort()
和getServerPort()
之间产生了疑问。
这里getLocalPort()
表示服务器端只有getServerPort()
的含义?
感谢。
答案 0 :(得分:25)
在一个简单的设置中(您的应用程序服务器/ servlet容器直接接受客户端的请求),两个方法都将返回相同的值。
当servlet容器不是接受客户端请求的应用程序时(例如,当您使用带有mod_jk的Apache HTTP服务器接受请求并通过AJP将请求转发到Tomcat实例时),getServerPort()
将返回客户端连接的端口(可能是80,当使用默认端口时),getLocalPort()
将返回Tomcat用于接受来自HTTP服务器的连接的端口(可能是8009或类似的东西)。
答案 1 :(得分:8)
让我们看看javadoc对getLocalPort()
的评价:
返回接收请求的接口的Internet协议(IP)端口号。
这是我们可以阅读的getServerPort()
:
返回发送请求的端口号。它是Host头值中的“:”之后的部分的值(如果有),或者是接受客户端连接的服务器端口。
因此,如果客户端向http://mydomain.com:80/发送请求,然后将其“路由”到侦听另一个端口(可能是另一台计算机)的容器,getServerPort()
将返回80
并且getLocalPort()
将返回转发请求的容器的端口,对于侦听该端口的WebLogic实例,请说7001
。
答案 2 :(得分:1)
我查看了Jetty和Tomcat的服务器端口实现,这是我的发现:
因此,getServerPort()与位于其前面的apache HTTP服务器或负载均衡器(如果有)或位于Tomcat / Jetty服务器上的IP表路由无关。除非在请求URL中指定了端口号,否则它们将始终返回基于http / https的标准端口号。