Struts20第04章Interceptor文档格式.docx

上传人:b****6 文档编号:8563406 上传时间:2023-05-11 格式:DOCX 页数:25 大小:325.59KB
下载 相关 举报
Struts20第04章Interceptor文档格式.docx_第1页
第1页 / 共25页
Struts20第04章Interceptor文档格式.docx_第2页
第2页 / 共25页
Struts20第04章Interceptor文档格式.docx_第3页
第3页 / 共25页
Struts20第04章Interceptor文档格式.docx_第4页
第4页 / 共25页
Struts20第04章Interceptor文档格式.docx_第5页
第5页 / 共25页
Struts20第04章Interceptor文档格式.docx_第6页
第6页 / 共25页
Struts20第04章Interceptor文档格式.docx_第7页
第7页 / 共25页
Struts20第04章Interceptor文档格式.docx_第8页
第8页 / 共25页
Struts20第04章Interceptor文档格式.docx_第9页
第9页 / 共25页
Struts20第04章Interceptor文档格式.docx_第10页
第10页 / 共25页
Struts20第04章Interceptor文档格式.docx_第11页
第11页 / 共25页
Struts20第04章Interceptor文档格式.docx_第12页
第12页 / 共25页
Struts20第04章Interceptor文档格式.docx_第13页
第13页 / 共25页
Struts20第04章Interceptor文档格式.docx_第14页
第14页 / 共25页
Struts20第04章Interceptor文档格式.docx_第15页
第15页 / 共25页
Struts20第04章Interceptor文档格式.docx_第16页
第16页 / 共25页
Struts20第04章Interceptor文档格式.docx_第17页
第17页 / 共25页
Struts20第04章Interceptor文档格式.docx_第18页
第18页 / 共25页
Struts20第04章Interceptor文档格式.docx_第19页
第19页 / 共25页
Struts20第04章Interceptor文档格式.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Struts20第04章Interceptor文档格式.docx

《Struts20第04章Interceptor文档格式.docx》由会员分享,可在线阅读,更多相关《Struts20第04章Interceptor文档格式.docx(25页珍藏版)》请在冰点文库上搜索。

Struts20第04章Interceptor文档格式.docx

resultCode=invokeActionOnly();

/*省略语句*/

}

在执行Action之前,Struts2会检查Action是否配置有拦截器,如果有,遍历所有拦截器并且执行之,如果对应的Action没有配置拦截器,那么Struts2将只执行Action。

但是似乎并没有看到Action和Interceptor的执行的先后次序,别着急,让我们看看其它的代码里有没有关于Interceptor的执行先后次序。

Xwork的拦截器都必须实现Interceptor接口,但是实际上大部分的拦截器都是通过继承抽象类AbstractInterceptor实现拦截器的功能。

下面来了解下AbstractInterceptor类的具体代码。

AbstractInterceptor.java

packagecom.opensymphony.xwork2.interceptor;

importcom.opensymphony.xwork2.ActionInvocation;

