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获得数据。