servlets 中的 getLocalPort() 和 getServerPort() 之间的区别

2022-09-02 02:56:40

我正在研究servlets,我提出了一个疑问和.这里的意思是服务器端只有那么是什么意思?getLocalPort()getServerPort()getLocalPort()getServerPort()

谢谢。


答案 1

在简单的设置中(您的应用程序服务器/servlet 容器直接接受客户机的请求),这两种方法将返回相同的值。

当 servlet 容器不是接受客户端请求的应用程序时(例如,当您使用具有 mod_jk 的 Apache HTTP 服务器来接受请求并通过 AJP 将请求转发到 Tomcat 实例时),则 getServerPort() 将返回客户端连接到的端口(当使用默认端口时,可能是 80)并 getLocalPort() 将返回Tomcat用于接受来自HTTP服务器的连接的端口(可能是8009或类似的东西)。


答案 2

让我们看看javadoc对getLocalPort()的看法:

返回接收请求的接口的因特网协议 (IP) 端口号。

这就是我们可以读到的关于getServerPort()的内容

返回请求发送到的端口号。它是 Host 标头值(如果有)中“:”后面的部分的值,或者是接受客户端连接的服务器端口的值。

因此,如果客户端向 http://mydomain.com:80/ 发送请求,然后将其“路由”到侦听另一个端口(可能是另一台计算机)上的容器,则该请求将返回并将返回请求转发到的容器的端口,例如对于侦听该端口的WebLogic实例。getServerPort()80getLocalPort()7001


推荐