请求转发和请求重定向的区别_JavaEE学习——请求转发和响应重定向

本文详细介绍了HTTP请求跳转的两种主要方式:客户端控制的跳转(超链接和表单提交)以及服务器控制的跳转(转发和重定向)。对比了它们在语法、数据共享、地址栏显示、效率、范围和应用场景等方面的差异,并讨论了在不同场景下如何选择合适的方式。重定向能防止表单重复提交,而转发在效率上更优,但可能导致重复提交问题。在实际开发中,根据需求选择合适的跳转方式至关重要。
摘要由CSDN通过智能技术生成

0475a53d3b7ba40955c655e36db95cd3.png

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

重定向:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值