HttpServletRequest getServerPort()、getLocalPort() 、getRemotePort() 区别

getRemotePort() 、getServerPort()、getLocalPort()

request.getServerPort()request.getLocalPort()request.getRemotePort() 这三个方法都是获取与HTTP请求相关的端口信息

客户端(如浏览器)通过某个随机分配的网络连接端口(7070)
向服务器发送HTTP请求( http://example.com:8080/app/somepage.jsp)连接到服务器端口(8080)。
反向代理或负载均衡场景下,请求可能从端口(8080)转发到另一个端口(9090)进行处理。

request.getRemotePort(): 发起请求的客户端所使用的端口号 7070
request.getServerPort(): 浏览器发送请求时连接到的服务器端口 8080
request.getLocalPort(): 当前处理请求的服务器上的本地端口 9090

getRemoteHost()、getServerName()、getLocalName()区别

request.getRemoteHost(): 返回客户端主机的名称,而不是直接的IP地址 实现机制通常是通过DNS反向查询 request.getRemoteAddr() 返回的IP地址以得到对应的主机名。如果反向解析失败、出于性能原因未进行反向解析、没有进行DNS查询的能力,可能会返回与 getRemoteAddr() 相同的IP地址,或者在某些情况下返回 null

request.getServerName(): 客户端请求时所使用的服务器域名IP地址 http://example.com:8080/app/somepage.jsp 访问时就是"example.com"
http://192.168.0.1:8080/app/somepage.jsp 访问时就是"192.168.0.1"

request.getLocalName(): 当前处理请求的服务器的本地主机名或IP地址,在多宿主环境、有反向代理、负载均衡器的情况下,这个值可能与客户端直接连接的主机名或IP不同。 假设服务器的本地主机名是 "local-server" 或者内部IP地址是 "10.0.0.5",那么返回就是 "local-server" 或"10.0.0.5"

getRemoteAddr()、getLocalAddr()区别

request.getRemoteAddr(): 发起HTTP请求的客户端(例如浏览器)的IP地址 在实际应用中,如果存在反向代理、负载均衡器等网络组件时,可能需要通过特定的HTTP头(如 X-Real-IPX-Forwarded-For)来获取真实的客户端IP地址,因为这些网络组件可能会修改原始请求的来源信息。

request.getLocalAddr(): 当前处理请求的服务器接口绑定的IP地址 在多网络接口、多宿主配置的服务器上,这个值会是接收并处理当前请求的那个网络接口的IP地址。

用户通过浏览器(设备IP地址是 103.56.78.90)访问部署在服务器上的Web应用(IP地址 192.168.1.10,监听端口 8080)
request.getRemoteAddr() : "103.56.78.90"
request.getLocalAddr() : "192.168.1.10"

getContentLength():

getContentLength(): 获取客户端发送到服务器的HTTP请求主体内容的字节数(长度) 如果请求没有正文内容(如GET),或者请求头中没有包含Content-Length字段,则该方法返回 -1

getContentType(): 获取客户端发送数据的MIME类型(Multipurpose Internet Mail Extensions)。 如 "text/html"、"application/json" 或 "multipart/form-data" 等,如果请求没有指定内容类型,那么该方法将返回 null

getContextPath(),getRequestURI() ,getServletPath() ,getPathInfo()区别

getContextPath(): 获取当前Web应用的上下文路径(Context Path)。上下文路径是位于Web服务器域名资源路径之间的部分,以正斜杠 / 开始,但不以 / 结束。如果应用程序部署在服务器的根目录下(即默认上下文),则返回空字符串 ""。 如果一个Web应用部署在 http://example.com/myapp 下,访问某个Servlet时,getContextPath() 方法将返回 "/myapp"

request.getRequestURI(): 包含了上下文路径(context path)和servlet路径,不包括查询参数(即URL中"?"之后的部分) 对于URL http://example.com/myApp/service/doSomething?param=value,如果应用上下文路径为 /myApp,则 getRequestURI() 将返回 /myApp/service/doSomething

request.getServletPath(): 不包括上下文路径(context path)和servlet路径,不包括查询参数(即URL中"?"之后的部分) 对于URL http://example.com/myApp/service/doSomething?param=value,如果应用上下文路径为 /myApp,则 getRequestURI() 将返回 /service/doSomething

request.getPathInfo() 获取客户端请求URL中除Servlet映射路径之外的额外路径信息。 如配置 @WebServlet("/api/*")后,对于URL http://example.com/myApp/api/v1/users/42 ,则request.getServletPath() 可能会返回 /api,因为这是Servlet映射的基础路径。 request.getPathInfo() 将返回 /v1/users/42,这是匹配Servlet映射之后剩余的具体路径信息。

request.getQueryString()

request.getQueryString(): 获取客户端在HTTP请求中发送的查询字符串 对于URL http://example.com/search?query=java&category=tutorial ,将返回 "query=java&category=tutorial" 这样的字符串

相关推荐
夏天的味道٥1 小时前
使用 Java 执行 SQL 语句和存储过程
java·开发语言·sql
冰糖码奇朵3 小时前
大数据表高效导入导出解决方案,mysql数据库LOAD DATA命令和INTO OUTFILE命令详解
java·数据库·sql·mysql
好教员好3 小时前
【Spring】整合【SpringMVC】
java·spring
浪九天4 小时前
Java直通车系列13【Spring MVC】(Spring MVC常用注解)
java·后端·spring
堕落年代4 小时前
Maven匹配机制和仓库库设置
java·maven
功德+n5 小时前
Maven 使用指南:基础 + 进阶 + 高级用法
java·开发语言·maven
香精煎鱼香翅捞饭5 小时前
java通用自研接口限流组件
java·开发语言
ChinaRainbowSea5 小时前
Linux: Centos7 Cannot find a valid baseurl for repo: base/7/x86_64 解决方案
java·linux·运维·服务器·docker·架构
囧囧 O_o5 小时前
Java 实现 Oracle 的 MONTHS_BETWEEN 函数
java·oracle
去看日出5 小时前
RabbitMQ消息队列中间件安装部署教程(Windows)-2025最新版详细图文教程(附所需安装包)
java·windows·中间件·消息队列·rabbitmq