HttpServletRequest简介说明
下文笔者讲述HttpServletRequest简介说明,如下所示
例:
获取请求头信息
例:
例:
例(读取 JSON 请求体):
HttpServletRequest简介
`HttpServletRequest`是Java Servlet API中的一个接口,
是`ServletRequest`子接口
专门用于处理HTTP请求
它封装客户端(如浏览器)发送到服务器所有HTTP请求信息
包括请求头、请求参数、会话信息等
HttpServletRequest功能
| 功能 | 描述 |
| 获取请求参数 | 如 GET/POST 参数、路径参数等 |
| 获取请求头信息 | 如 User-Agent、Accept-Language、Authorization 等 |
| 获取会话对象 | 通过 `getSession()` 获取或创建 `HttpSession` |
| 获取客户端信息 | 如 IP 地址、请求方法、协议版本等 |
| 获取输入流 | 读取原始请求体内容(如 JSON、XML、文件上传) |
HttpServletRequest接口继承关系
public interface HttpServletRequest extends ServletRequest {
// HTTP 特有方法定义
}
开发者在编写 Servlet 时
通常会使用这个接口来处理 HTTP 请求。
常用方法
获取请求参数
| 方法名 | 描述 |
| `getParameter(String name)` | 获取指定名称的请求参数值(GET 或 POST) |
| `getParameterValues(String name)` | 获取多个值的参数(如复选框) |
| `getParameterMap()` | 返回所有参数的 Map 形式:`Map<String, String[]>` |
String username = request.getParameter("username");
String[] hobbies = request.getParameterValues("hobby");
获取请求信息
| 方法名 | 描述 |
| `getMethod()` | 获取请求方法(GET / POST / PUT / DELETE 等) |
| `getRequestURI()` | 获取请求的 URI(不包含协议和域名) |
| `getQueryString()` | 获取查询字符串(URL 中 ? 后面的部分) |
| `getRemoteAddr()` | 获取客户端 IP 地址 |
| `getProtocol()` | 获取协议版本(如 HTTP/1.1) |
| 方法名 | 描述 |
| `getHeader(String name)` | 获取指定名称的请求头 |
| `getHeaders(String name)` | 获取多个值的请求头(如 Accept) |
| `getHeaderNames()` | 获取所有请求头名称的枚举 |
String userAgent = request.getHeader("User-Agent");
Enumeration<String> acceptHeaders = request.getHeaders("Accept");
获取会话信息
| 方法名 | 描述 |
| `getSession()` | 获取当前请求的会话对象(HttpSession) |
| `getSession(boolean create)` | 如果为 true,则在不存在时创建新会话 |
| `isRequestedSessionIdValid()` | 判断当前 Session ID 是否有效 |
HttpSession session = request.getSession();
session.setAttribute("user", user);
获取请求体内容(适用于 POST/PUT)
| 方法名 | 描述 |
| `getInputStream()` | 获取原始请求体的字节流(适合二进制数据) |
| `getReader()` | 获取字符流,适合读取文本内容(如 JSON、XML) |
BufferedReader reader = request.getReader();
StringBuilder json = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
json.append(line);
}
System.out.println(json.toString());
例
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws IOException {
// 获取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 获取客户端 IP
String clientIP = request.getRemoteAddr();
// 获取 User-Agent
String userAgent = request.getHeader("User-Agent");
// 创建会话并保存用户信息
HttpSession session = request.getSession();
session.setAttribute("user", new User(username));
// 返回响应
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<h1>登录成功!欢迎 " + username + "</h1>");
}
}
注意事项
请求对象是每个请求独有的
不需要担心线程安全问题
不同请求方式使用不同方法获取数据
GET 使用参数,POST 可以使用参数或请求体
设置字符编码很重要
使用 `request.setCharacterEncoding("UTF-8")` 避免乱码
慎用`getInputStream()` 和 `getReader()` ,两者不能同时调用,且只能读取一次
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