publicabstractclassAbstractInterceptorimplementsInterceptor{

publicvoidinit(){

publicvoiddestroy(){

publicabstractStringintercept(ActionInvocationinvocation)throwsException;

在这个抽象类中没有实现任何方法,就是一个简单Interceptor接口的实现。

那么拦截器要在Action之前执行,那么只有在继承这个类时,通过实现它的抽象方法intercept()来完成拦击器的功能。

也就是说在intercept()方法中会先执行拦截器想要完成的任务,然后再转向Action执行,一般函数最后会加上这句代码:

Stringresult=invocation.invoke();

通过上面的介绍,不难发现,Interceptor的本质也是一个Action,毕竟其产生的目的就是为了提高Action代码的复用性,降低Action的耦合性。

但是Interceptor又是一种特殊的Action,因为其执行于指定Action或之前,或之后完成可复用的模块化业务逻辑。

Interceptor能够拦截Action的执行,它的出现使得开发者能够在Action执行之前或者之后执行一段业务逻辑。

它们同时也可以阻止Action的执行,使得开发者对一段通用的业务逻辑进行封装,然后用在其它地方。

下面通过对Interceptor的源代码中的类和接口的展示,希望能够使读者对Interceptor的本质有更深一层次的认识。

4.1.2Interceptor接口

拦截器是一个Struts2框架很好的特性,它的使用十分灵活,同时框架为了满足特定的需要实现了一些特定的API,用户可以根据自己的需要选用。

表4-1Interceptor提供的预定义接口

Interceptor定义的接口

描述

Interceptor

interceptor是采用interceptor模式的一种无状态类

NoParameters

这个接口通常由不需要参数附加的Action实现

ParameterNameAware

这个接口通常由需要参数附加的Action实现

PreResultListener

实现这个接口可以获得一个在Action之后但是结果之前的回调

⏹Interceptor:

是所有拦截器必须实现的一个接口。

⏹NoParameters:

这个标记接口应该由那些不想要任何参数附加的Action来实现,这种情况通常是这样的,用户在使用Action标签,不想框架附加任何参数给次Action,而是想要手动的来设置这些参数。

⏹ParameterNameAware:

这个接口通常由那些需要参数附加的Action实现,通常和ParametersInterceptor配合起来实现参数的附加,例如Action可能有这样一份参数的白名单和黑名单,前者列出的参数是允许用户设置的,而后者列出的则拒绝用户的设置。

⏹PreResultListener:

实现这个接口的Action可以获得一个在Action执行之后但是结果执行之前的回调。

4.1.3Interceptor相关类

在进行Interceptor编写的时候,同Action的编写一样,Struts2也提供了一些框架支持的类,这些类的使用,可以大大便利我们进行相关的拦截器的开发。

读者可以在实际的应用中根据自己需要使用这些类。

表4-2Interceptor提供的相关类

AbstractLifecycleInterceptor

提供了before(),after()以及result之前的拦截

AliasInterceptor

为类似的Action的类似参数提供别名服务

AroundInterceptor

提供了before(),after()拦截

ChainingInterceptor

将值栈中所有的对象拷贝到当前对象,当前对象实现unchainable()接口的除外

ConversionErrorInterceptor

如果Action执行了ValidationAware()接口,那么将所有转换错误添加到域错误表

DefaultWorkflowInterceptor

在允许ActionChain继续执行之前完成一些基本的操作如校验

ExceptionHolder

对Exception的简单封装,方便使用

ExceptionMappingInterceptor

次拦截器是异常处理的核心

I18nInterceptor

设置ActionRequest国际化的本地信息

LoggingInterceptor

记录Action执行的日志拦截器

MethodFilterInterceptor

可以包含和排除一些方法执行的拦截器

ModelDrivenInterceptor

观察modelDriven的Action执行情况并将其添加到值栈

ParameterFilterInterceptor

参数过滤的拦截器

ParametersInterceptor

将所有参数设置到值栈

PrefixMethodInvocationUtil

一个执行一些固定方法的工具类

PrepareInterceptor

调用实现了preparable接口方法的Action的prepare()方法

TimerInterceptor

记录以秒为单位的时间日志

仔细的分析这些类可以发现,其涉及了Struts2Interceptor的全部。

类的功能涉及了Action执行的方方面面。

几乎在Action执行的任何时刻,都可以找到适合的拦截器截断Action的执行。

使其完成想要的业务逻辑功能。

灵活的运用这些类,那么我们几乎就掌握了Action执行的每一个方面,就能够对Action的执行进行精准的控制。

4.2使用预定义的Interceptor

Struts2预先设计了很多通用性很强的Interceptor供用户使用。

灵活的使用这些拦截器,不仅可以更好的设计更具通用性的业务模块,而且可以增加Web应用的可测试性,使得Web应用的开发和维护变得更为便捷。

4.2.1预定义Interceptor类

拦截器的使用,可以抽取系统的各个方面的可复用代码。

当然在实际的开发中可能有一些模块是经常使用到的,或者说是每一个进行Web应用开发的程序员都要使用到的,Struts2考虑到了这样的情况,并且预先抽取了这些复用性很强的模块。

那么Struts2自带的拦截器的配置在struts-default.xml都有配置,在struts-2.0.9-all.zip压缩包的src目录下。

通过搜索,在路径\struts-2.0.9-all\struts-2.0.9\src\core\src\main\resources下可以找到这个文件,打开之后下面是其关于拦截器配置部分的代码:

struts-default.xml

/*省略其他配置语句*/

<

interceptorname="

alias"

class="

com.opensymphony.xwork2.interceptor.AliasInterceptor"

/>

<

autowiring"

com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"

chain"

com.opensymphony.xwork2.interceptor.ChainingInterceptor"

conversionError"

org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"

cookie"

org.apache.struts2.interceptor.CookieInterceptor"

createSession"

org.apache.struts2.interceptor.CreateSessionInterceptor"

/>

debugging"

org.apache.struts2.interceptor.debugging.DebuggingInterceptor"

externalRef"

com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor"

execAndWait"

org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"

exception"

com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"

fileUpload"

org.apache.struts2.interceptor.FileUploadInterceptor"

i18n"

com.opensymphony.xwork2.interceptor.I18nInterceptor"

logger"

com.opensymphony.xwork2.interceptor.LoggingInterceptor"

modelDriven"

com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"

scopedModelDriven"

com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"

params"

com.opensymphony.xwork2.interceptor.ParametersInterceptor"

prepare"

com.opensymphony.xwork2.interceptor.PrepareInterceptor"

staticParams"

com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"

scope"

org.apache.struts2.interceptor.ScopeInterceptor"

servletConfig"

org.apache.struts2.interceptor.ServletConfigInterceptor"

sessionAutowiring"

org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"

timer"

com.opensymphony.xwork2.interceptor.TimerInterceptor"

token"

org.apache.struts2.interceptor.TokenInterceptor"

tokenSession"

org.apache.struts2.interceptor.TokenSessionStoreInterceptor"

validation"

org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"

workflow"

com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"

store"

org.apache.struts2.interceptor.MessageStoreInterceptor"

checkbox"

org.apache.struts2.interceptor.CheckboxInterceptor"

profiling"

org.apache.struts2.interceptor.ProfilingActivationInterceptor"

roles"

org.apache.struts2.interceptor.RolesInterceptor"

配置文件中指出了每个自带拦截器对应的类以及它们的名字,那么它们具体的功能可以通过阅读类的源代码知道,表4-3中提供一些常用拦截器实现的功能》

表4-3Struts2框架预定义的拦截器

名称

chain

将参数从一个Action复制到另一个Action

component

为Action应用IoC的逻辑处理

conversionError

如果出现类型转换错误,则增加对应字段错误

execAndWait

生成一个独立的线程来执行Action

fileUpload

设置上传文件为Action文件

logger

记录Action执行的起始时间

model-driven

将Action模型压入值栈

params

将HTTP参数应用于Action

prepare

调用Action的prepare()方法

servlet-config

提供对通用HTTP对象的访问

static-params

将Action映射设定的参数应用到Action实例中

timer

控制Action的定时执行

token

防止表单重复提交的基本实现

token-session

防止表单重复提交的高级实现

validation

校验Action中的字段值

workflow

如果发生错误则自动返回INPUT这个返回类型

例如校验拦截器validation这个拦截器就对表单的校验提供了极大的便利,这一点在以后的章节中,将继续讲解。

为了方便初学者的使用,Struts2框架还预定义了若干拦截器栈,所谓的拦截器栈就是将拦截器一个接一个的组装起来,这些装配好的拦截器栈往往有着特殊的用途,让我们大致了解一下这些栈。

看看这些组合在一起的拦截器又将为开发带来什么样的便捷特性。

拦截器栈的相关配置也是在struts-default.xml实现的,下面是这个文件中关于拦截器栈的配置部分。

!

--Basicstack-->

interceptor-stackname="

basicStack"

>

interceptor-refname="

/interceptor-stack>

--Samplevalidationandworkflowstack-->

validationWorkflowStack"

--Samplefileuploadstack-->

fileUploadStack"

--Samplemodel-drivenstack-->

modelDrivenStack"

--Sampleactionchainingstack-->

chainStack"

上面的拦截器栈的配置只是所有拦截器栈的一部分,读者可以自己找到这个文件,找出所有栈的配置。

表4-4中列出部分常用拦截器栈的功能。

表4-4Struts2框架预定义的拦截器栈

defaultStack

基本的拦截器栈

validationWorkflowStack

配置了validation和workflow拦截的栈

fileUploadStack

配置了fileupload的拦截器栈

componentStack

配置了反转控制的拦截器栈

modelDrivenStack

配置了modelDriven的拦截器栈

chainStack

配置了chain的拦截器栈

execAndWaitStack

配置了execAndWait的拦截器栈

completeStack

配置了所有拦截器的拦截器栈

这里面的拦截栈其实是在实际的开发过程中经常要用到的,例如文件上传拦截栈,这

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2