ActionForward

王朝百科·作者佚名  2010-05-21
窄屏简体版  字體: |||超大  

ActionForward是 Struts的核心类之一,其基类仅有4个属性:name / path / redirect / classname。在基于Struts的Web应用程序开发过程中,Action操作完毕后程序会通过Struts的配置文件struts- config.xml链接到指定的ActionForward,传到Struts的核心类ActionServlet,ActionServlet使用 ActionForward提供的路径,将控制传递给下一个步骤。ActionForward控制接下来程序的走向。ActionForward代表一个应用的URI,它包括路径和参数,例如:path=“/modify.do?method=edit&id=10”

ActionForward的参数除了在struts-config.xml和页面中设置外,还可以通过在Action类中添加参数,或重新在Action中创建一个ActionForward。

在 ActionForward中有一个重要的属性redirect,当redirect=false时,将保存存储在http请求和请求上下文中的所有内容,仅在同一个应用中可用。当redirect=true时,Web客户端进行一次新的http请求,请求的资源可以在同一个应用中,也可以不在,原来的请求参数不再保存,原来的请求上下文也被清除,新的http请求仅包含ActionForward的path属性里所包含的参数。如果在同一个应用中,用户会话的上下文会被维护。

ActionForward分为全局转发和局部转发,Action的Mapping对象的findForward方法首先会检查局部转发列表,查找失败就会到全局转发列表中查找。书写格式中,我们一般将全局变量定义为String常数,避免误解,使得转发列表结构清晰易读。

在项目开发过程中经常碰到一种情况,当页面已经改变了,浏览器中的地址如/modify.do或/modify.jsp却没有变化,当时没有考虑这么细,虽然存在疑问,但没有影响到程序功能的实现,因此忽略过去了,今天查找了一些资料才弄清楚。客户端浏览器显示的是浏览器最后被给定的URL,当URL被提交后,在某个组件返回一个响应给浏览器之前,Web应用可能已经转发请求多次,而这些过程都发生在服务器端,客户端浏览器并不知道有什么变化。当一个 http响应被返回时,它并没有包含地址栏的值,所以浏览器仅仅显示其用来作为初始请求的地址。通过使用redirect可以改变浏览器地址的显示,因为这样可以向浏览器提交一个新的请求,但付出的代价是数据不能通过请求上下文传递到页面,这也是使用forward和redirect的差异之一。

使用forward可以定义URL的逻辑名称,然后使用逻辑名称来应用URL。这样,在更新URL时,不必更新URL的每个引用,只须在struts-config.xml中更改一次这个引用。

可以定义两类forward:全局forward和针对具体请求的forward。全局forward在整个应用程序中都可以使用,针对具体请求的forward只可以在他各自的请求action中使用。

全局forward的定义示例:

<forward

name="for"

path="/forward/for.jsp"

redirect="true"

contextRelative="true" />

针对具体请求的局部forward的定义通过在action标记中嵌套forward标记来定义:

<action-mappings >

<action path="/forac" type="com.yourcompany.struts.action.ForacAction">

<forward name="success" path="/for.jsp" />

</action>

</action-mappings>

向工作在IT第一线的程序员们致敬!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航