JSP - WEB组件关系(请求转发/重定向/包含)

来源:互联网 发布:mac上如何卸载软件 编辑:程序博客网 时间:2024/06/06 05:30

Web组件之间存在三种关联关系(请求转发,重定向,包含)

请求转发:

定义:请求转发允许把请求转发给同已应用程序的其他WEB组件。

实现:Servlet类使用 javax.servlet.RequestDispathcer.forward()方法来转发它所收到的HTTP请求。转发目标组件将处理该请求并生 成响应结果,或者将请求继续转发到另一个组件。最初请求的ServletRequest和ServletResponse对象被传递给转发目标组件,这是 的目标组件可以访问整个请求上下文。

请求转发允许把请求转发给同一应用程序中的其他Web组件。这种技术通常用于Web应用控制层的Servlet流程控制器,它检查HTTP请求数据,并将请求转发到合适的目标组件,目标组件执行具体的请求处理操作,并生成响应结果

总结:转发的源组件和目标组件在request范围内共享数据,及他们拥有同一个request对象啊。请求转发只能转发给同一个WEB应用中的组件。


如果当前的Servlet组件要把请求转发给一个JSP组件,如hello.jsp,可以在Servlet的 service()方法中执行以下代码:

RequestDispatcher rd=request.getRequestDispatcher("hello.jsp");//forward to requested URLrd.forward(request,response);或者:RequestDispatcher rd=request.<span style="display: none; width: 0px; height: 0px;" id="transmark"></span>getRequestDispatcher("hello.jsp").forward(request,response);

在jsp中,可以使用<jsp:forward>标签来转发请求

<jsp:forward page="hello.jsp"/>

URL重定向:

重定向类似于请求转发,但也有一些重要区别:

1.Web组件可以将请求重定向到任一URL,而不仅仅是同一个应用中的URL。

2.重定向的源组件和目标组件之间不共享同一个HttpServletRequest对象,及不能共享request范围内的数据。

3.转发的话URL地址栏值不会改变,重定向的话URL地址栏值会改变。


HttpServletResponse的sendRedirect()方法

response.sendRedirect(“http://********/”);若传参则在路径后加”?action=list”类似这样的queryString

包含:

定义:包含关系允许一个WEB组件聚集来自同一个应用中其他WEB组件的输出数据,并使用被聚集的数据来创建相应结果。

包含关系允许一个Web组件聚集来自同一个应用中其他Web组件的输出数据,并使用被聚集的数据来创建响应结果。这种技术通常用于模板处理器,它可以控制网页的布局。模板中每个页面区域的内容来自不同的URL,从而组成单个页面。这种技术能够为应用程序提供一致的外观和感觉。包含关系的源组件和目标组件共用同一个HttpServletRequest对象,因此它们共享request范围内的共享数据


实现:javax.servlet.RequestDispathcer.include()方法包含其他的WEB组件

RequestDispatcher rd;rd=req.getRequestDispatcher("/header.jsp")).include(request,response);rd=req.getRequestDispatcher("/main.jsp")).include(request,response);rd=req.getRequestDispatcher("/footer<span style="display: none; width: 0px; height: 0px;" id="transmark"></span>.jsp")).include(request,response);

这样就不用rd.forward(request,response);来转发请求了

在JSP文件中,可以通过<include>指令来包含其他的Web资源,例如:

静态包含:<!-- 这里可以以这种方式传参 --><%@ include file="header.jsp?action=list"%><span style="display: none; width: 0px; height: 0px;" id="transmark"></span><%@ include file="main.jsp"%><%@ include file="footer.jsp"%>动态包含:<jsp:include page="Header.jsp"><!-- 这里可以以这种方式传参 --><jsp:param name=””  value=””> </jsp:include>



0 0