Struts2里面使用interceptor作为拦截器,一般继承AbstractInterceptor或者实现Incerptor接口。
它同样是利用了AOP的思想,它和Spring里面的AOP用法不太一样。
struts2里面是在Action标签里面ref这个interceptor,而Spring里面则是利用Advice,PointCut这些来实现的。
另外,值得注意的是,struts2里面还支持全局的拦截器,即我只需要配置一下,并不需要每个action标签都去引用才能使拦截器生效,而是它自动拦截所有action。
下面列举一些例子:
<package name="helloworld" extends="struts-default"> <interceptors> <interceptor name="myinterceptor" class="com.li.struts2.MyInterceptor" /> </interceptors> <action name="hello" class="com.li.struts2.HelloWorldAction" method="execute"> <interceptor-ref name="params"/> <interceptor-ref name="myinterceptor" /> <result name="success">/HelloWorld.jsp</result> </action> </package>
对于拦截器比较多的情况,还可以用拦截器栈:
<interceptor-stack name="basicStack"> <interceptor-ref name="exception"/> <interceptor-ref name="servlet-config"/> <interceptor-ref name="prepare"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="params"/> <interceptor-ref name="conversionError"/> </interceptor-stack>
在action中引入此值栈:
<action name="hello" class="com.li.struts2.MyAction"> <interceptor-ref name="basicStack"/> <result>view.jsp</result> </action>
----------------------------------------------------------------------------------------------------
上面这个例子,对于页面上有大量表单内容要提交之类,必须引入basicStack,否则拦截器不会让参数的值注入到action中。
-----------------------------------------------------------------------------------------------------
如果想让拦截器对所有action生效,则显式声明一个默认的栈即可:
如下图所示:
<default-interceptor-ref name="myStack"></default-interceptor-ref>
其中,注意到,要将myStack提前声明好。
-----------------------------------------------------------------------------------------------------------------
另外,注意到,如果是拦截ajax请求的话,根据它的request中的header来区分即可。
其中,request还是通过 HttpServletRequest req = ServletActionContext.getRequest(); 来获得。
refurl:http://blog.csdn.net/xwlxw/article/details/10906437 拦截器入门配置
refurl:http://blog.csdn.net/will_awoke/article/details/16940939 ajax请求和普通http请求的区别
refurl:http://www.open-open.com/lib/view/open1342570764135.html 配置默认的拦截器
http://www.blogjava.net/webber/archive/2010/02/10/312531.html struts2所有自带拦截器介绍