zoukankan      html  css  js  c++  java
  • 1.struts 防止表单重复提交 2. 拦截器

    1. 使用struts 防止表单提交 时, form 表单必须使用struts标签库编写,如<s:form/> 等,而不是html标签  

    2. 拦截器是struts2的核心。  interceptor接口

    package com.interceptor;
    
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    
    /**
     * 1. 实现interceptor接口
     * 2. struts.xml 配置 interceptors 拦截器
     * 3. 在struts.xml action中 配置 interceptor-ref 使用
    * 4. set 方法会在init 方法前执行 *
    @author Administrator * */ public class Myinterceptor implements Interceptor{    private String test;
      //getter 和setter 方法
    @Override public void destroy() { } 
    @Override
    public void init() { } // test 的初始化会在 init 前
    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
      System.out.println("before");
      return arg0.invoke();
      System.out.println("after");
    }
    }
    <interceptors>
                <interceptor name="theInteceptor" class="com.interceptor.Myinterceptor">
              <param name="test">12</param>
            </
    interceptor>
            
            <interceptor name="theInteceptor2" class="com.interceptor.StrutsInterceptor">
              <param name="test">12</param>
            </interceptor>
    
    
    
            </interceptors>
            
            
            
            <global-exception-mappings>
                <exception-mapping result="globalerror" exception="Exception"></exception-mapping>
            </global-exception-mappings>
            <global-results>
                <result name="globalerror">/index.jsp</result>
            </global-results>
            
            <action name="login" class="com.login.Login">
                <result name="success">/index.jsp</result>
                <!-- action 错误 调整 -->
                <exception-mapping result="error" exception="com.exception.Myexception"></exception-mapping><!-- 可以自定义错误类型 -->
                <result name="error">/index.jsp</result>
                
                <interceptor-ref name="theInteceptor"></interceptor-ref>  <!--如果指定了自定义拦截器,defaultstack 就不起作用了。
              需要将defaultstack拦截器添加到自定义拦截器后,否则struts2的一些功能可能不起作用-->
    <interceptor-ref name="theInteceptor2"></> </action>
          <!--调用该action 拦截器的执行 输出 顺序是 before ,inteceptor before, inteceptor after,after ... 拦截器默认拦截的是action的execute 方法
            那么如何拦截自定义方法呢??需要用到方法拦截器MethodFilterInterceptor: includeMethods,excludeMethods 指定方法名,如果某个方法在两个里面都
            有的话,includeMethods 级别更高,所以会拦截。 实现MethodFilterInterceptor ,重写doInterceptor 方法
           -->
    package com.interceptor;
    
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
    
    /**
     * struts 拦截器 ,,通常是实现 AbstractInterceptor, 而不是直接实现Interceptor 接口
     * @author Administrator
     *
     */
    
    public class StrutInterceptor extends AbstractInterceptor{
    
        @Override
        public String intercept(ActionInvocation arg0) throws Exception {
            System.out.println("interceptor before");
            String result=arg0.invoke();//invoke()指 拦截器完成后继续执
            System.out.println("interceptor after");
            return result;
        }
    
    }
  • 相关阅读:
    airpods2连接win10的方法步骤
    JSON学习笔记
    TCP-IP总线与CAN总线优缺点对比
    svn切换目录
    SQLite学习笔记
    python-opencv安装及入门
    python数据可视化
    python-opencv视觉巡线
    python-opencv进阶应用
    QT窗口和部件
  • 原文地址:https://www.cnblogs.com/zhangchenglzhao/p/3710447.html
Copyright © 2011-2022 走看看