使用session解决
在session中存储验证 当验证码验证过后 将session中的验证码删除
Struts表单提交解决方案
使用重定向
在action配置中 result type设置为redirect
<result type="redirect">/success.jsp</result>
使用<s:token/>生成令牌配合token拦截器
这种方式差生错误后才会告知用户 一般不用
<action name="register" class="org.ccit.com.web.action.UserAction" >
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- token不属于defaultStack 需要额外添加-->
<interceptor-ref name="token"></interceptor-ref>
<!-- 配置表单重复提交时的结果视图-->
<result name="invalid.token">/resubmit.jsp</result>
<result name="input">/register.jsp</result>
<!-- <result name="success">/login.jsp</result>-->
</action>
<s:form action="register" namespace="/user" >
<s:token></s:token>
<s:textfield name="username" label="用户名" requiredLabel="true" requiredPosition="left"></s:textfield><br>
<s:password name="password" label="密码" requiredLabel="true" showPassword="true"></s:password><br>
<s:submit value="注册" ></s:submit>
</s:form>
使用<s:token/>生成令牌配合tokensession拦截器
tokensession拦截器会使表单只被处理一次 重复提交不会被处理
<action name="register" class="org.ccit.com.web.action.UserAction" >
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- token不属于defaultStack 需要额外添加-->
<interceptor-ref name="tokenSession"></interceptor-ref>
<result name="input">/register.jsp</result>
<!-- <result name="success">/login.jsp</result>-->
</action>
<s:form action="register" namespace="/user" >
<s:token></s:token>
<s:textfield name="username" label="用户名" requiredLabel="true" requiredPosition="left"></s:textfield><br>
<s:password name="password" label="密码" requiredLabel="true" showPassword="true"></s:password><br>
<s:submit value="注册" ></s:submit>
</s:form>