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
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
。
request.getQueryString()
request.getQueryString(): 仅针对GET
请求,返回URL查询字符串部分(即URL中“?”后面的部分),通常用于日志记录、转发或重定向等场景。 对于URL http://example.com/search?query=java&category=tutorial
,将返回 "query=java&category=tutorial"
这样的字符串。
# 对于 get
http://example.com/form?name=John&age=30&hobby=reading&hobby=sports# 返回
name=John&age=30&hobby=reading&hobby=sports
request.getParameterMap(): GET
和POST
请求。对于POST
请求,它会处理表单数据
以及application/x-www-form-urlencoded类型
的请求体内容。对GET
请求,返回URL查询字符串
部分。用途时对参数进行进一步的操作与处理 返回一个包含所有请求参数及其对应值(可能为多个)的Map
对象,键是参数名(String
),值是String[]
。
# 对于 get
http://example.com/form?name=John&age=30&hobby=reading&hobby=sports# 返回
{"name": ["John"],"age": ["30"],"hobby": ["reading", "sports"]
}# 对于 post
<form method="post"><input type="text" name="name" value="John"><input type="number" name="age" value="30"><input type="checkbox" name="hobby" value="reading" checked><input type="checkbox" name="hobby" value="sports" checked>
</form># 返回
{"name": ["John"],"age": ["30"],"hobby": ["reading", "sports"]
}