> 技术文档 > HttpServletRequest详细解释

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/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() 请求方法(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()  → 获取请求语言地区

饲料网