在用struts2的时候我们免不了关注struts2中的拦截器,这是一个很重要的功能.struts2中有很多重要的功能都是构建于它之上的,如国际化,转换器,校验等.
拦截器,在AOP(Aspect-OrientedProgramming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈InterceptorStack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
以上拦截器链在实现我们校园平台的页面跳转和数据保持中有着广泛的应用.
struts2中拦截器的执行原理基本可以用下图来描述.
即当请求到达struts2的servletDispatcher时候,struts2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个list,最后一个个的调用列表中拦截器.
struts2中已经提供了丰富的,功能齐全的拦截器,这些可以引入struts2-all-2.0.1.jar或struts2-core-2.0.1.jar包的struts-default.xml查看关于默认的拦截器与拦截器链的配置.
下面说说如何引用已经配置好的拦截器:
只需要在应用程序struts.xml文件中通过“<includefile="struts-default.xml" />”将struts-default.xml文件包含进来,并继承其中的struts-default包(package),最后在定义Action时,使用“<interceptor-refname="xx" />”引用拦截器或拦截器栈(interceptor stack)。一旦您继承了struts-default包(package),所有Action都会调用拦截器栈 ——defaultStack。当然,在Action配置中加入“<interceptor-ref name="xx"/>”可以覆盖defaultStack。
虽然struts2自带的拦截器功能已经很强大,但是它依旧提供了强大的扩展功能,我们恨意很容易的自定义拦截器.所有的Struts2的拦截器都直接或间接实现接口om.opensymphony.xwork2.interceptor.Interceptor。除此之外,大家也可以继承类com.opensymphony.xwork2.interceptor.AbstractInterceptor。写一个方法继承以上类,然后写一个拦截或者说是判断的方法,最后配置上配置文件即可.
这里不再做具体的实例演示.大家可以参考网上很多网友提供的实例 http://blog.csdn.net/java_cxrs/article/details/5514340