Webwork之Action配置详解

Webwork之Action配置详解
作者:Davy Lee, davy.lee@126.com

Webwork的核心是负责web应用程序中具体逻辑实现的action,本文的目的就是对action的配置、xwok.xml文件的部署进行详细的阐述,本文先列出配置action的注意事项及技巧,最后将给出一个具体的配置实例。

1. 让你的xwork.xml文件包含webwork-default.xml,因为它里面包含了许多默认的配置
代码如下:
[code]<include name=”webwork-default.xml”/>[/code]

2.使用隐式默认的result类型有助于减少必需的配置内容,代码如下:
[code]
<xwork>
<include name=”webwork-default.xml”/>
<package name=”default” extends=”webwork-default”>
<result-types>
<result-type name=”velocity” class=”com.opensymphony.webwork.dispatcher.VelocityResult”default=”true” />
</result-types>
<action name=”login”
class=”dealLogin” method=”doLogin”>
<result name=”success”>userIndex.htm</result>
</action>
</package>
</xwork>
[/code]
这样我们在default这个package中指定了默认的result-type为velocity,则在此包中配置的名为login这个action中,虽然结果result没有写type=”velocity”,webwork仍然会按照默认的结果类型即velocity进行调度。

3.运用全局的result映射减少重复的配置,你可以为每个package定义任意数量的全局result映射,即<global-results>,代码如下:
[code]
<xwork>
<include name=”webwork-default.xml”/>
<package name=”default” extends=”webwork-default”>
<result-types>
<result-type name=”velocity” class=”com.opensymphony.webwork.dispatcher.VelocityResult”default=”true” />
</result-types>
<global-results>
<result name=”error” type=”velocity”>/error.htm</result>
</global-results>
<action name=”login”
class=”dealLogin” method=”doLogin”>
<result name=”success”>userIndex.htm</result>
</action>
</package>
</xwork>
[/code]
这样我们执行login.action如果返回的标识码为error,尽管我们没有单独对login这个action定义result=”error”接点,webwork还是会定向到/error.htm页去。这里要注意两点,第一,局部的映射会覆盖掉全局映射;第二,全局映射要用绝对地址。

4.使用默认的interceptor-ref减少拦截机(栈)的重复配置,可以为每个package定义一个默认的interceptor-ref,代码如下:
[code]
<xwork>
<include name=”webwork-default.xml”/>
<package name=”default” extends=”webwork-default”>
<result-types>
<result-type name=”velocity” class=”com.opensymphony.webwork.dispatcher.VelocityResult”default=”true” />
</result-types>
<global-results>
<result name=”error” type=”velocity”>/error.htm</result>
</global-results>
<interceptors>
<interceptor name=”param” class=”…”/>
<interceptor name=”timer” class=””/>
</interceptors>
<default-interceptor-ref name=”param”/>
<action name=”login”
class=”dealLogin” method=”doLogin”>
<result name=”success”>userIndex.htm</result>
</action>
</package>
</xwork>
[/code]
这样我们就为这个package 指定了默认的拦截机paramInterceptor,如果此包中的login这个action没有显式指定interceptor,则webwork会按照param拦截机来处理。这里提醒两点:第一,可以把多个interceptor按照顺序组合起来组成interceptor-stack,然后把这个interceptor设置成default-interceptor-ref;第二,如果为某个action如login.action定义了interceptor,则会覆盖掉default-interceptor-ref,webwork会忽略掉default-interceptor-ref,只会按照局部的interceptor来处理。

5.package,抽象package和namespace
(1).抽象package和package很类似,只是里面不能有具体的action的映射,它的作用是提供基础的package的配置,供其他package扩展(或说继承).可以通过设置布尔类型的abstract属性为true来标识一个package为抽象package.(这个我没有试验,大家可以试验一下,呵呵)。
(2).namespace,命名空间,如果某个package 没有指定namespace,则它的默认namespace为“ ”,webwork会把你的url拆分成namespace和action名字两部分,然后webwork就会从xwork.xml中查找namespace/action命名对,如果找不到,就到默认的namespace中去找;大型应用中,应该尽量减少定义在default namespace中的action的数目。

对于webwork的action的配置,我就介绍到这里,有不当之处欢迎大家指正。最后给大家的是一个具体的例子,来自《webwork in action》一书,只为演示,供大家参考。以下例子中有3个package,default package提供基础配置,secure package存放需要认证的action,public package 存放公开的action,详细配置文件如下:
------------------------------------------------------ xwork.xml -----------------------------------------------
[code]
<xwork>
<include name=”webwork-default.xml”/>
<package name=”default” extends=”webwork-default”>
<interceptors>
<interceptor name=”auth” class=”org.hibernate.auction.web.interceptors.AuthenticationInterceptor”/>
<interceptor name=”timer” class=””/>
</interceptors>
<global-results>
<result name=”error” type=”velocity”>/error.htm</result>
</global-results>
</package>
</xwork>
[/code]
------------------------------------------------------ xwork-public .xml ---------------------------------------
[code]
<xwork>
<package name=”public” extends=”default” namespace=”/public”>
<default-interceptor-ref name=” completeStack” />

<action>
……………
</action>
</package>
</xwork>
[/code]
----------------------------------------------------xwork-secure.xml----------------------------------------
[code]
<xwork>
<package name=”secure” extends=”default” namespace=”/secure”>
<interceptor-stack name=”default”>
<interceptor-ref name=”auth”/>
<interceptor-ref name=”completeStack”/>
</interceptor-stack>
<default-interceptor-ref name=”default” />
<!—受保护的action-->
<action>
……………
</action>
</package>
</xwork>
[/code]
(全文完,作者:Davy Lee,邮件地址:davy.lee@126.com)

[code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值