struts2 防止表单的重复提交

时间:2023-03-08 20:31:37
struts2    防止表单的重复提交

防止表单重复提交(拦截器)

1、回顾之前的解决办法:

struts2    防止表单的重复提交

2、Struts2中的解决办法:

2.1、使用重定向

<result type="redirect">/success.jsp</result>

遗留的问题:防不住后退,再提交。

2.2、使用<s:token/>生成令牌配合token拦截器

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>struts2中的表单重复提交</title>
</head>
<body>
<%--使用一个struts2的内置标签 s:token --%>
<s:form action="login1">
<s:token></s:token>
<s:textfield name="name" label="用户名" />
<s:submit value="提交"/>
</s:form>
</body>
</html>

.jsp

struts.xml 中配置 token拦截器

     <action name="login" class="com.itheima.web.action.Demo1Action" method="login">
<!-- 由于默认的拦截器栈中没有令牌的拦截器,所以需要把默认的拦截器栈配上 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 使用struts2提供的一个令牌的拦截器:token -->
<interceptor-ref name="token"></interceptor-ref>
<!--<result>/success.jsp</result> 请求转发不行 -->
<result type="redirect">/success.jsp</result>
<result name="invalid.token">/message.jsp</result>
</action>

struts.xml

点击后退的时候,会提示

struts2    防止表单的重复提交

配置结果视图

遗留的问题:此种解决方式,是产生了错误之后再告知用户,你错了。

2.3、使用<s:token/>生成令牌配合tokensession拦截器

         <action name="login1" class="com.itheima.web.action.Demo2Action" method="login">
<!-- 由于默认的拦截器栈中没有tokenSession的拦截器,所以需要把默认的拦截器栈配上 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 使用struts2提供的一个tokenSession的拦截器:token -->
<interceptor-ref name="tokenSession"></interceptor-ref>
<result type="redirect">/success.jsp</result>
</action>

struts.xml