Web组件之间存在三种关联关系:
- 请求转发
- URL重定向
- 包含
存在以上关联关系的Web组件可以是JSP或Servlet,对于Struts应用,还包括Action。
请求转发
这种技术通常用于Web应用控制层的Servlet流程控制器,它检查HTTP请求数据,并将请求转发到合适的目标组件,目标组件执行具体的请求处理操作,并生成响应结果。
Servlet使用javax.servlet.RequestDispatcher.forward()方法来转发它所受到的HTTP请求。转发目标组件将处理该请求并生成响应结果,或者将请求继续转发到另一个组件。
如果当前的Servlet组件要把请求转发给一个JSP,如hellojap,可以在Servlet的service()方法中执行:
RequestDispatcher rd = request.getRequestDispatcher("hello.jsp");
//Forward to requested URL
rd.forward(request,response);JSP页面中,可以使用 标签来转发请求,例如:
对于转发的组件和目标组件共享request范围内的共享数据。
请求重定向
请求重定向类似于请求转发,但也有一些重要区别:
- Web组件可以将请求重定向到任一URL,而且不仅仅是同一应用中的URL。
- 重定向的源组件和目标组件之间不共用同一个HttpServletRequest对象,因此不能共享request范围内的共享数据。
Servlet中实现重定向可以在Servlet的service()方法中执行以下代码:
response。sendRedirect(“http://www.baidu.com”);
包含
包含关系允许一个Web组件聚集来自同一个应用中其他Web组件的输出数据,并使用被聚集的数据来创建响应结果。这种技术通常用于模板处理器,它可以控制网页的布局。模板中每个页面区域的内容来自不同URL,从而组成单个页面。
包含关系的源组件和目标组件共用同一个HttpServletRequest对象,因此他们共享request范围内的共享数据。
Servlet中使用:
RequestDispatcher rd;
rd = req.getRequestDispatcher("/header.jsp");
rd.include(req,res);
JSP中使用 指令完成。