request.getLocalPort() 获取的到底是什么?

java_2008_4_4 2010-03-09 11:28:26
API 的说明不是十分详细:
“Returns the Internet Protocol (IP) port number of the interface on which the request was received. ”


我想这其中的 “the interface on which the request was received” 应该是当前的 servlet 容器吧。例如 Tomcat。
可是我做了一个测试,使用 apache 与 Tomcat 进行整合。apache 的端口是 8096 , Tomcat 的端口是 8080 。我原以为通过 apache (即通过 8096 端口)对 servlet 或 jsp 进行访问时,在 filter 中调用的 request.getLocalPort() 会返回 8080 ,可结果却返回了 8096.

再看 API 说明时,便不知道“ interface ”指的到底是哪个了。因为 apache 也曾 received the request 。
可是如果这个 “ interface ”是指第一个接收到请求的 WEB 服务器(如本例中的 apache)。那么 request.getLocalPort() 和 request.getServerPort() 又有什么区别呢?

在网上找过资料,但都无功而返。一些资料提到, 在“均衡负载”的环境中,调用 request.getLocalPort() 将可以获得当前 servlet 容器所监听的端口(划线部分并不是原文,而是我的理解)。可是我只使用过 apache + tomcat 进行“均衡负载”,可测试又没有“成功”。而“集群”根本没有接触过。所以如若有朋友通过“均衡负载”来解释 request.getLocalPort() 的话,还望详细,最好能有个例子。

望指教。。
...全文
1001 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuisichao 2010-03-10
  • 打赏
  • 举报
回复
应该是客户端的端口吧!技术不精 ,说错了请不要 笑!
java_2008_4_4 2010-03-10
  • 打赏
  • 举报
回复
不知道老紫竹的这个是指什么 Client 。浏览器端 还是 其他(例如“3楼”所说的 “http引擎”端)。
我想你的这个 ClientPort 即可指“浏览器端”也可指“http引擎”(在 cluster 环境中,http引擎与 service server 通信时,http引擎 对于 service server 来说应该也会进行 connection)。
那么 request.getLocalPort() 获取的到底是哪的 port?
再谢能人~
老紫竹 2010-03-10
  • 打赏
  • 举报
回复
端口只有2个,一个是ServerPort 另一个就是LocalPort 或者叫 ClientPort

ServerPort一般是固定的,比如80 或者 8080
而ClientPort 则根据不同的请求来源,可以固定,也可以是很随机的。
zliuzz 2010-03-10
  • 打赏
  • 举报
回复
觉得紫竹的比较好。。。自己也不懂 学习
java_2008_4_4 2010-03-10
  • 打赏
  • 举报
回复
有谁用过这方法啊~~
APOLLO_TS 2010-03-09
  • 打赏
  • 举报
回复
HTTP协议是TCP的扩展

建立TCP连接
连接端口一旦建立就是它了(8096)

里面要怎么转发就怎么转发,反正连接的端口已定了。

connection关闭
TCP连接关闭

如果HTTP协议能超越TCP能访问内部路由那就是灾难了。说的未必对。哈哈!
chinesealbert 2010-03-09
  • 打赏
  • 举报
回复
这个interface是指http interface
你把tomcat和apache共同配置后,以前tomcat里有一个http简单引擎,盖引擎后是servlet容器
现在你用apache顶替了tomcat里默认的http引擎,所以当前你的http都是处在apache上的

apache是http引擎,但是对于http引擎的响应处理则是servlet的事情
你要搞清楚这两种直接的区别,这个例子就好理解了

至于什么负载均衡,是指当你接受到了http请求后,也就是http引擎接受到了请求,但对请求的响应则交给了servlet,这个负载均衡是对这个响应的均衡响应,例如,你有两个servlet容器做cluster,并用apache作为该cluster的http引擎。。

你不要搞混:
1) http引擎就是处理基于静态网页的
2) servlet是对静态网页里post ... get .. 等事件的响应。。 说白了,servlet其实也是一种线程化的CGI

java_2008_4_4 2010-03-09
  • 打赏
  • 举报
回复
依照1楼朋友的意思。
如果整个应用部署在一台服务器中时 request.getLocalPort() 是没有意义的了?
只有在“集群”情况下,当负责分流的 Server (Control Server),在“对 Http 请求开放的端口”上监听到一个请求后,将该请求通过另外一个“端口”将其发送到“集群”中的另外一个真正负责业务的某个 Server 中(Service Server),然后在该 Service Server 调用此方法,才有意义?
如果是,那么 request.getLocalPort() 获取的是 Service Server 用来与 Control Server 进行通信的Service Server 端的端口?

偶没做过“集群”,目前的条件也没有机会进行这样的测试。所以还请高人指点。谢了

62,627

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