1.重定向
(1)什么是重定向?
服务器通知浏览器向某个地址发送请求。
注:
服务器可以通过发送302状态码及location消息头(该消息头的值是一个地址,一般称之为重定向地址)给浏览器,浏览器收到之后,会
立即向重定向地址发送请求。
(2)如何重定向?
response.sendRedirect(String url);
注:
url就是重定向地址。
重定向之前,服务器会清空response对象上存放的所有数据。
(3)重定向的特点
a.重定向的地址是任意的。
b.重定向之后,浏览器地址栏的地址会发生变化。
2.转发
(1)什么是转发?
一个web组件将未完成的处理交给另外一个web组件继续做。
注:
web组件是servlet和jsp的统称。
常见的情况是一个servlet获得数据之后,转发给一个jsp来
展现这些数据。
(2)如何转发?
step1.绑订数据到request对象上。
request.setAttribute(String name,Object obj);
注:
name称之为绑订名,obj称之为绑订值。
内部的实现,实际上是将数据放到了一个map对象里面。
step2.获得转发器。
RequestDispatcher rd =
request.getRequestDispatcher(String uri);
注:
a.RequestDispatcher是一个接口,该方法会返回一个实现了
该接口的对象(即转发器)。
b.uri是转发的目的地,通常是一个jsp的地址。
c.RequestDispatcher可以理解为是一个媒介,web组件
可以通过RequestDispatcher来通知容器去调用另外一个web
组件。
d.转发的本质是一个web组件通知容器去调用另外一个web组件。
step3.转发
rd.forward(request,response);
(3)转发的特点
a.转发之后,浏览器地址栏的地址不变。
b.转发的目的地有限制,要求属于同一个web应用。
2. 比较转发与重定向
a.浏览器地址栏的地址有无变化?
重定向之后,浏览器地址栏的地址会发生变化;
转发之后,浏览器地址栏的地址不变。
b.目的地有无限制?
重定向地址没有任何限制,转发有限制(要求属于同一个web应用)。
c.能否共享request对象?
转发所涉及的各个web组件可以共享同一个request对象,
重定向不行。
注:
c1.容器收到请求之后,会立即创建request对象和response
对象,一旦响应发送完毕,容器会立即删除这两个对象。
即request对象和response对象的生存时间很短暂(在
一次请求与响应期间存在)。
c2.重定向是两次请求,上次请求创建的request对象和response
对象已经被删除。
d.转发是一件事没有做完,让另外一个web组件继续做;而重定向是
一件事已经完成,去做另外一件独立的事。