Java请求转发和重定向的区别

Java请求转发 和 重定向的区别

 

1、请求转发:
   request.getRequestDispatcher(URL地址).forward(request, response)

处理流程:

  1. 客户端发送请求,Servlet做出业务逻辑处理。
  2. Servlet调用forword()方法,服务器Servlet把目标资源返回给客户端浏览器。

2、重定向:
   response.sendRedirect(URL地址)

处理流程:

  1. 客户端发送请求,Servlet做出业务逻辑处理。
  2. Servlet调用response.sendReadirect()方法,把要访问的目标资源作为response响应头信息发给客户端浏览器。
  3. 客户端浏览器重新访问服务器资源xxx.jsp,服务器再次对客户端浏览器做出响应。

3、转发和重定向的区别:

      1、转发使用的是getRequestDispatcher()方法;  重定向使用的是sendRedirect();

      2、转发:浏览器URL的地址栏不变。

           重定向:浏览器URL的地址栏改变。

       request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;服务器内部转           发,整个过程处于同一个请求当中。
       response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。不在同一个请求。重定向,实际上客户端会向           服务器端发送两个请求。
       所以转发中数据的存取可以用request作用域:request.setAttribute(), request.getAttribute(),重定向是取不到request中的数据的。只能用session。

      3、转发是服务器行为,重定向是客户端行为;

      4、转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;

      5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)

      6、RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。sendRedirect()是HttpServletResponse对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。

      7、重定向可以跨域访问,而转发是在web服务器内部进行的,不能跨域访问。

        8、重定向,其实是两次request,








posted @ 2020-12-30 00:02  邓维-java  阅读(1016)  评论(0)    收藏  举报