HttpServletRequest详细解释
一、什么是 HttpServletRequest
?
HttpServletRequest
是 Java EE(Jakarta EE)中定义的一个接口,用于表示来自客户端(通常是浏览器)的 HTTP 请求。
它提供了丰富的方法,允许你:
它是 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/infoString url = request.getRequestURL().toString(); // http://localhost:8080/api/user/infoString 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()
getRequestURI()
getRequestURL()
getRemoteAddr()
getInputStream()
/ getReader()
getCookies()
getSession()
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() → 获取请求语言地区