JSP中页面跳转response.sendRedirect()和request.getRequestDispatcher()的区别

Java Web 开发中,采用MVC模式时,在控制器完成模型的调用之后选择界面对用户响应,常用有两种方式

1、通过response对象sendRedirect方法重定向:  response.sendRedirect(url);

2、通过RequestDispatcher对象的forward方法:
  request.getRequestDispatcher(url);

3、使用jsp动手指令的方法:(与第二种的方式相同)<jsp:forward psge="url"></jsp:forward>

两者的区别:

1、过程不同:response.sendRedirect(url)方式相当于浏览器接收到了响应之后又向服

                       务器发送了一次请求,相当于两次请求。

                       request.getRequestDispatcher(url)相当于方法的调用,在执行当前文件

                       的过程中转向执行的目标文件,两个文件属于同一次请求。

2、地址栏不同:response.sendRedirect(url)方式下用户在浏览器地址中看到的是目标

                           文件的地址,即地址栏会变;

                           request.getRequestDispatcher(url)方式下用户在浏览器地址中看到的

                           是当前文件的地址,即地址栏不会变。

3、数据共享的角度:response.sendRedirect(url)是重定向,前后不是一个

                                  request;sendRedirect是两次提交;

                                  request.getRequestDispatcher(url)是请求转发,前后页面共享一

                                  个request;forward一次提交。

4、参数传递:response.sendRedirect(url)跳转到指定的URL地址,产生一个新的

                        request,所以要传递参数只有在URL后加上参数,如URL?ID= 1.

                        request.getRequestDispatcher(url).forward(request,response)是直接

                        转请求转发到指定的URL,所以该请求能够直接获得一个上一个

                        请求的数据,数据 可以request。setAttribute()方法封装到request里面。

                        也就是说采用请求转发,request对象始终存在,不会重新创建,

                        而sendRedirect()会新建request对象,所以上一个request中的数据会丢

                        失。

5、功能上:response.sendRedirect(url)方法能够定向到当前应用程序的其他资源,而

                    且还能够重定向到同一个站点上的其他应用程序的资源,甚至是使

                    用绝对URL重定向到其他站点的资源;如

                    response.sendRedirect("http://www.baidu.com");

                    request.getRequestDispatcher(url)方法只能在同一个web应用程序内的资

                    源之间转发请求

response.sendRedirect(url)和request.getRequestDispatcher(url)的请求方式

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

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



 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值