forward(转发)和redirect(重定向)的区别

    技术2022-07-11  89

    也就是浏览器经过一次请求,但是在服务器中经历了多个servlet进行处理,地址栏的地址始终没有改变,始终是第一个servlet的地址,这就叫做联动操作处理请求。

     

           不同的servlet之间,除了可以继续传递之前的request对象,还可以继续进行数据的流动,但是这个流动要将需要增加的数据放在request对象中。

           也就是那些联动操作的servlet之间是共用request对象的,然后request对象中还可以继续放入需要传递或者保存的数据。

     

    总结:request的作用域只在一次请求内,下一次再请求就没有了,又变成一个新的请求了。

    请求转发的地址栏的地址不改变。

     

     

        其中表单数据也就是请求实体内容

    关键在于重定向就相当于两次请求,一开始是一个地址,后来到了另一个地址,因此里面有两个request对象

     

    Servlet的转发与重定向:

           转发和重定向都能让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很大的区别。

    1、转发:有两种方式获得转发对象(RequestDispatcher):一种是通过HttpServletRequest的getRequestDispatcher()方法获得,一种是通过ServletContext的getRequestDispatcher()方法获得;

         以前的request范围中存放的变量不会失效,就像把两个页面拼到了一起。 例如:

    request.getRequestDispatcher (“demo.jsp"). forward(request, response);//转发到demo.jsp

         详解:假设浏览器访问servlet1,而servlet1想让servlet2为客户端服务。此时servlet1调用forward()方法,将请求转发给servlet2。但是调用forward()方法,对于浏览器来说是透明的,浏览器并不知道为其服务的Servlet已经换成Servlet2,它只知道发出了一个请求,获得了一个响应。浏览器URL的地址栏不变。

     

    2、重定向:HttpServletResponse的sendRedirect()方法。

         服务器根据此请求寻找资源并发送给客户,它可以重定向到任意URL,不能共享request范围内的数据。例如:response.sendRedirect(“demo.jsp");//重定向到demo.jsp

         详解:假设浏览器访问servlet1,而servlet1想让servlet2为客户端服务。此时servlet1调用sendRedirect()方法,将客户端的请求重新定向到Servlet2。接着浏览器访问servlet2,servlet2对客户端请求作出反应。浏览器URL的地址栏改变。

     

    3、主要区别:

    (1)sendRedirect()方法不但可以在位于同一个主机上的不同Web应用程序之间进行重定向,而且可以将客户端重定向到其他服务器上的Web应用程序资源。而forward()方法只能将请求转发给同一Web应用的组件。

    (2)sendRedirect()方法不能转发到“/WEB-INF/”路径下的jsp页面资源,而getRequestDispatcher().forword()可以重定向到“/WEB-INF/”路径下的jsp页面资源。如 request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);

    (3)转发:浏览器URL的地址栏不变。

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

     

    更具体来说就是这样的:

    redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个request给服务器, 然后服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.

    forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response. 这时页面收到的request不是从浏览器直接发来了,可能己经用request.setAttribute在request里放了数据.在转到的页面可直接用request.getAttribute获得数据。

    二:转发与重定向的区别

    (1).重定向的执行过程:Web服务器向浏览器发送一个http响应--》浏览器接受此响应后再发送一个新的http请求到服务器--》服务器根据此请求寻找资源并发送给浏览器。它可以重定向到任意URL,不能共享request范围内的数据。

    (2).重定向是在客户端发挥作用,通过新的地址实现页面转向。

    (3).重定向是通过浏览器重新请求地址,在地址栏中可以显示转向后的地址。

    (4).转发过程:Web服务器调用内部方法在容器内部完成请求和转发动作--》将目标资源发送给浏览器,它只能在同一个Web应用中使用,可以共享request范围内的数据。

    (5).转发是在服务器端发挥作用,通过forward()方法将提交信息在多个页面间进行传递。

    (6).转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址。

     

    Processed: 0.011, SQL: 9