当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/307659.html

相关文章:

  • HttpServletRequest 和 HttpServletResponse核心接口区别
  • UDP_千兆光通信(四)Tri Mode Ethernet MAC ip核
  • 力扣 hot100 Day61
  • Mockito:Java单元测试Mock框架
  • Mac 系统下安装 nvm
  • 工业园区泵房物联网能耗优化解决方案:打造绿色低碳厂区
  • 组播 | 不同 VLAN 间数据转发实现逻辑 / 实验
  • 深入解读OpenTelemetry分布式链路追踪:原理与实践指南
  • tlias智能学习辅助系统--SpringAOP-基础-核心概念
  • Cesium 快速入门(一)快速搭建项目
  • 防火墙安全实验
  • 10. NAT,代理服务,内网穿透
  • MLIR TableGen
  • 软考中级-信息安全工程师-每日一学(1)
  • 网关冗余技术VRRP的原理与配置
  • 相亲小程序安全与隐私系统模块搭建
  • 按键精灵iOS工具元素命令SetText:自动化输入的终极解决方案
  • 前端核心技术Node.js(二)——path模块、HTTP与模块化
  • 客户服务自动化:如何用CRM减少50%人工工单?
  • 多架构镜像整合全攻略:在Docker中实现单一镜像支持同时支持amd64和arm64架构
  • 打车小程序 app 系统架构分析
  • HUD抬头显示器-杂散光测试设备 太阳光模拟器
  • SAM模型细节分析 (附录内容)
  • 构建高效AI应用:深入探讨飞算JavaAI框架与实践
  • [特殊字符] 数据可视化结合 three.js:让 3D 呈现更精准,3 个优化经验谈
  • Python汉字贪吃蛇程序升级版
  • Java报错:error: missing return statement
  • PCIE FAQ
  • 【数据结构】生活中的数据结构:从吃饭与编程看栈与队列思维
  • CSS 打字特效