如何使用Struts 2防止表单重复提交?

创建页面:

  input.jsp

<s:form action="avoid">
    <s:token>
</s:token>
    <s:textfield name="username" label="Enter your name"></s:textfield>
    <s:textfield name="birthday" label="Enter your birthday"></s:textfield>
    <s:submit value="submit">
</s:submit>
</s:form>

  要使用Struts 2的防止表单重复提交功能,需要在form标签中使用token标签,他会产生一个唯一的标识符,与其他参数一起提交到服务器服务器会根据token标签所产生的标识符判断表单是否为重复提交的表单,这个功能是由Token拦截器完成的。

  error.jsp 

<body>
    do not duplicate submissions form!
</body>

  当表单重复提交,Token拦截器会返回一个"invalid.token"结果,结果将页面转到这个页面,提示用户错误信息。

  output.jsp

<body>
    Your Name :<s:property value="username"/>
    <br />
    Your Birthday : <s:property value="birthday"/>
</body>

   若没有重复提交表单,那么就显示正确的页面。

  测试

  在浏览器中输入:http://localhost:8081/AvoidDuplicateSubmissions/input.jsp,得到如下界面

  连续多次点击"submit"按钮,查看效果

  可以看到,token拦截器的设置生效了,他阻止了表单的重复提交,并给出了错误提示

  这次我们只点击一次提交(请重新输入URL,或后退到输入页面后刷新一下,这是因为token的标示在提交一次后已被修改,不刷新标示符是不可能与服务器存留的标示符一致的)

  可以看到,表单被正确的处理了。

  处理表单重复提交的另一个拦截器是 tokenSession,使用该拦截器与使用token拦截器并没有什么差异只需要,引用该拦截器,其他与token拦截器完全一致

<?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>

    <package name="avoidPackage" extends="struts-default">

        <action name="avoid" class="struts2.action.AvoidAction">

            <interceptor-ref name="tokenSession"></interceptor-ref>

            <interceptor-ref name="defaultStack"></interceptor-ref>

                    <result name="invalid.token">/error.jsp</result>

            <result name="input">/input.jsp</result>

            <result name="success">/output.jsp</result>

        </action>

    </package>

</struts>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值