首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Struts2拦截器配备【转】

2012-12-23 
Struts2拦截器配置【转】转载自:http://blog.csdn.net/qjyong/archive/2007/10/14/1824607.aspx1.理解拦截器

Struts2拦截器配置【转】

转载自:http://blog.csdn.net/qjyong/archive/2007/10/14/1824607.aspx
1.    理解拦截器
1.1.    什么是拦截器:

拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
1.2.    拦截器的实现原理:

大部分时候,拦截器方法都是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。如下图:


2.    拦截器的配置

Struts 2已经为您提供丰富多样的,功能齐全的拦截器实现。大家可以至struts2的jar包内的struts-default.xml查看关于默认的拦截器与拦截器链的配置。

Struts2(XWork)提供的拦截器的功能说明:



拦截器


名字


说明

Alias Interceptor


alias


在不同请求之间将请求参数在不同名字件转换,请求内容不变

Chaining Interceptor


chain


让前一个Action的属性可以被后一个Action访问,现在和chain类型的result(<result type=”chain”>)结合使用。

Checkbox Interceptor


checkbox


添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。

Cookies Interceptor


cookies


使用配置的name,value来是指cookies

Conversion Error Interceptor


conversionError


将错误从ActionContext中添加到Action的属性字段中。

Create Session Interceptor


createSession


自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。

Debugging Interceptor


debugging


提供不同的调试用的页面来展现内部的数据状况。

Execute and Wait Interceptor


execAndWait


在后台执行Action,同时将用户带到一个中间的等待页面。

Exception Interceptor


exception


将异常定位到一个画面

File Upload Interceptor


fileUpload


提供文件上传功能

I18n Interceptor


i18n


记录用户选择的locale

Logger Interceptor


logger


输出Action的名字

Message Store Interceptor


store


存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。

Model Driven Interceptor


model-driven


如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。

Scoped Model Driven


scoped-model-driven


如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。

Parameters Interceptor


params


将请求中的参数设置到Action中去。

Prepare Interceptor


prepare


如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。

Scope Interceptor


scope


将Action状态存入session和application的简单方法。

Servlet Config Interceptor


servletConfig


提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。

Static Parameters Interceptor


staticParams


从struts.xml文件中将<action>中的<param>中的内容设置到对应的Action中。

Roles Interceptor


roles


确定用户是否具有JAAS指定的Role,否则不予执行。

Timer Interceptor


timer


输出Action执行的时间

Token Interceptor


token


通过Token来避免双击

Token Session Interceptor


tokenSession


和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中

Validation Interceptor


validation


使用action-validation.xml文件中定义的内容校验提交的数据。

Workflow Interceptor


workflow


调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面

Parameter Filter Interceptor


N/A


从参数列表中删除不必要的参数

Profiling Interceptor


profiling


通过参数激活profile



       在struts.xml文件中定义拦截器,拦截器栈:

<package name="my" extends="struts-default" namespace="/manage">

        <interceptors>

        <!-- 定义拦截器 -->

        <interceptor name="拦截器名" extends="struts-default">



        <interceptors>

        <!-- 定义权限控制拦截器 -->

        <interceptor name="authority" method="listAllUser">

            <result name="success">/listall.jsp</result>

            <!-- 使用拦截器 -->

            <interceptor-ref name="defaultStack"/>

            <interceptor-ref name="authority"/>

        </action>



        <action name="userOpt" extends="struts-default">



        <interceptors>

            <!-- 定义权限控制拦截器 -->

            <interceptor name="authority"

                />

            <!-- 定义一个包含权限控制的拦截器栈 -->

            <interceptor-stack name="mydefault">

                <interceptor-ref name="defaultStack" />

                <interceptor-ref name="authority" />

            </interceptor-stack>

        </interceptors>



        <!-- 定义默认拦截器 -->

        <default-interceptor-ref name="mydefault" />



        <!-- 定义全局处理结果 -->

        <global-results>

            <!-- 逻辑名为login的结果,映射到/login.jsp页面 -->

            <result name="login">/login.jsp</result>

        </global-results>



        <action name="listall"

            extends="struts-default">

        <action name="userOpt" class="org.qiujy.web.struts2.action.UserAction">

            <result name="success">/success.jsp</result>

        </action>

    </package>

</struts>

一旦在某个包下定义了默认拦截器栈,在该包下的所有action都会使用此拦截器栈。对于那些不想使用些拦截器栈的action,则应该将它放置在其它的包下。

热点排行