Struts2基础之十三:Struts2拦截器

来源:互联网 发布:window10装mac系统 编辑:程序博客网 时间:2024/05/16 02:54


    简单学了一下,感觉struts2的拦截器interceptor和servlet的过滤器Filter是一个意思。在数据流中都要经过拦截器或过滤器,经过的同时对数据加工,之后再送往下一个拦截器,直到再没有拦截器了,就算加工完成送往目的地;数据返回时再逆向过一遍所有的拦截器,回到Jsp中。


一:用默认的Exception的拦截器,集中处理异常

<package>标签中配置:

        <!-- 统一异常处理:global-results要在global-exception-mappings前边 -->        <global-results>            <result name="error01">/error.jsp</result>        </global-results>        <global-exception-mappings>            <exception-mapping exception="java.lang.Exception" result="error01"/>        </global-exception-mappings>

因为<package>默认都继承于extends="struts-default" ,"struts-default"在引入的JAR包中,默认已经配了n多拦截器。Exception就是其中一个。

自定义action中,如果重写execute()方法时后边有throws Exception,异常就会被此拦截器拦截



二:调用默认的token拦截器

配置俩action,第一个负责用表单接收参数,第二个主要是在默认拦截器都执行完之后,执行自己配置的拦截器

        <action name="putin" class="com.rt.struts2.actionDemo.putinAction">           <result>/login_intercepter.jsp</result>        </action>                 <action name="intercepter" class="com.rt.struts2.actionDemo.UserAction">           <result>/error.jsp</result>                      <interceptor-ref name="defaultStack" />   <interceptor-ref name="token" /><!-- 在默认拦截器都放过之后,进入自己配置的token拦截器 -->        </action>     </package>


提交表单(需要token标签)

<form action="intercepter/intercepter!add" method="post">              <td><input type="text" name="user"></td>            <td><input type="password" name="password"></td>            <input type="submit" value="提交">            <input type="reset" value="重置">       <s:token/> <!-- 表单中需要token标签 --></form>   



这样如果前台重复提交表单(token值一样), 后台就会判断出来此表单已提交(result invalid.token),不会再执行一次了

除非前台刷新一次(token值会变化),再次提交。