第九章服务器内部转发和客户端重定向

为什么需要转发和重定向

发一个请求给Servlet,接力棒就传递到了Servlet手中。而绝大部分情况下,Servlet不能独自完成一切,需要把接力棒继续传递下去,此时我们就需要请求的**『转发』『重定向』**。

服务器内部转发

代码

request.getRequestDispatcher("/fruit/apple/red/sweet/big.html").forward(request, response);

image-20221211231411563

  • 关键:由于转发操作的核心部分是在服务器端完成的,所以浏览器感知不到,整个过程中浏览器只发送一次请求,地址栏没有变化,也只会收到服务器一次的响应信息

客户端重定向

本质:一种特殊的响应

完整定义:在请求的处理过程中,Servlet完成了自己的任务,然后以一个响应的方式告诉浏览器:“要完成这个任务还需要你另外再访问下一个资源”。

 response.sendRedirect("....");

image-20221211232905286

  • 两次请求响应的过程。客户端肯定知道请求URL有变化

重定向的相关的状态码

在这里插入图片描述

永久重定向和临时重定向

  • 永久重定向的意思就是我去让张三做手术,以后张三都不做,要做就去找李四,永久重定向的状态码是301,用的非常少
  • 临时重定向的意思,这段时间张三不能做,先让李四做,以后再做手术就可以直接找张三做 302
    • 临时重定向的进一步划分——前提是临时重定向
    • 307说明是POST+POST
    • 303是POST+GET

对比

转发重定向
一次请求两次请求
浏览器地址栏显示的是第一个资源的地址浏览器地址栏显示的是第二个资源的地址
全程使用的是同一个request对象全程使用的是不同的request对象
在服务器端完成在浏览器端完成
目标资源地址由服务器解析目标资源地址由浏览器解析
目标资源可以在WEB-INF目录下目标资源不能在WEB-INF目录下
目标资源仅限于本应用内部目标资源可以是外部资源

转发和重定向的应用场景

可以简单的判断:能用转发的先用转发,如果转发不行,再使用重定向。

  • 需要通过同一个request对象把数据携带到目标资源:只能用转发
  • 如果希望前往下一个资源之后,浏览器刷新访问的是第二个资源:只能用重定向
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

库里不会投三分

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值