浏览 3779 次
锁定老帖子 主题:防止表单重复提交
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-03
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title> <s:if test="null == web"> 新增页面 </s:if> <s:else> 更新页面 </s:else> </title> <s:head theme="xhtml"/> </head> <body> <center> <h3> <s:if test="null == web"> 新增页面 </s:if> <s:else> 更新页面 </s:else> </h3> <s:form method="post" action="add"> <s:hidden name="web.id" label="ID号" theme="xhtml"/><br> <s:textfield name="web.web" label="别名" theme="xhtml"/><br> <s:textfield name="web.webname" label="对应的网页" theme="xhtml"/><br> <tr><td></td><td align="center"><input name="cancle" type="button" onclick="javascript:history.go(-1)" value="返回" /> <input type="submit" name="submit" value="提交" /></td></tr> <s:token /> </s:form> </center> </body> </html> 只要在JSP页面中表单中放<s:token />这样的标签就行了。 struts.xml配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.i18n.encoding" value="utf-8" /> <package name="test" extends="struts-default" > <interceptors> <interceptor-stack name="to"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="token"></interceptor-ref> </interceptor-stack> </interceptors> <action name="add" class="action.TestAction" method="add"> <result name="success">/success.jsp</result> <result name="error">error.jsp</result> <result name="invalid.token">/tokenerror.jsp</result> <interceptor-ref name="to"></interceptor-ref> </action> </package> </struts> 这样就可以实现防止表单重新提交 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-10-06
在服务器集群的场景下,这个方式就报废了。
还是要搭建Session服务器,才是正道。 |
|
返回顶楼 | |
发表时间:2008-10-06
taopian 写道 在服务器集群的场景下,这个方式就报废了。 还是要搭建Session服务器,才是正道。 是吗? 还没有搞过集群的场景,Session服务器的?未搞过哦。可否介绍一下。 |
|
返回顶楼 | |
发表时间:2008-10-06
这个东西跟Session有什么关系?
|
|
返回顶楼 | |
发表时间:2008-10-07
taopian 写道 这个东西跟Session有什么关系? <s:token/>的原理就是在session总保存一个字符串。 仔细观察包含<s:token/>的页面会发现这些东西 <input type="hidden" name="struts.token.name" value="struts.token"/> <input type="hidden" name="struts.token" value="BXPNNDG6BB11ZXHPI4E106CZ5K7VNMHR"/> 当页面提交的时候时候他会判断这个值是不是和session的一样,如果是一样的哪么OK,没问题你可以提交,并且会修改session里的值。哪么如果你刷新,那你页面上的值和session的值就不一样的,struts就不允许你提交数据了。就是这个原理。 taopian 写道 在服务器集群的场景下,这个方式就报废了。 还是要搭建Session服务器,才是正道。 为什么集群环境就不可能呢?集群环境保证session同步不止session服务器一个方法吧?采用session复制技术也可以保证session里的值在各个服务器都是相同的,这样做不可以吗? 对session服务器了解甚少,有什么问题大家指正。 |
|
返回顶楼 | |
发表时间:2008-10-07
token在现在多标签浏览的情况下已经不适用了
如果我先后开好几个一样的表单提交窗口, 再回到第一个表单,填写,提交,很无奈的会失败,而且一般用户对于失败的原因很费解 |
|
返回顶楼 | |
发表时间:2008-10-08
taopian 写道 在服务器集群的场景下,这个方式就报废了。
还是要搭建Session服务器,才是正道。 F5.。 |
|
返回顶楼 | |
发表时间:2008-10-09
集群的重要工作就是, 保证几台服务器的SESSION一致.
以上的程序我想应该不会有问题的. --------------> 理论上的解释, 有用过的, 请发表意见! |
|
返回顶楼 | |