【WEB】Response对象请求转发和Request对象请求派发

请求转发

Response对象在请求头中设置转发属性

//把响应头中的状态码改为302
response.setStatus(302);
//在请求头中设置location属性为要转发的路径
response.setHeader("location","http://www.sohu.com");

这类请求首先客户端发起初始请求 http://localhost:8080/abc 这个我们配置的请求Servlet

GET /abc HTTP/1.1

> Host: localhost:8080
> User-Agent: insomnia/6.5.4
> Accept: */*

Servlet通过response修改了状态码为302,并在响应头中添加转发路径 location属性,下面的响应信息发送到了客户端浏览

 HTTP/1.1 302 
< Content-Type: text/html;charset=utf-8
< Content-Language: zh-CN

< location:http://www.sohu.com

< Content-Length: 1072
< Date: Wed, 14 Aug 2019 07:18:10 GMT

浏览器接收到响应消息后,发现响应是302,就在头属性中找出location属性,重新封装下面的Http请求 http://www.sohu.com ,再次发出请求

GET / HTTP/1.1
> Host:http://www.sohu.com
> User-Agent: insomnia/6.5.4
> Accept: */*

最后就会得到转发页面
Response中还封装了一个SendRedirect()方法,能更简单实现请求转发功能。

SendRedirect方法(重定向)

特点:可以实现跨域转发

response.sendRedirect("http://www.sohu.com");
//等同于
//把响应头中的状态码改为302
response.setStatus(302);
//在请求头中设置location属性为要转发的路径
response.setHeader("location","http://www.sohu.com");

请求派发

1.创建请求派发对象

RequestDispatcher dispatcher = request.getRequestDispatcher("/bbc");//得到请求派发对象

2.forward(request,response)

dispatcher.forward(request,response);//转发

说明:用forward()方法转发,第一个Servlet无法向客户端响应,只有转给的第二个Servlet可以向客户端响应

3.include(request,response)

dispatcher.include(request,response);//包含

说明:用include方法转发,第一个Servlet和第二个Servlet均可向客户端响应,响应顺序按代码顺序响应,形成一种第一个Servlet的响应信息包含第二个Servlet的响应信息效果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值