一、什么是表单的重复提交
在不刷新表单页面的情况下,多提点击提交按钮
已经提交成功,回退后再次点击提交
在控制器相应为转发情况下,提交成功后,F5刷新页面(因为此时浏览器url是action的url会重新操作),重定向url就变化了。
二、Struts2解决表单重复提交
使用<s:token></token>标签,该标签会在隐藏域和session中放入一个相同的值。经过Token或者TokenSession拦截器(两个拦截器都不在默认拦截器栈中,需要手工配置)。
若使用Token拦截器:则需要配置一个token.valid的result
若使用TkenValid拦截器:不需要配置特殊result。会相应目标页面,但不会执行后续拦截器。
jsp页面
<s:form action="testToken">
<s:token></s:token>
<s:textfield name="username" label="username"></s:textfield>
<s:submit></s:submit>
</s:form>
struts.xml 在Action中配置token拦截器
<action name="testToken" class="com.hcx.app.TokenAction">
<interceptor-ref name="token" />
<interceptor-ref name="defaultStack" />
<result>/success.jsp</result>
<result name="invalid.token">/token-err.jsp</result>
</action>