• struts2利用token机制拦截用户重复提交


    一、引起重复提交的原因


     

    1. 服务器处理慢,用户手动再次点击了提交相关的按钮

    2. 提交成功后,用户因为某些原因进行刷新操作

    二、防止重复提交的方法


     

    1. 表单提交方法应该设置为method="post" 这样用户刷新时,浏览器会提示用户是否再次提交(method="get"则不会)

    2. 在表单数据提交后,程序处理应该使用重定向页面,这样刷新也重复提交不了数据了

    3. 使用struts2的token机制来拦截重复提交

      (1) 页面form表单内增加代码:<s:token></s:token><s:token/>
      (2) 在struts.xml配置文件的<package>中配置拦截器

    拦截器配置
     1 <interceptors>
     2     <!-- 声明需要的拦截器,可声明多个 -->
     3     <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>
     4     <interceptor name="..." class="..."/>
     5 
     6     <!-- 自定义拦截器配置 -->
     7     <interceptor-stack name="myStack">
     8         <!-- 将声明的拦截器加入队列,可加入多个 -->
     9         <interceptor-ref name="alias" />
    10         <interceptor-ref name="..."/>
    11         <!--必需引用这个,否则点下一个子ACTION会报错-->
    12         <interceptor-ref name="defaultStack" />
    13     </interceptor-stack>
    14 </interceptors>

      (3) 在struts.xml配置文件的<action>中加入拦截器并配置异常处理页面(这是配置给某一个action)

    拦截器加入action
    1 <!-- 配制拦截后跳转的页面 -->  
    2 <result name="invalid.token">/invalidToken.jsp</result>  
    3 <result name="exception">/error.jsp</result>
    4 
    5 <!-- 配制定义的拦截器 -->
    6 <interceptor-ref name ="myStack"/>
    7 
    8 <!-- 配制异常信息处理,指Action抛出Exception异常时,转入名为exception的结果页面 -->
    9 <exception-mapping result="exception" exception="Exception" />

      

      或可以配置全局action的拦截器,在struts.xml配置文件的<package>中加入全局配置

    全局配置拦截器
     1 <!-- 配置默认的拦截器 -->
     2 <default-interceptor-ref name="myStack"/>
     3 
     4 <global-results>
     5     <!-- 下面定义的结果对所有的Action都有效 -->
     6     <result name="exception">/error.jsp</result>
     7     <result name="invalid.token">/invalidToken.jsp</result>
     8 </global-results>
     9 
    10 <global-exception-mappings>
    11     <!-- 指Action抛出Exception异常时,转入名为exception的结果。 -->
    12     <exception-mapping exception="java.lang.Exception" result="exception" />
    13 </global-exception-mappings>
    ★不是每一次努力都会有收获,但是每一次收获都必须努力,这是一个不公平的不可逆转的命题★
  • 相关阅读:
    ObjectiveC的算术表达式 .
    《ObjectiveC 程序设计(第4版)》图书信息
    实例变量的访问及数据封装
    Android系统中的广播(Broadcast)机制简要介绍和学习计划 .
    Android应用程序的Activity启动过程简要介绍和学习计划 .
    如何在Scala中使用条件表达式 .
    Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划
    Android应用程序组件Content Provider简要介绍和学习计划
    asp.net怎么将网页添加为首页或加入收藏夹中
    学习网址
  • 原文地址:https://www.cnblogs.com/lishaofei/p/2938877.html
Copyright © 2020-2023  润新知