请输入您要查询的百科知识:

 

词条 struts interceptor
释义

Struts2拦截器的工作流程

Struts从2代开始,将核心功能放在了拦截器(Interceptor)上,这大大增加了Struts的灵活性。

拦截器可以在用户请求Struts的Action时的前或后,进行一些业务处理。拦截器可以是1或N个,看看下面的图大家可能会对Struts2的工作流程有所了解:

最初服务器接收到用户客户端的请求,通过ActionContextCleanUp,Other filters……,FilterDispatcher,这些其实也是一些拦截器,到达ActionMapper,ActionMapper是Struts对Action类的Map形式封装,接着,ActionMapper再通过开始的3个拦截器到达ActionProxy,ActionProxy是Action类的一个代理类,此时到达了ActionInvocation类,ActionInvocation类是ActionProxy(代理)类产生的一个Action对象,再经过Interceptor1至Interceptor3,这只是一个演示,实际可能有更多的Interceptor或更少,下面就可以访问Action和Result了,Action下的Result决定了将以什么样的视图或称为(模板)去反馈给用户,下面的拦截器,Interceptor3到Interceptor1其实还是上面的拦截器,只是这时倒序执行了,这是拦截器依然可以对数据进行一些处理,但不同的是,这时已经反馈给用户一个视图了。

这个过程的重点是拦截器的执行流程,可以理解成拦截器的三个阶段:

1、对Action进行预处理。(正序执行)

2、拦截器自身决定该不该执行后续的拦截器(由invoke()方法的返回值决定)。

3、对Action进行后期处理。(倒序执行)

(注:如果大家对Struts框架有一点了解或了解其基本工作原理,可能对上面的解释不屑一顾,但却可能使初学者更加的困惑,所以)说了这么多,还是让我们用代码来解释吧!

用(Java)代码定义一个Struts2的拦截器:

public class MyInterceptor extends AbstractInterceptor{

public String interceptor(ActionInvocation args0) throws Exception{

System.out.println("=========预处理========="); //这里仅仅做一个示意,可以在此处添加任何代码

String result=args0.invoke();//得到invoke()的返回值

System.out.println("=========后续处理========"); //这里仅仅做一个示意,可以在此处添加任何代码

return result;//返回invoke()方法的返回值

}

}

配置一个Struts2的拦截器:

<struts>

<package name="mystruts" extends="struts-default">

<interceptors>

<interceptor name="myInterceptor" class="interceptor的全局限定名"/>

<interceptor-stack name="myInterceptorStack">

<interceptor-ref name="defaultStack"><!--这里要先引用Struts默认的拦截器栈,不然无法实现Struts的基本功能-->

<interceptor-ref name="myInterceptor">

</interceptor-stack>

</interceptors>

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

</package>

</struts>

<interceptor>

Interceptor拦截类型

在Struts2中,Interceptor的拦截类型,分成以下三类:

1. before

before拦截,是指在拦截器中定义的代码,它们存在于invocation.invoke()代码执行之前。这些代码,将依照拦截器定义的顺序,顺序执行。

2. after

after拦截,是指在拦截器中定义的代码,它们存在于invocation.invoke()代码执行之后。这些代码,将一招拦截器定义的顺序,逆序执行。

3. PreResultListener

有的时候,before拦截和after拦截对我们来说是不够的,因为需要在Action执行完之后,但是还没有回到视图层之前,做一些事情。Struts2同样支持这样的拦截,这种拦截方式,是通过在拦截器中注册一个PreResultListener的接口来实现.

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/1 10:36:34