struts2中如何防止页面重复提交的问题,在这里我采用struts2自带的token令牌机制,废话补多少,直接上例子:

1.jsp页面。

 <s:form action="register.action" method="post" >
    <div>
     <p>
      <s:token></s:token>
   <span>用户名:</span>
   <span><input type="text" name="userName" /></span>    
     </p>
     <p>
   <span>密码:</span>
   <span><input type="password" name="password" /></span>    
     </p>
     <p>
      <span><input type="submit" value="提交" /></span>
     </p>
    </div>
  </s:form>

2.Register.java

 <s:form action="register.action" method="post" >
    <div>
     <p>
      <s:token></s:token>
   <span>用户名:</span>
   <span><input type="text" name="userName" /></span>    
     </p>
     <p>
   <span>密码:</span>
   <span><input type="password" name="password" /></span>    
     </p>
     <p>
      <span><input type="submit" value="提交" /></span>
     </p>
    </div>
  </s:form>

3.struts配置文件

1).使用Token

<action name="register" class="wsp.struts.action.RegisterAction">
      <!-- 配置异常映射,当RegisterAction抛出Exception异常时,向用户显示error.jsp页面 -->
        <exception-mapping result="error" exception="java.lang.Exception"/>
        <interceptor-ref name="defaultStack"></interceptor-ref>
        <interceptor-ref name="token"></interceptor-ref>

<!--如果重复提交也不跳转到error.jsp页面-->
        <result name="invalid.token">error.jsp</result>
      <result name="reginput">/error.jsp</result>
      <result name="regsuccess">/success.jsp</result>
     </action>

2).使用TokenSession

<action name="register" class="wsp.struts.action.RegisterAction">

          <!-- 配置异常映射,当RegisterAction抛出Exception异常时,向用户显示error.jsp页面 -->
<exception-mapping result="error" exception="java.lang.Exception"/>

           
<interceptor-ref name="defaultStack" />
           
<interceptor-ref name="tokenSession" />
           
<!-- 如果重复提交,不会跳转到error.jsp页面 -->
            
<result name="invalid.token">error.jsp</result>
            <result name="reginput">/error.jsp</result>
            <result name="regsuccess">/success.jsp</result>

       
</action>

4.Token和TokenSession的比较

TokenSession的页面展示会更友好一些

5.Token实现控制表单重复提交的原理

当token拦截到用户的请求后,会判断在表单中生成的token的id也就是数字和英文组成

Struts2中防止页面重复提交_表单重复提交

和保存在session(服务器端)的id是否相等如果相等就是地址提交。那么这个拦截器会将存放在session服务器端的session id值做一下变更

做变更后用户在点击刷新按钮,重复提交。拦截器会检查出来session id和用户提交的token id是不一样的,这个时候拦截器就会将这个请求发送到名字为invalid.token的视图,在这个试图上配置上页面就可以了。