struts2 防止表单的重复提交
防止表单重复提交(拦截器)
1、回顾之前的解决办法:
2、Struts2中的解决办法:
2.1、使用重定向
<result type="redirect">/success.jsp</result>
遗留的问题:防不住后退,再提交。
2.2、使用<s:token/>生成令牌配合token拦截器
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s" %> 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 4 <html> 5 <head> 6 <title>struts2中的表单重复提交</title> 7 </head> 8 <body> 9 <%--使用一个struts2的内置标签 s:token --%> 10 <s:form action="login1"> 11 <s:token></s:token> 12 <s:textfield name="name" label="用户名" /> 13 <s:submit value="提交"/> 14 </s:form> 15 </body> 16 </html>
struts.xml 中配置 token拦截器
1 <action name="login" class="com.itheima.web.action.Demo1Action" method="login"> 2 <!-- 由于默认的拦截器栈中没有令牌的拦截器,所以需要把默认的拦截器栈配上 --> 3 <interceptor-ref name="defaultStack"></interceptor-ref> 4 <!-- 使用struts2提供的一个令牌的拦截器:token --> 5 <interceptor-ref name="token"></interceptor-ref> 6 <!--<result>/success.jsp</result> 请求转发不行 --> 7 <result type="redirect">/success.jsp</result> 8 <result name="invalid.token">/message.jsp</result> 9 </action>
点击后退的时候,会提示
配置结果视图
遗留的问题:此种解决方式,是产生了错误之后再告知用户,你错了。
2.3、使用<s:token/>生成令牌配合tokensession拦截器
1 <action name="login1" class="com.itheima.web.action.Demo2Action" method="login"> 2 <!-- 由于默认的拦截器栈中没有tokenSession的拦截器,所以需要把默认的拦截器栈配上 --> 3 <interceptor-ref name="defaultStack"></interceptor-ref> 4 <!-- 使用struts2提供的一个tokenSession的拦截器:token --> 5 <interceptor-ref name="tokenSession"></interceptor-ref> 6 <result type="redirect">/success.jsp</result> 7 </action>