struts interceptor

来源:互联网 发布:家居装饰设计软件 编辑:程序博客网 时间:2024/06/06 07:09

struts interceptor

 编辑
本词条缺少概述名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
中文名
拦截器
外文名
struts interceptor
类    型
程序
特    点
增加了Struts的灵活性
国    家
中国

目录

  1. 1 工作流程
  2. 2 拦截类型

工作流程编辑

Struts从2代开始,将核心功能放在了拦截器(Interceptor)上,这大大增加了Struts的灵活性。
拦截器可以在用户请求Struts的Action时的前或后,进行一些业务处理。拦截器可以是1或N个,看看下面的图大家可能会对Struts2的工作流程有所了解:
Struts2 工作流程图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>

拦截类型编辑

在Struts2中,Interceptor[1]  的拦截类型,分成以下三类:
1. before
before拦截,是指在拦截器中定义的代码,它们存在于invocation.invoke()代码执行之前。这些代码,将依照拦截器定义的顺序,顺序执行。
2. after
after拦截,是指在拦截器中定义的代码,它们存在于invocation.invoke()代码执行之后。这些代码,将一招拦截器定义的顺序,逆序执行。
3. PreResultListener
有的时候,before拦截和after拦截对我们来说是不够的,因为需要在Action执行完之后,但是还没有回到视图层之前,做一些事情。Struts2同样支持这样的拦截,这种拦截方式,是通过在拦截器中注册一个PreResultListener的接口来实现.

0 0
原创粉丝点击