请求转发与重定向的区别

本文详细解析了请求转发和重定向在Web开发中的应用,包括它们的工作原理、实现方式及场景选择。请求转发使组件间共享信息,而重定向则开启新会话,适合于需改变请求上下文的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请求与转发:

        比喻:

            请求转发:

                    A向B发送请求,想让B帮忙完成一项工作,当B接收到请求后发现自己完成不了,于是B请C帮忙,C接收到B的请求后最终完成了该项工作,并把最后的结果返回给A。此过程A只发送了一次请求给B,A只知道把请求发给B,至于B是怎么完成的A并不关心,他只等待最终的结果。

             重定向:

                    A向B发送请求,想让B帮忙完成一项工作,当B接收到请求后发现自己无法完成,就立即告诉A情况,并向A推荐C可以完成该项工作,于是A就找C帮忙,C最终完成该项工作,返回给A。

 

            不同点:

                1、浏览器地址栏显示不同(表面区别):  

                         无论进行多少次请求,如果使用请求转发来实现,浏览器地址栏中只显示第一次发送请求的地址;

                        如果使用重定向来实现,浏览器地址栏显示的是每次请求的新地址。这只是表面上看到的不同地方。 

 

                2、组件之间可否共享信息不同(本质区别)  

                             从本质上讲,请求转发时,从发送第一次到最后一次请求的过程中,WEB容器只创建一次request和response对象,请求之间始终共享这两个对象,所以每个请求可以访问他之前请求中的参数和属性的值;

                            而重定向时,浏览器每发送一次请求,WEB容器都会重新创建新的request和response对象,所以请求之间不能共享信息,即不能在请求中访问到他之前请求中的参数和属性的值。  

 

                 3、实现方式不同:

                        3.1 请求转发的实现步骤:

                            1)说明将要转发的资源; 

                            2)获取请求转发的对象; 

                            3)调用请求转发对象中forward()方法

                              Java代码 

                                      1). String forward = "/a.jsp"; 

                                      2). RequestDispatcher rd = request.getRequestDispatcher(forward);

                                      3). rd.forward(request, reponse); 

                                    综合:request.getRequestDispatcher("/a.jsp").forward(request,response);

                        3.2  重定向的实现步骤: 

                             1) 说明将要重定向的资源; 

                             2) 调用response对象中sendRedirect方法 

                              Java代码 

                              1. String resource = request.getContextPath() + "/a.jsp"; 

                              2. response.sendRedirect(resource);

                                综合:response.sendRediect(request.geContextPath() + "/a.jsp");

 

                 4、知情人不同 

                     请求转发的过程只有WEB服务器知道,而浏览器不知道进行了多少次转发,以及都转发给哪些组件(servlet,JSP),它只是在等待WEB服务器最终的结果。

                     而重定向时,每发送一次请求,WEB服务器都会通知浏览器的,所以重定向了几次请求以及每次都向哪个组件发送的请求,浏览器很清楚,当让WEB服务器也很明白。 

 

 

                    相同点: 两者都可以进行多次请求的转发。

                    总结:什么情况下使用重定向,什么情况下请求转发,这个不是看我们的习惯,而是什么情况下必须用什么:

                        重定向:之前的request中存放的变量全部失效并进入一个新session的作用域;

                        请求转发:之前的request中存放的变量没有失效,就想把两个页面拼在一起

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值