Struts2拦截器很简单,两个步骤:1、配置 2、编写拦截器类
1、配置,直接在struts.xml中配置。
在package标签下配置interceptors标签,该标签告诉struts2这里面就是写的拦截器,他有两种子节点,interceptor和interceptor-stack,前者是配置单个的拦截器,后者是将多个拦截器组合成一个拦截器链。
先来看看interceptor。一个简单的拦截器配置如下:
<interceptor name="No.1" class="com.lei.interceptor.MyInterceptor1"></interceptor>
name是我们给该拦截器取的名字,class是拦截器的全路径,配置好了以后我们就可以在action标签中引用了:<interceptor-ref name="No.1"></interceptor-ref>,这个是action标签的子节点标签,可以看到我们直接在name里引用了上面配置好了的拦截器名字,这样就算是完成了一个拦截器的配置,如果一个action要用多个拦截器,在引用的时候依次引用就可以了,注意在执行的时候方法前是按顺序拦截,方法后倒序执行。
再来看看interceptor-stack:
<interceptor-stack name="myInterceptor">
<interceptor-ref name="No.1"></interceptor-ref>
<interceptor-ref name="No.2"></interceptor-ref>
<interceptor-ref name="No.3">
<param name="includeMethods">test</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
可以看到我们也通过name给该链取了个名字,然后在该链中引用了多个拦截器,这样他们就组合成了一个拦截器链,action中引用的时候只需要引用拦截器链的名字就可以实现多个拦截器的引用了。细心的人不难发现在interceptor-ref标签下我们还可以拥有一个param标签,该标签的name有两个值includeMethods和excludeMethods,前者表示该拦截器对哪些方法有效,将方法名写到cdata里面就可以了,后者表示对哪些方法无效。
2、编写拦截器类
拦截器有3种实现方式:
1、implements Interceptor,该方法要实现三个方法,其中我们主要关心intercept方法,我们的业务也是在这个方法中完成,在该方法中执行被拦截方法代码是arg0.invoke();
2、extends AbstractInterceptor,该方法只需要实现intercept方法,用法一样
3、extends MethodFilterInterceptor,该方法需要实现doIntercept方法,用法也一样。。。
这些方法都会有个String类型的返回,可以控制Action中的execute方法最后的返回值。
文件上传:
没有太复杂的东西,只需要注意我们在Action中设置一个File类型的变量就能接收到从view那边上传上来的东西~~如果想要获得该文件的名字再设置一个属性,该属性的set方法有要求,要求是File变量的基础上加上FileName构成方法的名字````
<!-- -->