HttpServletRequest详细解释
一、什么是 HttpServletRequest
?
HttpServletRequest
是 Java EE(Jakarta EE)中定义的一个接口,用于表示来自客户端(通常是浏览器)的 HTTP 请求。
它提供了丰富的方法,允许你:
-
获取请求头、参数、路径、方法等信息
-
读取请求体内容(如 JSON、表单等)
-
获取 cookie、session、IP 等
-
与服务器交互时携带的上下文信息
它是 Servlet 规范中的核心接口,Spring MVC 的 Controller 方法中也常用它。
二、常见应用场景
1. 获取请求参数(如表单字段或 URL 参数)
String name = request.getParameter("name");
例如用户访问 /hello?name=Tom
,你可以获取 name
参数为 "Tom"
。
2. 获取请求方式(GET、POST、PUT 等)
String method = request.getMethod(); // 返回 "GET"、"POST" 等
3. 获取请求路径和 URI
String uri = request.getRequestURI(); // /api/user/info
String url = request.getRequestURL().toString(); // http://localhost:8080/api/user/info
String contextPath = request.getContextPath(); // 项目部署路径,通常是 "" 或 "/app"
4. 获取请求头(Headers)
HTTP 请求头(Request Headers)清单-CSDN博客
String userAgent = request.getHeader("User-Agent");
String contentType = request.getHeader("Content-Type");
5. 获取客户端 IP 地址(常用于记录、限流、防刷)
String ip = request.getRemoteAddr(); // 原始 IP,可能是代理服务器地址
但这不是最可靠的方法,应结合 X-Forwarded-For
等请求头处理,如你上面的代码所示。
6. 获取请求体内容(例如 JSON 请求)
在 Spring 中你通常会用 @RequestBody
,但原生写法可以这样:
BufferedReader reader = request.getReader();
StringBuilder body = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {body.append(line);
}
String requestBody = body.toString();
7. 获取 Session 或 Cookie 信息
HttpSession session = request.getSession();
session.setAttribute("userId", 123);Cookie[] cookies = request.getCookies();
8. 判断是否 Ajax 请求
String xRequestedWith = request.getHeader("X-Requested-With");
if ("XMLHttpRequest".equals(xRequestedWith)) {// 是 Ajax 请求
}
9.在 Spring MVC 中怎么用?
在 Controller 方法中,Spring 会自动注入 HttpServletRequest
:
@PostMapping("/login")
public ResponseEntity<?> login(HttpServletRequest request, @RequestBody LoginDto dto) {String ip = request.getRemoteAddr();// ...
}
三、 常用方法速查表
方法名 | 说明 |
---|---|
getParameter(String) | 获取请求参数 |
getHeader(String) | 获取请求头 |
getMethod() | 请求方法(GET/POST) |
getRequestURI() | URI 部分 |
getRequestURL() | 完整 URL |
getRemoteAddr() | 客户端 IP |
getInputStream() / getReader() | 读取请求体 |
getCookies() | 获取请求中的 Cookie |
getSession() | 获取用户 Session |
getContextPath() | 项目部署路径 |
四、 小结
HttpServletRequest
├── 📌 请求参数
│ ├── getParameter(String name)
│ ├── getParameterMap()
│ ├── getParameterNames()
│ └── getParameterValues(String name)
│
├── 📄 请求方式与路径
│ ├── getMethod() → GET / POST / PUT ...
│ ├── getRequestURI() → /api/user/info
│ ├── getRequestURL() → http://example.com/api/user/info
│ ├── getContextPath() → 应用上下文路径
│ └── getServletPath() → 映射到 servlet 的路径
│
├── 📦 请求头 Header
│ ├── getHeader(String name) → 获取单个请求头
│ ├── getHeaderNames() → 获取所有请求头名
│ └── getHeaders(String name) → 多个值的 header(如 Set-Cookie)
│
├── 📡 客户端信息
│ ├── getRemoteAddr() → 客户端 IP(但可能是代理 IP)
│ ├── getRemoteHost() → 主机名
│ ├── getRemotePort() → 客户端端口
│ ├── getLocalAddr() → 当前服务器地址
│ └── getLocalPort() → 当前服务器端口
│
├── 📤 请求体
│ ├── getInputStream() → 原始字节流(适合文件上传)
│ └── getReader() → 字符流(读取 JSON / 表单内容)
│
├── 🍪 Cookie / Session
│ ├── getCookies() → 获取 cookie 数组
│ ├── getSession() → 获取 Session 对象
│ └── getSession(boolean create) → 不存在时是否创建新的 Session
│
├── 🔐 安全与认证
│ ├── getAuthType() → 获取认证类型(如 BASIC)
│ ├── getRemoteUser() → 获取登录用户
│ ├── isUserInRole(String role) → 判断用户是否属于某角色
│ └── getUserPrincipal() → 获取登录主体
│
├── 🧭 URL相关工具
│ ├── getQueryString() → 获取 URL 中的参数部分
│ ├── getScheme() → http / https
│ ├── getServerName() → 服务器名(如 localhost)
│ ├── getServerPort() → 端口号(如 8080)
│ └── getRequestDispatcher(path) → 请求转发
│
└── ⚙️ 其他├── setAttribute(name, obj) → 设置请求属性├── getAttribute(name) → 获取属性├── removeAttribute(name) → 移除属性└── getLocale() → 获取请求语言地区