Struts2拦截器翻译自Struts2官方网站.docx

上传人:b****5 文档编号:2941965 上传时间:2022-11-16 格式:DOCX 页数:15 大小:20.69KB
下载 相关 举报
Struts2拦截器翻译自Struts2官方网站.docx_第1页
第1页 / 共15页
Struts2拦截器翻译自Struts2官方网站.docx_第2页
第2页 / 共15页
Struts2拦截器翻译自Struts2官方网站.docx_第3页
第3页 / 共15页
Struts2拦截器翻译自Struts2官方网站.docx_第4页
第4页 / 共15页
Struts2拦截器翻译自Struts2官方网站.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

Struts2拦截器翻译自Struts2官方网站.docx

《Struts2拦截器翻译自Struts2官方网站.docx》由会员分享,可在线阅读,更多相关《Struts2拦截器翻译自Struts2官方网站.docx(15页珍藏版)》请在冰豆网上搜索。

Struts2拦截器翻译自Struts2官方网站.docx

Struts2拦截器翻译自Struts2官方网站

Struts2拦截器(翻译自Struts2官方网站)

许多的Struts2中的Action需要共享一些共用信息或者是模块,有些Action需要对输入进行验证,另外一些Action或许需要对文件上传之前做一些逻辑处理,又或者一些Action需要对重复提交进行保护,还有一些Actiion需要在页面显示前,初始化下拉框或一些页面组件。

Struts2框架使用了Interceptor(拦截器)策略使共享这些关心的模块更简单的使用起来。

当需要使用到一些映射到Action的资源时,框架生成了Action对象,但在该Action被执行前,执法该Action中的方法被另外一个对象拦截了,在Action执行时,可能再次被拦截,我们亲切地称此对象为拦截器。

理解拦截器

拦截器能够在一个Action执行前后拦截它。

目前的很多框架的核心实现均是基于拦截器。

(本人说两句,OOP因为拦截器而显得更为精彩,AOP必将成为下一个核心关注点)。

拦截器可以帮助实现很多公共的内容,其中有重复提交,类型转换,对象初始化,验证,文件上传,页面初始化等等。

由于每个拦截器都可以像热插拔的模块,你可以在你的Action中正确地去使用需要的拦截器。

拦截器可以配置在一个基类的action中,自定义的拦截器可以尽量少或者配合框架中的已有的拦截器。

所以套用句外国人的话说吧,在一个Action执行时,让我们为它再提升一些吧,给Action更大

的舞台更强大的力量吧。

如上图所示,Struts2的Action被一个或者多个拦截器围绕,所有的用户请求都会被拦截器所拦截,最后交给Action处理,处理结果以逻辑视图的方式返回给用户,调用的流程由配置文件来实现。

在一些例子中,一个拦截器可以解决像重复提交以及验证失败这样的例子。

当然也可以改变一个Action在执行前的状态。

拦截器可以定义为一个指定执行顺序的链中,在某些情况下,拦截器的顺序非常的重要。

="struts-default">该元素的意思是定义了一个继承于struts-default包的包,那么该包中的所有action均可使用struts-default.xml中定义的拦截器以及拦截器链。

其中注意一点,struts-default.xml中定义了一系列的拦截器和拦截器链,同时也定义了一个默认的拦截器defaultStack,一电定义了默认的拦截器,那么该拦截器将会对包中的所有的Action起作用,当然如果你的Action中显式地定义了拦截器,那么默认拦截器将会失去作用,当然如果想不让他失去作用,那么也必须显式地定义系统默认的拦截器。

<default-interceptor-ref..../>元素为<package../>元素的一个子元素配置,如果在某个包中定义了一个默认的拦截器,那么此拦截器将对该包中的所有的Action都是有效的,当然一定要记住,显式地定义拦截器的情况除外。

当然除了可以使用系统提供的默认的拦截器,我们也可以自定义自己的拦截器。

Struts2框架提供了一个定义拦截器的接口Interceptor接口。

