您的位置:首页 > 编程语言 > Java开发

Struts2中防止页面重复提交

2012-08-15 17:52 246 查看
struts2中如何防止页面重复提交的问题,在这里我采用struts2自带的token令牌机制,废话补多少,直接上例子:

1.jsp页面。

<s:form action="register.action" method="post" >

<div>

<p>

<s:token></s:token>

<span>用户名:</span>

<span><input type="text" name="userName" /></span>

</p>

<p>

<span>密码:</span>

<span><input type="password" name="password" /></span>

</p>

<p>

<span><input type="submit" value="提交" /></span>

</p>

</div>

</s:form>

2.Register.java

<s:form action="register.action" method="post" >

<div>

<p>

<s:token></s:token>

<span>用户名:</span>

<span><input type="text" name="userName" /></span>

</p>

<p>

<span>密码:</span>

<span><input type="password" name="password" /></span>

</p>

<p>

<span><input type="submit" value="提交" /></span>

</p>

</div>

</s:form>

3.struts配置文件

1).使用Token

<action name="register" class="wsp.struts.action.RegisterAction">

<!-- 配置异常映射,当RegisterAction抛出Exception异常时,向用户显示error.jsp页面 -->

<exception-mapping result="error" exception="java.lang.Exception"/>

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

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

<!--如果重复提交也不跳转到error.jsp页面-->

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

<result name="reginput">/error.jsp</result>

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

</action>

2).使用TokenSession

<action name="register" class="wsp.struts.action.RegisterAction">

<!-- 配置异常映射,当RegisterAction抛出Exception异常时,向用户显示error.jsp页面 -->

<exception-mapping result="error" exception="java.lang.Exception"/>

<interceptor-ref name="defaultStack" />

<interceptor-ref name="tokenSession" />

<!-- 如果重复提交,不会跳转到error.jsp页面 -->

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

<result name="reginput">/error.jsp</result>

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

</action>

4.Token和TokenSession的比较

TokenSession的页面展示会更友好一些

5.Token实现控制表单重复提交的原理

当token拦截到用户的请求后,会判断在表单中生成的token的id也就是数字和英文组成



和保存在session(服务器端)的id是否相等如果相等就是地址提交。那么这个拦截器会将存放在session服务器端的session id值做一下变更

做变更后用户在点击刷新按钮,重复提交。拦截器会检查出来session id和用户提交的token id是不一样的,这个时候拦截器就会将这个请求发送到名字为invalid.token的视图,在这个试图上配置上页面就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息