转发与重定向的区别及使用场景

转发和重定向是经常使用的两种页面跳转方法,但他们在原理实现和应用场景上都有很多的不同,总结如下:

1.语法不同

        //转发
        req.getRequestDispatcher("index.jsp").forward(req,resp);
        //重定向
        resp.sendRedirect("index.jsp");

其中req代表HttpServletRequest类即浏览器的请求,resp代表HttpServletResponse类即服务器的响应。

2.原理不同

2.1转发的原理图解

在这里插入图片描述浏览器向Servlet01页面发送一个请求,若在Servlet01中定义了转发的方法,会在服务器内部完成跳转,方法名为req.getRequestDispatcher("index.jsp").forward(req,resp);

这一过程对于浏览器和用户而言是不可见的,因此地址栏不会有任何变化

2.2重定向的原理图解

在这里插入图片描述浏览器向Servlet01页面发送一个请求,若在Servlet01中定义了重定向的方法,会由服务器先向浏览器返回带有目的页面URL的参数,并附加状态码302,让浏览器知道现在要完成跳转动作。

接收到跳转指令后,浏览器向目的URL重新发送请求,若请求成功服务器返回状态码200,完成重定向跳转动作。

这一过程需要浏览器的参与,地址栏会有相应的变化(变化为跳转后的URL)。

3.跳转的范围不同

由于转发是在服务器内部进行的,跳转的范围被限制在当前服务器的当前应用

而重定向由浏览器发送URL请求完成,范围是所有服务器的所有应用

4.“/”标识符代表的含义不同

由于转发是在服务器内部进行的,在指定转发的URL中,“/”代表当前应用

而重定向的“/”则代表当前服务器。

5.刷新后是否会重新提交表单/参数

对于转发而言,通过Request对象携带的参数会继续存在,若刷新当前页面,则会导致已经提交的表单再次提交,对于主流浏览器而言,此时会弹出是否重复提交表单的确认弹窗。

而重定向不会携带这些数据,刷新时安全的。

6.效率不同

对于转发而言,过程发生在服务器内部,不经过重定向的二次网络过程和请求,因此效率更高

7.携带参数的方式不同

对于转发而言,携带参数跳转的方式是通过方法request.setParameter来绑定。

而对于重定向,一种可行的办法是用?key=value&key2=value2的方式在URL后面增加显性参数。

如何选择?

建议一:

对于竭力避免表单重复提交的场景下选择重定向方式

建议二:

对于效率要求更高的场景选择服务器内转发

建议三:

若携带较多参数则选择服务器内转发

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值