请求 HttpServletRequest
以下为 javax.servlet.http.HttpServletRequest
接口的方法大全及作用详解,按功能分类整理:
1. 基础请求信息
方法 | 作用 |
---|---|
String getMethod() |
获取 HTTP 请求方法(如 GET 、POST ) |
String getProtocol() |
获取协议及版本(如 HTTP/1.1 ) |
String getScheme() |
获取 URL 协议(如 http 、https ) |
int getContentLength() |
获取请求体字节长度(-1 表示未知) |
String getContentType() |
获取请求体的 MIME 类型(如 application/json ) |
2. URL 和 URI 路径
方法 | 作用 |
---|---|
String getRequestURI() |
获取 URI(如 /app/user?id=1 ) |
StringBuffer getRequestURL() |
获取完整 URL(如 http://example.com/app/user ) |
String getContextPath() |
获取应用上下文路径(如 /app ) |
String getServletPath() |
获取 Servlet 映射路径(如 /user ) |
String getPathInfo() |
获取额外路径信息(如 /details ,需 URL 映射配置) |
3. 请求头处理
方法 | 作用 |
---|---|
String getHeader(String name) |
获取指定请求头的值 |
Enumeration<String> getHeaders(String name) |
获取指定请求头的所有值(如多值 Cookie) |
Enumeration<String> getHeaderNames() |
获取所有请求头名称的枚举 |
long getDateHeader(String name) |
获取日期类型请求头的毫秒值(如 If-Modified-Since ) |
int getIntHeader(String name) |
获取整型请求头的值(如 Content-Length ) |
4. 请求参数处理
方法 | 作用 |
---|---|
String getParameter(String name) |
获取单个请求参数值(GET 或 POST ) |
String[] getParameterValues(String name) |
获取多个同名参数值(如复选框数据) |
Map<String, String[]> getParameterMap() |
获取所有参数的键值对映射 |
Enumeration<String> getParameterNames() |
获取所有参数名称的枚举 |
String getQueryString() |
获取 URL 查询字符串(如 id=1&name=Alice ) |
5. 会话与认证
方法 | 作用 |
---|---|
HttpSession getSession() |
获取或创建会话(true 表示自动创建) |
HttpSession getSession(boolean create) |
根据 create 参数决定是否创建新会话 |
String getRemoteUser() |
获取已认证用户的用户名 |
Principal getUserPrincipal() |
获取用户主体对象(如 UserPrincipal ) |
boolean isUserInRole(String role) |
检查用户是否属于指定角色 |
6. 客户端信息
方法 | 作用 |
---|---|
String getRemoteAddr() |
获取客户端 IP 地址 |
String getRemoteHost() |
获取客户端主机名(可能为 IP) |
int getRemotePort() |
获取客户端端口号 |
String getLocalAddr() |
获取服务器接收请求的 IP 地址 |
int getLocalPort() |
获取服务器接收请求的端口号 |
7. 请求体与流操作
方法 | 作用 |
---|---|
ServletInputStream getInputStream() |
获取二进制请求体输入流 |
BufferedReader getReader() |
获取字符流形式的请求体 |
void setCharacterEncoding(String encoding) |
设置请求体字符编码(需在读取前调用) |
8. 属性操作
方法 | 作用 |
---|---|
void setAttribute(String name, Object value) |
在请求范围内设置属性 |
Object getAttribute(String name) |
获取请求范围内的属性值 |
void removeAttribute(String name) |
移除请求范围内的属性 |
Enumeration<String> getAttributeNames() |
获取所有请求属性名称的枚举 |
9. 异步处理 (Servlet 3.0+)
方法 | 作用 |
---|---|
AsyncContext startAsync() |
开启异步请求处理 |
AsyncContext startAsync(ServletRequest req, ServletResponse res) |
指定请求和响应开启异步处理 |
boolean isAsyncStarted() |
检查是否处于异步模式 |
10. 安全相关
方法 | 作用 |
---|---|
String getAuthType() |
获取认证类型(如 BASIC 、FORM ) |
boolean isSecure() |
检查请求是否通过 HTTPS 发送 |
String getServerName() |
获取服务器主机名(如 example.com ) |
使用示例
// 获取请求参数
String username = request.getParameter("username");
// 获取请求头
String userAgent = request.getHeader("User-Agent");
// 获取会话并存储数据
HttpSession session = request.getSession();
session.setAttribute("loginUser", username);
// 检查用户角色
if (request.isUserInRole("admin")) {
// 执行管理员操作
}
注意事项
编码问题:
处理POST
表单时,需先调用request.setCharacterEncoding("UTF-8")
避免中文乱码。参数与属性区别:
getParameter()
获取客户端提交的数据,getAttribute()
获取服务器设置的请求属性。线程安全:
HttpServletRequest
对象仅在当前请求线程内有效,不可跨线程共享。