一、请求转发
1. 什么是转发?
一个Web组件(Servlet/JSP)将未完成的处理交给另一个Web组件继续处理。
注:转发的各个组件会共享request和response对象。
2. 如何转发?
step1: 绑定数据到request对象中。代码如下:
request.setAttribute(String name, Object obj);//绑定数据与其相关的两个方法:
1. request.getAttribute(String name);//获取绑定的数据
2. request.removeAttribute(String name);//移除request对象中绑定的数据
step2: 获取转发器、转发
1. RequestDispatcher rd = request.getRequestDispatcher(String url);//获取转发器
2. rd.forward(request,response);//转发
3. 转发是需要注意的问题
- 转发之前不能够执行out.close()获取out.flush();
- 转发之前会将response对象中的缓存数据清空。
4. 转发的特点
- 只有一次请求。
- 转发之后浏览器的地址栏没有变化。
- 转发所涉及的各个组件可以共享同一个request和response对象。
- 转发的目的地只能是同一应用内部的某个组件(项目内部资源)。
二、重定向
1. 什么是重定向?
浏览器向服务器发送请求后,服务器会向浏览器发送一个状态码(302)和一个消息头(location),浏览器收到后会立即向location指向的地址发送请求。
注:重定向时会发生多次请求,不能共享request和response队象。
2. 如何实现重定向?
response.sendRedirect(String url);//参数url是重定向的地址
3. 重定向的特点
- 发送多次请求。
- 重定向后浏览器的地址栏发生变化。
- 重定向所涉及的各个组件都有独有的request和response对象,不能共享。
- 重定向的地址不局限于项目内部,可以是任意应用的访问地址。
三、总结(转发与重定向的区别)
- 请求次数不同。
- 浏览器的地址栏是否发生变化。
- 能否共享request和response对象。
- 转发和重定向地址的局限性。
- 事件是否处理完毕。