struts2 lesson six struts2中的拦截器,过滤器,自定义拦截器,使用拦截器解决表单重复提交,常用标签的使用

1 拦截器拦截是动作(action),过虑器过虑的是请求(requet)一般映射为/*,过虑所有的请求。

2 拦截器是基于JAVA中反射机制的,而过虑器是基于函数回调

3 过虑器是依赖Servlet容器,而拦截器不依赖于Servlet容器。

4 拦截器可以访问Action上下文,值栈里的对象,而过虑器不能。

5 action的生命周期中,拦截器可以多次调用,而过虑器只能在容器初始化时被调用一次。

 

实现自定义拦截器 (是先进后出的原则)--实现对所有方法的拦截

 第一种方法:action实现一个接口AbstractInterceptor

 第一步定义一个interceptor (net.nw.interceptor.TestInterceptor)

 @Override
    public String intercept(ActionInvocation actionInvocation) throws Exception
    {
        System.out.println("testInterceptor 拦截之前执行------------------");
        String result = actionInvocation.invoke();
        System.out.println("testInterceptor 拦截之后执行------------------");
        return result;
    }

第二步struts.xml

<!-- 定义拦截器--> 要主要配置包中配置如下
  <interceptors>
   <interceptor name="mySelfInterceptor1" class="net.nw.interceptor.TestInterceptor"></interceptor>
   <interceptor-stack name="mydaultStatck">
    <interceptor-ref name="mySelfInterceptor1"></interceptor-ref>
    <interceptor-ref name="defaultStack"></interceptor-ref>  这句一定的加上
   </interceptor-stack>
  </interceptors>

   <package name="userInterceptor" namespace="/userInterceptor" extends="default">
  <action name="login" class="net.nw.action.UserInterceptorAction">
   <interceptor-ref name="mydaultStatck"></interceptor-ref>  <!-- 自定义拦截器 -->
   <result>/success_login.jsp</result>
   <result name="input">/login.jsp</result>
  </action>
 </package>

 

第二种方法,实现对指定方法的拦截

   第一步:实现这个接口  MethodFilterInterceptor 与第一种方法一样只是在struts.xml拦截器上那个加一个参数如下

   <interceptors>
   <interceptor name="mySelfInterceptor1" class="net.nw.interceptor.TestInterceptorMothed"></interceptor>
   <interceptor-stack name="mydefaultStack">
    <interceptor-ref name="mySelfInterceptor1">
     <param name="excludeMethods">add</param><!-- 对add方法不进拦截 --> 也可以写包含那个方法
    </interceptor-ref>
    <interceptor-ref name="defaultStack"></interceptor-ref>
   </interceptor-stack>
  </interceptors>

 

如果要返回结果集成执行一个方法则要实现一个接口PreResultListener

 

利用struts2来解决表单重复提交的问题

第一步:在struts.xml主包中加上一个配置如: <interceptor-ref name="token"></interceptor-ref>   或是:<interceptor-ref name="tokenSession"></interceptor-ref>后者不会跳转到错误页

第二步:在action方法中加一个提交页面:<result name="invalid.token">/toknner.jsp</result>

第三步:在jsp中加入一个唯一Key 如:<s:token/>

 

常用标签的使用
    <s:form      <s:textbox     <s:checkboxlist    <s:checkbox    <s:set     <s:include  静态包含,或是动态包含  <s:date   <s:if    <s:action  <s:iterator

     

 

posted on 2013-05-12 10:30  peter.peng  阅读(195)  评论(0编辑  收藏  举报