Servlet(2)----------请求转发和重定向原理分析及区别

1、什么是请求转发?

        将两个servlet配合在一起,形成一个工作流,完成用户的一个请求。

2、如何从AServlet跳到BServlet中

       (代码实现) RequestDispatcher rd = request.getRequestDispatcher(目标servlet的url-pattern);

                         rd.forward(request,response);

3、请求转发的特点:

                    1)请求转发动作发生在服务器内部地址栏不改变

                    2)被请求转发连接的servlet处于同一个请求中。

4、request作用域:

            作用:可以存储命名属性。name = value

            如何使用request作用域传递数据:

                             ---存:request.setAttribute(String name,Object obj);

                             ---取:Object obj = request.getAttribute(String name);

5、request生命周期:

                    begin:   请求叨叨服务器创建

                       end:    响应回到客户端。

         数据共享范围:一次请求有效。

6、请求重定向redirect

        作用:可以在资源(两个servlet)之间做跳转

        使用:response.sendRedirect(目标资源的URI)<带包名>

        特点:

                    ---请求动作发生在服务器外部地址栏改变

                    ---请求重定向连接的两个servlet,处于两次请求

         原理:



原理(上图)解释:为什么说请求转发是一次请求,请求重定向是两次请求?

 原因:转发请求:客户端发送http请求(r1), 此时web服务器接收请求在内部调用相关方法完成请求处理及转发操作(Aservlet中),此时(BServlet)接收r1处理后的结果,并发送给客户端; 

请求重定向:客户端发送http请求(r1),此时web服务器接收到请求并响应302状态码和新的location地址,客户端收到响应后发现时302状态码和新的location地址,客户浏览得到新的指令后再次发出请求(r2,新的请求url是新的location),服务器根据新的请求寻找新的资源并响应客户端;

---->比如:一个人去银行分行办理业务,而这个业务他们不能够处理,但是他们告诉你,这个业务必须要去总部处理,所以你需要回家去总部处理,最后办理业务完成。

7、请求转发和重定向的使用时机:

            1)请求转发(forward):有数据传递

                        如果两个servlet之间,需要传递大量的数据使用forward

            2)请求重定向(redirect):没有数据需要传递或者只有少量的数据传递

                        如果两个servlet之间不需要传递任何数据,或者只有少量数据传递

8、两者的区别:

  完成对象 请求次数 地址栏 服务器对象 速度
请求转发 转发发生在服务器端 一次请求 不变 必须是同一台服务器
请求重定向 重定向发生在客户端 二次请求 改 变 可以是不同服务器






猜你喜欢

转载自blog.csdn.net/qq_36115651/article/details/79968316