请求转发与重定向

请转转发与重定向是多个servlet之间调用的实现方案

请求转发

请求转发的实现原理

  1. 手动交给服务器一个任务

  2. 完成任务以后,通过当前请求对象代替浏览器向Tomcat发起请求,申请调用twoservlet(如图所示)

  3. Tomcat接受这个请求后自动调用

重定向

原理

  1. 用户通过第一次手动方式通知浏览器访问OneServlet,OneServlet工作完成完毕以后,将TwoServlet地址写入响应头location属性当中,导致tomcat将302的状态码写入状态行

  2. 在浏览器接收到响应包之后,会读取302状态码,此时浏览器自动根据响应头中的location属性地址发起第二次请求。访问TwoServlet以完成剩余任务。

  1. 实现

    response.sendRedirect("请求地址");
    System.out.println("这个负责洗韭菜");
    ​
    //重定向解决方案
    response.sendRedirect("/myweb/two");

两者比较

请求转发重定向
请求地址请求地址只能是当前网站下的资源文件可以是网站内的资源也可以是网站外的
请求次数一次两次
请求方式与浏览器发送请求方式保持重定向解决方案中,通过地址栏通知浏览器发起下一次请求 因此调用资源文件方式一定是get

为什么请求转发的请求方式要与浏览器请求方式保持一致? 在请求转发的过程中,浏览器只发送了一个请求协议包,参与本次请求的所有servlet共享同一个请求协议包。因此这些servlet接受请求法范式与浏览器发送的请求方式保持一致。

转发和重定向该如何选则?

  • 如果在上一个Servlet当中向request域中绑定了数据,希望从下一个servlet当中把request域里面的数据取出来,使用请求转发

  • 剩下的情况都可以选用重定向,但是重定向需要在浏览器与服务端之间进行多次的往返,会消耗大量的时间在往返上面,具体使用可以根据使用场景选则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值