天天看点

转发/重定向

作者:Iliuhu

请求转发

转发/重定向
转发/重定向
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  // 设置请求和响应的字符集
  req.setCharacterEncoding("UTF-8");
  resp.setContentType("text/html;charset=UTF-8");

  System.out.println("AServlet ----> BServlet");

  // 请求转发
  req.getRequestDispatcher("response.html").forward(req, resp);
}           
  • 请求转发的特点

从一个Servlet跳转到另一个Servlet/JSP/HTML;

浏览器地址栏不会发生改变,只发一次请求;

请求转发是服务器内部行为;

请求转发使用的是同一个请求和响应对象(设置共享资源,涉及到域对象);

    • 请求转发到html文件会出现乱码,问题不在浏览器和服务器编码/解码
      • 解决方法: 需配置web.xml
<jsp-config>
  <jsp-property-group>
  <url-pattern>*.html</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>           

请求重定向

转发/重定向
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  // 设置请求和响应的字符集
  req.setCharacterEncoding("UTF-8");
  resp.setContentType("text/html;charset=UTF-8");

  System.out.println("RedirectAServlet ----> RedirectBServlet");

  // 重定向到BServlet
  resp.sendRedirect("bb");
}           
  • 重定向特点

一个资源跳转到另一个资源,会发送新的请求;

一个Servlet跳转到另一个Servlet/JSP/HTML;

浏览器地址栏会发生改变,发送多个请求;

重定向是客户端(浏览器)的行为;

重定向使用的不是同一个请求对象和响应对象;

每次发送请求都会创建新的请求和响应对象;

转发和重定向的区别

转发/重定向