HttpServletRequest 与 HttpServletResponse

HttpServletRequest 与 HttpServletResponse 总结


1. HttpServletRequest 功能详解
  • 核心功能

    • 获取请求头数据getHeader(name)getHeaderNames()
    • 获取请求参数getParameter(name)(单值)、getParameterValues(name)(多值如复选框)、getParameterMap()
    • 获取请求元数据
      request.getMethod();       // 请求方法(GET/POST)
      request.getRequestURI();   // 请求URI(如 /api/login)
      request.getRemoteAddr();   // 客户端IP地址
      request.getContextPath();  // 项目根路径(如 /myapp)
      
    • 请求转发request.getRequestDispatcher("目标路径").forward(request, response);
      • 服务器内部跳转,地址栏不变,共享同一请求作用域(request.setAttribute())。
    • 作用域:仅在当前请求内有效,适合临时传递数据。
  • 中文乱码处理

    • POST请求
      request.setCharacterEncoding("UTF-8"); // 必须在获取参数前调用
      String name = request.getParameter("name");
      
    • GET请求
      • Tomcat 8.5+ 默认支持URL中文,低版本需配置 server.xml<Connector URIEncoding="UTF-8">
      • 手动转码:
        String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "UTF-8");
        

2. HttpServletResponse 功能详解
  • 核心功能

    • 设置响应头
      response.setHeader("Refresh", "5;URL=/newpage"); // 5秒后跳转
      response.setContentType("text/html;charset=UTF-8"); // 设置响应类型和编码
      
    • 设置状态码
      response.setStatus(200);      // 正常状态
      response.sendError(404, "资源不存在"); // 跳转到错误页
      
    • 输出响应正文
      PrintWriter writer = response.getWriter();
      writer.write("Hello, 世界!");
      
    • 重定向
      response.sendRedirect("/newpath"); // 客户端重新发起请求,地址栏变化
      
  • 中文乱码处理
    确保响应编码与内容类型一致:

    response.setContentType("text/html;charset=UTF-8"); // 必须设置
    response.setCharacterEncoding("UTF-8");             // 可选但建议同步
    

3. 请求转发 vs 重定向(面试重点)
特性请求转发(Forward)重定向(Redirect)
地址栏变化不变改变
请求次数1次2次
数据共享共享 request 作用域不共享,需用 session
路径写法服务器内部路径(如 /success.jsp客户端路径(如 /app/success.jsp
跨域支持仅限当前应用内支持跨域(如跳转到外部网站)
性能高效(服务器内部处理)较低(客户端二次请求)

4. 关键代码示例
  • 请求转发与数据传递

    // 转发到目标页面并传递数据
    request.setAttribute("message", "登录成功");
    request.getRequestDispatcher("/result.jsp").forward(request, response);
    
  • 重定向

    // 重定向到新地址
    response.sendRedirect(request.getContextPath() + "/login.jsp");
    
  • 处理多值参数(如复选框)

    String[] hobbies = request.getParameterValues("hobby");
    Arrays.stream(hobbies).forEach(System.out::println);
    

5. 常见问题与解决方案
  • 404错误:检查路径是否包含上下文根(如 /myapp/resource)。
  • 中文乱码:确保 request.setCharacterEncoding("UTF-8")(POST)或配置Tomcat(GET)。
  • 数据丢失:重定向时使用 session 替代 request 作用域。

总结

  • HttpServletRequest 是处理客户端请求的核心对象,关注参数、头信息及请求流转。
  • HttpServletResponse 负责构建响应,需注意编码设置和跳转方式。
  • 转发与重定向的选择直接影响用户体验和系统性能,需根据场景权衡。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值