token解决重复提交问题

如果避免重复提交呢?
请知道的详细说下,或者把文章的链接地址写下也好。
应用环境是tomcat,struts1.2,jsp,hibernate
下面是问题,请看到后能给一个解决方案。
1。如果点击一次提交按钮后,服务器开始处理,在后台的代码中使用struts的token机制控制重复提交 。然后服务器处理完毕返回到一个新的列表页面。此时刷新页面,则服务器当作重复提交对待。

2。如果点击一次提交按钮后,服务器开始处理,在后台的代码中使用struts的token机制控制重复提交 。然后服务器处理时发生一个异常,于是返回一个错误页面,告诉用户哪个字段有错误,然后用户点击返回按钮,返回上一个页面,再次提交页面时,用户器则把这次的提交当作了重复提交对待。

3。如果点击一次提交按钮后,服务器开始处理,在后台的代码中使用struts的token机制控制重复提交 ,服务器还没有处理完毕时,用户等不及了,再次单击提交按钮,则struts的token机制不会把此当作重复提交,而是会两样处理这次的提交。

jsp 中插入代码 <s:taken/>


<form name="form" id="creditChangeform" method="post">
	<s:token></s:token>
</form>

 

struts.xml中配置

<action name="addcashpoint" class="com.action.member.MemberCashPointAction" method="addCashPoint">
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="token"/>
            <result name="invalid.token">/WEB-INF/error.jsp</result>
 </action>

 

 

Web应用的无限制特性会给你的应用带来很多问题。这里的问题是客户端控制 着访问Web应用的请求,你可能得到非预期的不同顺序的Web应用请求,或者多次得到相同的请求。当用户不止一次单击Web表单的提交按钮时就会发生这个 问题。因为在每次单击时浏览器都会发送表单的请求信息,或者表单提交成功并显示新页面以后,你单击重新加载按钮也会发生问题。这种情况相当危险,因为表单 提交是要求服务器完成某种操作的信号,并且许多action(比如,在两个银行账户之间转账)不应该执行多次。

WebWork的一个高级特性是默认提供检查重复提交的机制,WebWork可以为每个表单提供一个独一无二 的标记(token)。WebWork通过以下方式支持这个特性。首先WebWork为视图端提供一个<ww:token>JSP标签,然后 在action运行之前使用interceptor检验表单标记(token)是否正确。如图15-4所示,这两个部分 (<ww:token>和interceptor)通过保存在session中的状态一起工作,然后在允许action运行之前检查标记 (token)的名称和值是否正确。请注意,表单标记(token)只是解决问题的一个部分。为了最大可能地减少用户偶尔重新提交表单的机会,你在处理完 提交的表单以后应该使用redirect重新转发结果。

图15-4  标记(token)标签和标记(token)interceptor在一起工作,
用于在action每次执行前验证token

你可能感兴趣的:(应用服务器,Web,jsp,struts,Webwork)