struts2 拦截器进一步使用

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所有自带拦截器介绍

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自wandejun1012.iteye.com/blog/2185308