请求转发
在一个浏览器发送请求时,需要多个web资源上传才能有响应结果,但因为servlet对象无法调用其他的servlet,就像是有两个servlet对象,客户端请求到servlet1后,servlet1又转发到servlet2,最后由servlet2为客户端做出响应,请求转发属于服务器行为。
方法:
返回 | 方法名 | 说明 |
---|---|---|
void | forward(ServletRequest request,ServletResponse response) | 将请求转发给另一个servlet(也就是web资源),该方法必须在响应提交给客户端之前被调用,不然抛出IllegalStateException异常 |
void | include(ServletRequest request,ServletResponse response) | 将其他servlet的响应消息与当前响应消息包含在一起 |
forward()与include()区别:
-
forward()是将请求转发到另一个servlet中,
例如servlet1请求响应返回hello,servlet2请求响应返回java,最终返回的是Java。
-
include()是将servlet1与servlet2请求响应包含一起返回。
重定向
重定向与请求转发都是用来实现URL指向,重定向是指客户端请求后,servlet会重新给你一个URL地址,让你去找这个URL地址的servlet,最后通过这个URL地址返回响应信息。
重定向的方法:
返回类型 | 方法名 | 说明 |
---|---|---|
void | sendRedirect(String location) | 返回一个302的状态码和一个新的URL地址,如果返回的是servlet当前下的相对路径,servlet会自动转换成绝对路径 |
请求响应与重定向的区别
- 请求次数不同,请求转发只请求一次,重定向要请求两次。
- 行为:请求转发属于服务器行为,重定向属于客户端行为。
- 请求速度:请求转发要快,重定向要慢慢。
- URL地址:请求转发后地址不变,重定向后地址要变。
- 范围:请求转发只能在web项目中进行,重定向可以在web项目内也可以在其他任何地方。
- request 对象和 response 对象是否可以共享,请求转发可以实现共享,重定向不能实现共享。