一 重定向机制的运作流程:
1.用户在浏览器端输入特定URL,请求访问服务器端的某个组件
2.服务器断电组件返回一个状态码为302的相应结果
3.当浏览器端接收到这种响应结果后,再立即自动请求访问另一个web组件
4.浏览器端接收到来自另一个web组件的相应结果
HttpServletResponse的sendRedirect(String location) 用于重定向
特点:
1.Servlet源组件 (下图中的Servlet1)生成的响应结果不会被发送到客户端. response.sendRedirect(String location)方法一律返回状态码为302的响应结果.
2.如果源组在进行重定向之前,已经提交了响应结果,会抛出IllegalStateException 为了避免异常,不应该在原组件中提交响应结果.
3.在Servlet源组件重定向语句后面的代码也会执行.
4.对于sendRedirect(String location)方法的参数, 如果以”/开头” 表示相对于当前服务器根据路径的URL以”http”开头,表示一个完整路径.
6.目标组件(下图中的Servlet)不必是同一服务器的同一个web应用的组件,它可以是任意一个有效网页.
二 请求转发
一个servlet对象无法获得另一个Servlet对象的引用; 如果需要多个Servlet 组件共同协作(数据传递),只能使用 Servlet 规范为我们提供的两种方式:
请求转发: Servlet(源组件)先对客户请求做一些预处理操作,然后把请求转发给其他web组件(目标组件) 来完成包括生成响应结果在内的后续操作.
包换:Servlet(源组件) 把其他web组件(目标组件)生成的响应结果包含到自己身的响应结果中
转发包含的共同点
源组件和目标组件处理的都是同一个客户请求, 源组件和目标组件共享同一个ServletRequest 和 ServletResponse 对象
目标组件都可以为 Servlet , JSP 或 HTML 文档
都依赖 javax.servlet.RequestDispatcher接口