Struts2 Interceptors

#在这个教程中你将会看到不同的方法创建自己的拦截器栈,使用action类关联它。

#Struts形成于一系列的提前定义好的拦截器和拦截器栈。struts-default.xml文件包含了struts-default 包,这个包定义了所有的拦截器和拦截器栈。你可以使用栈来满足你的需要。

当你从struts-default包扩展你自己的包时,通过默认的defaultStack将适用于你包下的所有的action。通过以下的方法在struts-default.xml文件中配置。

<default-interceptor-ref name="defaultStack"/>
#现在让我们创建自己的拦截栈,   interceptor-stack元素用于创建一个拦截器栈。一个栈包含了一组拦截器。栈中的每一个拦截器被定义使用元素 interceptor-ref。在这个例子中,我们将会创建一个栈相似于defaultStack,通过我们的需要自定义有效的烂机器。

#在SampleAction类中有三个方法,populate(),execute()和validate()。因为我们从ActionSupport继承,ActionSupport实现了Validateable接口,action类的方法validate()通过工作流程的拦截器将会被创建。通过默认的validate()方法在执行的过程中会调用populate()和方法execute(),但是只有当execute()方法被被调用时我们才需要validate()方法。

#我通过在 有效拦截器的excludeMethodes元素确定计算好的方法。

#struts.xml文件包含以下的代码:

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="default" extends="struts-default">
        <interceptors>
            <interceptor-stack name="exampleStack">
                    <interceptor-ref name="exception" />
                    <interceptor-ref name="alias" />
                    <interceptor-ref name="servletConfig" />
                    <interceptor-ref name="prepare" />
                    <interceptor-ref name="i18n" />
                    <interceptor-ref name="chain" />
                    <interceptor-ref name="debugging" />
                    <interceptor-ref name="profiling" />
                    <interceptor-ref name="scopedModelDriven" />
                    <interceptor-ref name="modelDriven" />
                    <interceptor-ref name="fileUpload" />
                    <interceptor-ref name="checkbox" />
                    <interceptor-ref name="staticParams" />
                    <interceptor-ref name="actionMappingParams" />
                    <interceptor-ref name="params">
                            <param name="excludeParams"> dojo\..*,^struts\..*</param>
                    </interceptor-ref>
                    <interceptor-ref name="conversionError" />
                    <interceptor-ref name="validation">
                            <param name="excludeMethods">populate</param>
                    </interceptor-ref>
                    <interceptor-ref name="workflow">
                            <param name="excludeMethods"> input,back,cancel,browse</param>
                    </interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <action name="*Sample" method="{1}" class="vaannila.SampleAction">
            <interceptor-ref name="exampleStack" />
            <result name="populate">/first.jsp</result>
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>
 
如果你看我们的exampleStack我们需要做的唯一改变就是,我们已经改变了有效拦截器的excludeMethods,剩下的都和defaultStack相似。这仅仅是为了展示怎样创建自己的拦截器栈,你也可以以更简单的方法达到相同的效果。
#你可以从defaultStack扩展你的额栈,按以下方式重新有效拦截器的excludeMethodes参数来完成相同的结果。
<struts>
    <package name="default" extends="struts-default">
        <action name="*Sample" method="{1}" class="vaannila.SampleAction">
            <interceptor-ref name="defaultStack" >
                <param name="validation.excludeMethods"> populate</param>
            </interceptor-ref>
            <result name="populate">/first.jsp</result>
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>
#类SampleAction如下:
package vaannila;

import com.opensymphony.xwork2.ActionSupport;

public class SampleAction extends ActionSupport{

    private static final long serialVersionUID = 1L;
    
    public void validate()
    {
    	System.out.println("validate() method called");
    }
    
    public String populate()
    {
    System.out.println("populate() method called");
    	return "populate";
    }
    
    public String execute()
    {
        System.out.println("execute() method called");
        return SUCCESS;
    }
}
#当你使用defaultStack没有任何改变运行代码时。控制台将会输出以下消息:
validate() method called
populate() method called
validate() method called
execute() method called


#当你使用创建的exampleStack运行代码时,控制台输出以下信息:
populate() method called
validate() method called
execute() method called
#你可以看validate()方法在populate中没有被调用。通过这种方式你可以根据你的需求自定义栈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值