struts2 表单重复提交

首先,如果你打算使用strut2处理表单重复提交的功能,那么你一定要在你的表单中加上<s:token></s:token>,无论你使用的是html的form标签,还是<s:form></s:form>.

先说一下原理,我们都知道session有一个sessionId字符串作为这个session的身份标识,服务器根据这个sessionId来判断是否是同一个session,类似的struts利用<s:token>产生一个唯一的字符串,作为表单的身份标志,同时在服务器端备份了此字符串标志,当表单提交之后,服务器比较两个字符串是否相同,相同则执行action,同时把服务器这边的字符串重置为新的字符串,从而当同一个表单第二次提交时,由于身份标志不同导致不能重复提交,想了解的更多可以参考http://www.cnblogs.com/iyangyuan/archive/2013/05/05/3060488.html

原理讲完了谈下具体的步骤

1.使用<s:token></s:token>标签

2.使用token或者tokenSession

 1 <package name="testtoken"  namespace="/" extends="struts-default">
 2            <!-- 使用token -->
 3            <action name="token_*" class="com.itcast.c_token.TestToken" method="{1}">
 4                <result name="success">/index.jsp</result>
 5                <!-- 使用tokenSession无需指定invalid.token -->
 6                <result name="invalid.token">/message.jsp</result>
 7                
 8                <!-- 重定向处理重复提交:这样在index页面刷新不会重复提交但退回到login页面仍然可以重复提交 -->
 9                <!-- <result name="success" type="redirect">/index.jsp</result> -->
10            
11            <interceptor-ref name="defaultStack"></interceptor-ref>
12            <!-- 解决了问题,但是是在用户提交之后才进行提示 -->
13            <interceptor-ref name="token"></interceptor-ref>
14            </action>
15            
16            
17            <!-- 使用tokenSession的方式 -->
18            <action name="token2_*" class="com.itcast.c_token.TestToken" method="{1}">
19                <result name="success">/index.jsp</result>
20                
21            <interceptor-ref name="defaultStack"></interceptor-ref>
22            <!-- 用户可以多次重复提交,但是只处理一次 -->
23            <interceptor-ref name="tokenSession">
24                <!-- <param name="includeMethods">xx</param> 拦截哪些方法-->
25            </interceptor-ref>
26            </action>
27     </package>

注意事项:

1.不要忘记加上默认的拦截器,因为这两个拦截器并不在缺省的拦截器中

2.使用tokenSession的方式时,不需要指定invalid.token的页面,因为tokenSession和token的不同在于前者无论用户提交多少次,只会处理一次,响应的是提交后的页面,而后者重复提交多次会产生一个name为invalid.token的result,显示一个错误页面,可以通过配置result进行解决

3.使用时要注意拦截哪些方法,否则极有可能导致一些正常的跳转行为出现问题

原文地址:https://www.cnblogs.com/tele-share/p/7487787.html