使用Struts实现防止表单重复提交

 首先知道引起表单重复提交的原因有2个

1: 当用户提交了一个表单,此时,如果跳转时使用dispatcher,则地址栏显示的是处理这个表单的Action的地址,若此时刷新,则会重新发送一次表单数据,即又进行了一次提交,若这个Action是用来处理用户注册的,那么重复提交会再一次向数据库中插入之前已经插入的数据,这显然不是我们想要的。

2. 服务器处理时间久。当用户在表单中填完信息,点击“提交”按钮后,由于服务器反应时间过长没能及时看到响应信息,或者出于其它目的,再次点击“提 交”按钮,从而导致在服务器端接收到两条或多条相同的信息。

 知道了这2个原因,那么 有两种方法,可以防止表单重复提交,一种是用Action的重定向,一种是用Session Token(Session令牌)。但在实际中需要吧这2中情况都考虑才行:

Login.jsp:

    <s:form action="login" theme="simple">
    	username:<s:textfield name="username"></s:textfield><br>
    	password:<s:password name="password"></s:password><br>
    	<s:submit value="submit"></s:submit>
    	<s:token></s:token><!--一定要有这个标签-->
    </s:form>
struts.xml
<span style="white-space:pre">		</span><action name="login" class="loginAction" method="login">
			<interceptor-ref name="tokenStack"></interceptor-ref>
			<result name="invalid.token">/WEB-INF/error/error.jsp</result>
			<!-- 这里用redirect防止在刷新时造成重复提交表单的问题 -->
			<result name="success" type="redirectAction">/manage_empty</result>
			<result name="input" type="redirect">/index.jsp</result>
		</action>
这里还要配置相应的拦截器:

<span style="white-space:pre">		</span><interceptors>
			<interceptor-stack name="tokenStack">
				<interceptor-ref name="token" />
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
		</interceptors>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值