您的位置:首页 > 编程语言 > Java开发

struts2_拦截器的使用

2017-07-03 22:47 274 查看
1. 什么是拦截器?

 拦截器是java中动态拦截action调用的对象。它提供了一种机制,能够保证我们在action访问前后访问后进行增强。我们可以通过拦截器进行控制的访问,比如权限控制。拦截器引用的是AOP思想。而AOP的底层实现就是使用了动态代理。

 并且在拦截其中使用的是责任链模式。在责任链模式中,很对对象由每一个对象对其下家的引用而连接起来形成一条链。在责任链每一个链点,都可以继续调用下一个节点,也可以阻止流程继续执行。

2. 拦截器的声明

 struts2在struts-default.xml文件中声明了所有的拦截器。

 而struts2框架默认使用的是defaultStack这个拦截器栈。而在这个拦截器栈中使用了18个拦截器。默认的情况下,struts2会加载这18个拦截器。

3. 自定义拦截器步骤

<1>创建一个类,实现com.opensymphony.xwork2.interceptor.Interceptor接口

 在这个接口中,有三个方法,init方法、destory方法和intercept方法。其中,intercept才是真正实现拦截的方法。

 在intercept方法中如果要向下继续执行,通过其参数ActionInvocation调用它的invoke()方法就可以。

 如果想要对方法的执行进行终止,我们可以通过返回某个视图进行终止。视图就是result标签下的input、login等等5个视图。

<2>声明拦截器

 找到struts-default.xml文件,在这个文件中对其进行声明。

//自己声明一个interceptor可以在struts.xml文件中声明
<interceptors>
<interceptor name="起个别称" class="全类名"/>
</interceptors>


<3>在action中指定使用哪些拦截器。

 在action视图下,配置子标签
<interceptor-ref name="别称"/>


 注意:只要显示声明使用了一个拦截器。那么默认的拦截器就不在加载。

4. 怎样解决只控制action中某些方法的拦截?

1.创建类不在实现Interceptor接口,而是继承其下的一个子类.MethodFilterInterceptor,不用在重写intercept方法,而是重写 doIntercept方法。

2.在struts.xml文件中声明
<interceptors>
<intercept name="" class="">
<param name="includeMethods">add,update,delete(这些是要进行拦截的方法)</param>
<param name="excludeMethods">search(不进行拦截的方法)</param>
</intercept>
</interceptors>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息