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()` ,两者不能同时调用,且只能读取一次
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。