同时Struts2框架也提供了一个可以用于过滤拦截Action方法的类MethodFilterInterceptor。

该类有两个属性excludeMethods和includeMethods。

分别代表指定拦截器拒绝拦截的方法和需要拦截的方法。

例:

struts.xml

<packagename="default"extends="struts-default">

<interceptors>

<interceptorname="timer"class=".."/>

<interceptorname="logger"class=".."/>

</interceptors>

<actionname="login"

class="tutorial.Login">

<interceptor-refname="timer"/>

<interceptor-refname="logger"/>

<resultname="input">login.jsp</result>

<resultname="success"

type="redirect-action">/secure/home</result>

</action>

</package>

在大部分的Web应用中,我们发现会一再地重复应用一些拦截器的设置。

重复地定义一系列的拦截器是个麻烦的事,当然我们可以绑定这些拦截器到一个链中。

 

struts.xml

<packagename="default"extends="struts-default">

<interceptors>

<interceptorname="timer"class=".."/>

<interceptorname="logger"class=".."/>

<interceptor-stackname="myStack">

<interceptor-refname="timer"/>

<interceptor-refname="logger"/>

</interceptor-stack>

</interceptors>

<actionname="login"

class="tutuorial.Login">

<interceptor-refname="myStack"/>

<resultname="input">login.jsp</result>

<resultname="success"

type="redirect-action">/secure/home</result>

</action>

</package>

 

看看上面的配置如果不明白的话,再去看看struts-default.xml可以弄清楚这些拦截器都干什么了。

<?

xmlversion="1.0"encoding="UTF-8"?

>

<!

--

/*

*$Id$

*

*LicensedtotheApacheSoftwareFoundation(ASF)underone

*ormorecontributorlicenseagreements.SeetheNOTICEfile

*distributedwiththisworkforadditionalinformation

*regardingcopyrightownership.TheASFlicensesthisfile

*toyouundertheApacheLicense,Version2.0(the

*"License");youmaynotusethisfileexceptincompliance

*withtheLicense.YoumayobtainacopyoftheLicenseat

*

*http:

//www.apache.org/licenses/LICENSE-2.0

*

*Unlessrequiredbyapplicablelaworagreedtoinwriting,

*softwaredistributedundertheLicenseisdistributedonan

*"ASIS"BASIS,WITHOUTWARRANTIESORCONDITIONSOFANY

*KIND,eitherexpressorimplied.SeetheLicenseforthe

*specificlanguagegoverningpermissionsandlimitations

*undertheLicense.

*/

--><!

DOCTYPEstrutsPUBLIC

"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"

"http:

//struts.apache.org/dtds/struts-2.0.dtd"><struts>

<beanclass="com.opensymphony.xwork2.ObjectFactory"name="xwork"/>

<beantype="com.opensymphony.xwork2.ObjectFactory"name="struts"class="org.apache.struts2.impl.StrutsObjectFactory"/><beantype="com.opensymphony.xwork2.ActionProxyFactory"name="xwork"class="com.opensymphony.xwork2.DefaultActionProxyFactory"/>

<beantype="com.opensymphony.xwork2.ActionProxyFactory"name="struts"class="org.apache.struts2.impl.StrutsActionProxyFactory"/><beantype="com.opensymphony.xwork2.util.ObjectTypeDeterminer"name="tiger"class="com.opensymphony.xwork2.util.GenericsObjectTypeDeterminer"/>

<beantype="com.opensymphony.xwork2.util.ObjectTypeDeterminer"name="notiger"class="com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer"/>

<beantype="com.opensymphony.xwork2.util.ObjectTypeDeterminer"name="struts"class="com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer"/><beantype="org.apache.struts2.dispatcher.mapper.ActionMapper"name="struts"class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper"/>

<beantype="org.apache.struts2.dispatcher.mapper.ActionMapper"name="composite"class="org.apache.struts2.dispatcher.mapper.Com

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1