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-IP
或 X-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"
这样的字符串