重定向与请求转发

多个servlet之间调用

前提条件

某些来自于浏览器发送的请求,需要服务端的多个servelt协同处理,但是浏览器一次只能访问一个servlet,导致用户需要手动通过浏览器发起多次请求才能得到服务。这样会增加用户获得服务的难度,导致用户放弃访问当前网站。

提高用户使用感受的规则

无论本次请求涉及到多少个servlet,用户只需要【手动】通知浏览器发起一次请求即可

调用规则的实现方法

  • 重定向解决方案
  • 请求转发解决方案

重定向解决方案(浏览器)

工作原理:

用户第一次通过【手动】方式通知浏览器访问oneservlet,oneservlet工作完毕后,将twoservlet地址写到响应头的location属性中,导致tomcat将302状态码写入到状态行中。 浏览器接收到响应包之后,读取到302状态码,此时浏览器会自动根据loction属性地址发起第二次请求,访问twoservlet去完成请求中剩余任务。

实现命令

response.sendredirect(“请求地址”)将地址写入到响应包中响应头中的loction属性

请求地址:/网站名/资源文件名

String str = "洗韭菜";
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print(str);
        System.out.println("洗韭菜");
        response.sendRedirect("two");

特征

  • 请求地址:既可以把当前网站内部的资源文件地址发送给浏览器(/网站名/资源文件名)

    ,也可以把其他网站中的资源文件发送给浏览器(http://ip地址:端口号/网站名/资源文件名)

  • 请求次数:浏览器至少要发送两次请求,但是只有第一次请求是用户手动发送的,后续请求都是浏览器自动发送的

  • 请求方式:重定向解决方案中,是通过地址栏通知浏览器发送下一次请求的,因此通过重定向解决方案调用的资源文件接收的请求方式一定是【get】

缺点

需要在浏览器与服务器之间进行多次往返,大量的时间消耗在往返此处上,增加用户等待服务时间。

请求转发解决方案(服务端)

原理

用户第一次通过手动方式要求浏览器访问oneservlet。oneservlet工作完毕后,通过当前请求对象代替浏览器向tomcat发送请求,申请调用twoservlet。

tomcat在接收到请求之后,自动调用twoservlet来完成剩余任务。

实现命令:

请求对象代替浏览器向tomcat发送请求

1.通过当前请求对象生成资源文件申请报告对象

RequestDispatcher report = request.getRequestDispatcher("/资源文件名");一定要以 / 为开头

2.将报告对象发送给tomcat

report.forward(当前请求对象,当前响应对象)

RequestDispatcher report = request.getRequestDispatcher("/two");
report.forward(request,response);

优点

  • 无论本次请求涉及到多少个servlet,用户只需要手动通过浏览器发送一次请求

  • servlet之间调用发生在服务端计算机上,节省服务端与浏览器之间的往返次数,增加处理服务速度

特征

  • 请求次数:浏览器自始至终只发送了一次请求
  • 请求地址:只能向tomcat申请调用当前网站下资源文件地址

request.getRequestDispatcher("/资源文件名") 不要写网站名

  • 请求方式:在请求转发的过程中,浏览器只发送了一个http请求协议包,参与本次请求的所有sercvlet共享同一个请求协议包,根据客户端第一次发送请求时的请求方式决定。

多个servlet之间数据共享的实现方案

  • 数据共享:oneservlet工作完毕后,将产生的数据交给twoservlet来使用。
  • servlet规范中提供四种数据共享方案。
    • servletcontext接口
    • cookie类
    • httpSession接口
    • httpservletrequest接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值