![0475a53d3b7ba40955c655e36db95cd3.png](https://i-blog.csdnimg.cn/blog_migrate/cc5844a18686e30a20c16bfd9b1b4fea.jpeg)
1.客户端控制(用户控制)的跳转的两种方式
点击超链接 href=""
提交表单 action=""
本质:客户端向服务器端发起了一个新的请求
2.服务器控制(程序控制)的跳转的两种方式
转发 dispatcher
重定向 redirect
3.转发和重定向有什么共同点
都实现了(服务器端控制的)跳转
4.转发和重定向的区别
1.语法不同
转发:request.getRequestDispatcher("/login2/login.jsp").forward(request, response);
重定向:response.sendRedirect("/myservlet2/login2/success.jsp");
2.跳转后是否可以获取保存在request中的内容
转发:得到
重定向:得不到,因为相当于一个新的请求
3. 跳转后地址栏的路径不同
转发 :[ LoginServlet]------>login.jsp
重定向:LoginServlet-------->[success.jsp]
4.原理的不同
转发:服务器端控制的,在服务器端进行的跳转,一个请求
重定向:服务器端控制的,在客户端端进行的跳转 两个请求
5.效率高低不同
转发的效率高于重定向
6.跳转的范围不同
转发:当前项目(至多是当前服务器的所有项目,需要进行特殊的配置)
重定向:整个互联网
7.路径不同
转发
绝对路径:不可以 哪怕是当前项目
根路径 /login2/login.jsp 不写上下文路径 /代表当前项目的根目录
相对路径:只有相对路径1,相对于当前资源自身,不能相对于basePath
转发的时候建议使用根路径 !!!!
重定向
绝对路径:没有问题
根路径 /myservlet2/login2/success.jsp 需要写上下文路径 /代表当前服务器
因为重定向可以跳转到当前服务器的所有项目
相对路径:只有相对路径1,相对于当前资源自身,不能相对于basePath
重定向的使用建议使用根路径,但是建议动态获取上下文路径
request.getContextPath()+"/login2/success.jsp"
8.是否导致表单的重复提交
转发:会
重定向:不会
9.是否经过过滤器
转发:默认不经过(可以通过设置,让转发也经过过滤器)
重定向:会经过
10、转发和重定向的选择
某些情况下,无可选择
希望前后两个组件共享request数据,使用转发
跳转到同一个应用的WEB-INF目录下只能用转发 !!!!
跳转到不同的应用只能使用重定向
使用Cookie存储数据需要使用重定向
11、跳转到同一个应用,哪种方式更好
使用转发效率高,尽量使用转发
使用转发需要解决重复提交问题,尤其是添加操作
注销之后一般用重定向
连续表单页面之间建议使用重定向,避免属性冲突
转发:
![6a00be78763421719be3921acf8f5491.png](https://i-blog.csdnimg.cn/blog_migrate/2ca06c239df04d0f13628e056f8997b3.jpeg)
重定向:
![b36cb7e741480f475bc613a505e36f44.png](https://i-blog.csdnimg.cn/blog_migrate/1f42ed2ede0489b5c5e126bdb5bf7235.jpeg)