`

Struts笔记(三)ActionForward转发

阅读更多
3. ActionForward转发

ActionForward 实际上是一个简单但富有效率的包装类。其基类仅有四个属性:name, path,redirect, 和 classname。

3.1. ActionForward属性
name:指定ActionForward 的逻辑名字。其它组件可以通过此名称来引用该
ActionForward。以便其他属性可以很容易地被修改。

path:指定ActionForward 的URI。URI 是web 应用通信的重要方式。

redirect:如果设置为 true, 控制被重定向。缺省设置为false ,而且几乎是更好的选择。
className: 可选。当实例化该Forward 时, 用来指定一个org.apache.struts.action.ActionForward 类的子类名称。

3.2. 转发和重定向

HTTP协议本身就具有一个内建的 “重定向(redirect)”命令,服务器可以用它来将控制从一个页面发送到另一个页面。Java web 开发人员在他们的方法代码中则有另一个选择,调用转发(forward)。这二者都在各自的方式上很有用处。

Forward 将保持存储在HTTP 请求和请求上下文中的所有东西。仅可用在同一个应用中。

Redirect 指示web 客户端进行一次新的HTTP 请求。请求的资源可以在同一个应用中,也可以不在。

转发请求

Java Servlet 容器有一个内部机制,可以使一个请求被传递或者称被转发(forwarded)到另一个组件。这将允许一个请求在产生其对应的响应之前被多个组件进行处理。通过这个方法,组件可以在请求上下文中添加和修改对象,甚至修改请求参数。当一个Action 对象返回一个ActionForward时,servlet 就为这个ActionForward路径创建一个RequestDispatcher。如果路径包含查询字符串,查询字符串参数将成为被转发请求的一部分。

重定向请求
当 ActionForward的 redirect 属性设置为 true时, ActionServlet 将向浏览器发送一个
HTTP 响应,告诉浏览器重新提交一个新的请求到一个新的路径。原来的请求参数不再保留,
原来的请求上下文也消失了。新的HTTP 请求仅包含在 ActionForward的 path 属性里包含
的参数,如果有的话。URI在其被送到客户端前被重新编码,并且如果路径在同一个应用中,
用户的会话上下文也会被维护。但是重定向则总是会清除请求上下文。

3.3. 全局和局部转发

Struts 配置对ActionForward提供两个级别嵌套:
Global(全局) ActionForward 对整个应用中的所有Action 对象均有效;
Local(局部) ActionForward 则在ActionMapping 元素中定义。仅对那些在这
个ActionMapping 中调用的Action 对象有效。从Action 对象内部来看,forward 通常这样来选择:
ActionForward forward = mapping.findForward("continue");


3.4. 参数添加

3.4.1. 页面添加参数

如果你通过<html:link> 标签 (org.apache.struts.taglib.html)使用ActionForward,你可以这样来在运行时添加参数到查询组件中:
<html:link
forward="article"
paramId="key"
paramproperty="key"
name="articleForm">
<bean:write name="articleForm" property="name">
</html:link>


在struts-config.xml中配置:
<forward
name="article"
path="/do/article?dispatch=view"/>


3.4.2. 在Action类中添加参数

你也可以在一个Action类中添加参数到ActionForward中,可以这样使用:
ActionForward forward = mapping.findForward("article");
StringBuffer path = new StringBuffer(forward.getPath());
boolean isQuery = (path.indexOf("?")>=0);
if (isQuery)
path.append("&amp;dispatch=view");
else
path.append("?dispatch=view");
return new ActionForward(path.toString());


3.4.3. 动态转发

虽然在一个Struts 配置文件中定义ActionForward是个好的选择,如果必要,你也可以从头创建一个ActionForward,并设定其path 和其他参数:
ActionForward forward = new
ActionForward("/do/itemEdit?action=edit");


3.5. 自定义ActionForward

3.5.1. web.xml配置

<init-param>
<param-name>forward</param-name>
<param-value>app.MyActionForward</param-value>
</init-param>


3.5.2. struts-config.xml的<global-forwards>

<global-forwards type="app.MyActionMapping">



3.5.3. struts-config.xml的单独的forward

<forward classname="app.MyActionMapping">


3.6. 框架提供两种基本的ActionForward类.

org.apache.struts.action.ForwardingActionForward 缺省设置redirect属性为false
org.apache.struts.action.RedirectingActionForward 缺省设置redirect属性为true
分享到:
评论
1 楼 梁经国 2013-08-27  

相关推荐

Global site tag (gtag.js) - Google Analytics