Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet中getLocalPort()和getServerPort()之间的差异_Java_Servlets - Fatal编程技术网

Java servlet中getLocalPort()和getServerPort()之间的差异

Java servlet中getLocalPort()和getServerPort()之间的差异,java,servlets,Java,Servlets,我正在研究servlet,我发现getLocalPort()和getServerPort()之间有一个明显的区别。 这里的getLocalPort()仅表示服务器端,那么getServerPort()的含义是什么 谢谢。在一个简单的设置中(您的应用程序服务器/servlet容器直接接受客户机的请求),两个方法将返回相同的值 当servlet容器不是接受客户机请求的应用程序时(例如,当您使用带有mod_jk的Apache HTTP服务器来接受请求并通过AJP将请求转发给Tomcat实例时),则将返

我正在研究servlet,我发现
getLocalPort()
getServerPort()
之间有一个明显的区别。 这里的
getLocalPort()
仅表示服务器端,那么
getServerPort()
的含义是什么

谢谢。

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


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

让我们看看javadoc是怎么说的:

返回接收请求的接口的Internet协议(IP)端口号

这就是我们可以读到的:

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


因此,如果客户机向另一个端口(可能还有另一台机器)发送请求,然后“路由”到侦听另一个端口的容器,
getServerPort()
将返回
80
getLocalPort()
将返回请求转发到的容器的端口,让我们假设
7001
用于侦听该端口的WebLogic实例

我研究了Jetty和Tomcat对服务器端口的实现,以下是我的发现:

  • 当请求URL中包含端口号时(例如http(s)://website.com:8888/blah/blah blah blah),getServerPort()始终返回请求URL中包含的内容(在示例中为8888)
  • 当请求URL中没有端口号时,则
    • 443将被退回,如果
      • Tomcat看到SSLEnabled=true
      • Jetty sees schema=https
    • 如有需要,将退还80美元
      • sees SSLEnabled=false
      • Jetty sees schema=http

  • 因此,getServerPort()与前面的ApacheHTTP服务器或负载平衡器(如果有)或Tomcat/Jetty服务器上的IP表路由无关。他们总是返回基于http/https的标准端口号,除非在请求URL中指定了端口号。

    我第一次读这个问题时读过API,直到看到Joachim的答案(我是靠这个为生)我才立即意识到区别是什么。因此,我认为原始海报(正在研究servlet)与差异作斗争是非常合理的。@Jack绝对正确,我只粘贴了API文档作为参考(以及主机标题)。回答得很好!非常适用于负载平衡环境。