java HttpServletRequest 和 HttpServletResponse

发布于:2025-04-16 ⋅ 阅读:(28) ⋅ 点赞:(0)

HttpServletRequest 和 HttpServletResponse 详解

1. HttpServletRequest(HTTP 请求对象)

HttpServletRequest 是 Java Servlet API 提供的接口,用于封装客户端的 HTTP 请求信息。它继承自 ServletRequest,并增加了 HTTP 协议相关的功能。

1.1 核心功能

(1) 获取请求参数
  • getParameter(String name)
    获取单个请求参数(如表单字段、URL 查询参数)。
    String username = request.getParameter("username");
    
  • getParameterValues(String name)
    获取多个同名参数(如复选框、多选列表)。
    String[] hobbies = request.getParameterValues("hobby");
    
  • getParameterMap()
    返回所有请求参数的 Map<String, String[]>
    Map<String, String[]> paramMap = request.getParameterMap();
    
(2) 获取请求头信息
  • getHeader(String name)
    获取单个请求头(如 User-AgentCookie)。
    String userAgent = request.getHeader("User-Agent");
    
  • getHeaders(String name)
    返回指定请求头的所有值(如多个 Accept 头)。
    Enumeration<String> acceptHeaders = request.getHeaders("Accept");
    
  • getHeaderNames()
    返回所有请求头名称。
    Enumeration<String> headerNames = request.getHeaderNames();
    
(3) 获取客户端和服务器信息
  • getRemoteAddr()
    获取客户端 IP 地址。
    String ip = request.getRemoteAddr();
    
  • getMethod()
    获取 HTTP 方法(GETPOSTPUTDELETE 等)。
    String method = request.getMethod();
    
  • getRequestURL()
    返回完整的请求 URL(StringBuffer 类型)。
    StringBuffer url = request.getRequestURL();
    
  • getRequestURI()
    返回请求的 URI(不包含协议、域名和端口)。
    String uri = request.getRequestURI(); // 如 "/app/login"
    
(4) 获取会话(Session)
  • getSession()
    获取当前会话,如果不存在则创建新会话。
    HttpSession session = request.getSession();
    
  • getSession(boolean create)
    如果 create=false,仅获取现有会话,不创建新会话。
    HttpSession session = request.getSession(false);
    
(5) 获取请求体(Body)
  • getInputStream()
    获取 ServletInputStream,用于读取二进制数据(如文件上传)。
    ServletInputStream inputStream = request.getInputStream();
    
  • getReader()
    获取 BufferedReader,用于读取文本数据(如 JSON、XML)。
    BufferedReader reader = request.getReader();
    
(6) 属性(Attribute)管理
  • setAttribute(String name, Object value)
    存储请求范围内的属性(可用于 JSP 或转发)。
    request.setAttribute("message", "Hello");
    
  • getAttribute(String name)
    获取请求属性。
    String msg = (String) request.getAttribute("message");
    
  • removeAttribute(String name)
    移除请求属性。
    request.removeAttribute("message");
    

2. HttpServletResponse(HTTP 响应对象)

HttpServletResponse 是 Java Servlet API 提供的接口,用于封装服务器对客户端的 HTTP 响应。它继承自 ServletResponse,并增加了 HTTP 协议相关的功能。

2.1 核心功能

(1) 设置响应状态
  • setStatus(int sc)
    设置 HTTP 状态码(如 200404500)。
    response.setStatus(HttpServletResponse.SC_OK); // 200
    
  • sendError(int sc, String msg)
    发送错误状态码和消息(如 404 Not Found)。
    response.sendError(HttpServletResponse.SC_NOT_FOUND, "Page not found");
    
(2) 设置响应头
  • setHeader(String name, String value)
    设置响应头(如 Content-TypeCache-Control)。
    response.setHeader("Content-Type", "text/html");
    
  • addHeader(String name, String value)
    添加多个同名响应头(如多个 Set-Cookie)。
    response.addHeader("Set-Cookie", "user=admin");
    
  • setContentType(String type)
    设置内容类型(如 text/htmlapplication/json)。
    response.setContentType("application/json");
    
  • setCharacterEncoding(String charset)
    设置字符编码(如 UTF-8)。
    response.setCharacterEncoding("UTF-8");
    
(3) 写入响应数据
  • getOutputStream()
    获取 ServletOutputStream,用于写入二进制数据(如图片、文件)。
    ServletOutputStream out = response.getOutputStream();
    out.write(bytes);
    
  • getWriter()
    获取 PrintWriter,用于写入文本数据(如 HTML、JSON)。
    PrintWriter writer = response.getWriter();
    writer.println("<h1>Hello World</h1>");
    
(4) 重定向
  • sendRedirect(String location)
    发送 302 重定向到指定 URL。
    response.sendRedirect("/login");
    
(5) Cookie 管理
  • addCookie(Cookie cookie)
    向客户端添加 Cookie。
    Cookie cookie = new Cookie("username", "admin");
    response.addCookie(cookie);
    
(6) 缓存控制
  • setDateHeader(String name, long date)
    设置日期型响应头(如 Expires)。
    response.setDateHeader("Expires", System.currentTimeMillis() + 3600000);
    

3. 实际应用示例

示例 1:登录表单处理

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws IOException {
    
    String username = request.getParameter("username");
    String password = request.getParameter("password");

    if ("admin".equals(username) && "123456".equals(password)) {
        // 登录成功,存储 Session
        HttpSession session = request.getSession();
        session.setAttribute("user", username);
        
        // 重定向到首页
        response.sendRedirect("/home");
    } else {
        // 登录失败,返回错误
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<h1>Login Failed</h1>");
    }
}

示例 2:返回 JSON 数据

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws IOException {
    
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    
    PrintWriter out = response.getWriter();
    String json = "{\"name\":\"John\", \"age\":30}";
    out.print(json);
}

4. 总结

功能 HttpServletRequest HttpServletResponse
获取请求数据 getParameter(), getHeader() -
获取会话 getSession() -
读取请求体 getInputStream(), getReader() -
设置响应数据 - getOutputStream(), getWriter()
设置状态码 - setStatus(), sendError()
设置响应头 - setHeader(), addHeader()
重定向 - sendRedirect()
Cookie 管理 getCookies() addCookie()

这两个对象是 Java Web 开发的核心,几乎所有 Web 框架(如 Spring MVC)底层都依赖它们进行 HTTP 请求和响应处理。