我正在研究getServerPort()
,我已经想出了servlet和servlet之间的不同之处。在这里,getLocalPort()
只表示服务器端,那么getServerPort()
的含义是什么
谢谢。
发布于 2010-02-02 21:30:16
在一个简单的设置中(您的应用服务器/servlet容器直接接受客户机的请求),这两个方法将返回相同的值。
当servlet容器不是接受客户机请求的应用程序时(例如,当您使用带有mod_jk的Apache HTTP服务器接受请求并通过AJP将请求转发给Tomcat实例时),那么getServerPort()
将返回客户机连接到的端口(当使用缺省端口时可能是80 ),getLocalPort()
将返回Tomcat用来接受来自HTTP服务器的连接的端口(可能是8009或类似的端口)。
发布于 2010-02-02 21:49:01
让我们看看javadoc是怎么说getLocalPort()
的
返回接收请求的接口的网际协议(IP)端口号。
这是我们可以读到的关于getServerPort()
的内容
返回请求被发送到的端口号。它是主机标头值中":“之后的部分的值(如果有),或者是接受客户端连接的服务器端口。
因此,如果客户端向http://mydomain.com:80/发送请求,然后该请求被“路由”到侦听另一个端口(可能还有另一个机器)的容器,则getServerPort()
将返回80
,getLocalPort()
将返回该请求转发到的容器的端口,对于侦听该端口的WebLogic实例,假设为7001
。
发布于 2017-09-28 03:02:49
我研究了Jetty和Tomcat对服务器端口的实现,以下是我的发现:
- 80 will be returned if
- sees SSLEnabled=false
- Jetty sees schema=http
因此,getServerPort()与位于其前面的apache HTTP服务器或负载均衡器(如果有)或位于Tomcat/Jetty服务器上的IP表路由没有任何关系。它们将始终返回基于http/https的标准端口号,除非在请求URL中指定了端口号。
https://stackoverflow.com/questions/2184286
复制相似问题