1.重定向
1.1什么是重定向?
服务器通知浏览器重新访问一个新的地址。
服务器可以发送一个302状态码及一个Location消息头(该消息头的值是一个地址,一般称之为重定向地址)给浏览器;浏览器收到之后,会立即向重定向地址发请求。
1.2如何重定向?
response.sendRedirect(String url); url为重定向地址。
1.3特点
a.重定向地址是任意的。
b.重定向之后,浏览器地址栏的地址会发生变化。
注:重定向之前,容器会先清空response对象上存放的所有数据。
2.转发
2.1什么是转发?
一个web组件将未完成的处理交给另外一个web组件继续做。
a. web组件指的是jsp或者servlet。
b. 常见的场景是一个servlet获取处理结果之后,转交给一个jsp来展现。
2.2如何转发?
2.2.1)绑订数据到request对象上。
request.setAttribute(String name,Object obj);
注:
name一般称之为绑定名,
obj一般称之为绑定值。
Object request.getAttribute(String name);
2.2.2)获得转发器。
RequestDispatcher rd = request.getRequestDispatcher(String uri);
注:
a. RequestDispatcher是一个接口,该方法会返回一个符合该接口要求的对象,我们一般称之为转发器。
b. uri是转发的目的地,比如一个jsp的地址。
c. 转发的本质是一个web组件通过转发器,通知容器去调用另外一个web组件。
2.2.3)转发
rd.forward(request,response)
2.3特点
2.3.1)转发之后,浏览器地址栏的地址不变。
2.3.2)转发的目的地地址是有限制的,要求是一个应用中的某个web组件的地址。
3.比较转发与重定向
3.1 能否共享request对象
转发可以,而重定向不行。
a.当请求到达容器时,容器会立即创建request和response,当响应发送完毕,容器会立即销毁这两个对象。也就是说,request和response的生存时间是一次请求与响应期间存在
b.转发是一次请求,重定向是两次请求。
3.2浏览器地址栏的地址有无变化
转发无变化,而重定向有变化。
3.3目的地有无限制
转发有限制(同一个应用),而重定向没有任何限制。
注:写绝对路径时,链接、表单提交、重定向从应用名开始写,转发从应用名之后开始写。
不要将应用名直接写在路径里面。而应该使用String request.getContextPath();方法获得实际部署时的应用名: