struts2入门之拦截器
1、拦截器的执行时间:在action对象创建之后,在具体的方法执行之前;
2、拦截器底层实现原理:用到AOP思想和责任链模式;AOP:面向切面编程,通俗的讲就是当某个功能模块要增加某一项功能时,尽可能不去修改源代码而是通过其他的方式来达到相同的效果,比如通过配置文件等方式;责任链模式和过滤链模式有点相似,过滤链模式是指比如,一个请求由多个过滤器进行过滤,每个过滤器进行放行之后才能到下一个过滤器,最后实现目的;但是责任链模式,比如要执行多个操作,有添加,修改,删除三个操作,首先执行添加操作,添加操作完成后,做类似于放行的操作;然后执行修改操作,修改完成后又做个类似于放行的操作;最后执行删除操作。
3、拦截器和过滤器的区别:
过滤器原则上是可以过滤掉任何内容的,比如html、jsp、图片等,它是在服务器创建的时候就有了;
拦截器只能拦截action中的方法,或者说只能拦截action。
4、自定义拦截器:(show my codes)另外说一下步骤:创建一个类继承MethodFilterInterceptor,然后实现里面未实现的方法,如下:
1 import com.opensymphony.xwork2.ActionInvocation; 2 import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; 3 4 public class MyIncepter extends MethodFilterInterceptor { 5 6 @Override 7 protected String doIntercept(ActionInvocation arg0) throws Exception { 8 // 这里面进行逻辑判断 9 // 如果可以通过,就执行 10 // arg0.invoke(); 11 // 如果不能通过,就返回你将要跳转的页面 12 return null; 13 } 14 15 }
最后配置action和这个自定义拦截器的联系如下:
1 <package name="demo1" extends="struts-default" namespace="/"> 2 <!-- 自定义拦截器 --> 3 <interceptors> 4 <interceptor name="interceptor1" class="com.cczhao.struts.MyInceptor"></interceptor> 5 </interceptors> 6 <action> 7 <!-- 调用自己的拦截器 --> 8 <interceptor-ref name="interceptor1"> 9 <!-- 自定义该action中的某些方法不拦截 --> 10 <param name="excludeMethods">login,add,update</param> 11 </interceptor-ref> 12 <!-- 倘若你在该action中用到了struts2的默认拦截器了,自己又定义了拦截器,这里需要引用一下struts2的默认拦截器,否则,只会调用自己的拦截器,而不调用struts2默认拦截器--> 13 <interceptor-ref name="defaultStack"></interceptor-ref> 14 <result name="success">/hello.jsp</result> 15 </action> 16 </package>
注意上面配置自定义拦截器和action的关系的时候,着重看我的注释。。。