首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >servlets中getLocalPort()和getServerPort()的区别

servlets中getLocalPort()和getServerPort()的区别
EN

Stack Overflow用户
提问于 2010-02-02 21:23:39
回答 3查看 17.7K关注 0票数 21

我正在研究getServerPort(),我已经想出了servlet和servlet之间的不同之处。在这里,getLocalPort()只表示服务器端,那么getServerPort()的含义是什么

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-02 21:30:16

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

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

票数 32
EN

Stack Overflow用户

发布于 2010-02-02 21:49:01

让我们看看javadoc是怎么说getLocalPort()

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

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

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

因此,如果客户端向http://mydomain.com:80/发送请求,然后该请求被“路由”到侦听另一个端口(可能还有另一个机器)的容器,则getServerPort()将返回80getLocalPort()将返回该请求转发到的容器的端口,对于侦听该端口的WebLogic实例,假设为7001

票数 11
EN

Stack Overflow用户

发布于 2017-09-28 03:02:49

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

  1. 当请求URL中包含端口号时(例如http(s)://website.com:8888/blah/blah-blah),getServerPort()始终返回请求URL中包含的内容(在本例中为8888)
  2. 当请求URL中没有端口号时,如果
    • Tomcat看到SSLEnabled=true
    • Jetty看到,则将返回
      1. 443

代码语言:javascript
运行
复制
- 80 will be returned if  
    - sees SSLEnabled=false
    - Jetty sees schema=http

因此,getServerPort()与位于其前面的apache HTTP服务器或负载均衡器(如果有)或位于Tomcat/Jetty服务器上的IP表路由没有任何关系。它们将始终返回基于http/https的标准端口号,除非在请求URL中指定了端口号。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2184286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档