首先说说重复提交是怎么产生的,一般情况下有两种方式:
1,页面提交后再次刷新页面。
2,在提交的时候多次点击提交按钮。
strut1.x中解决防止提交1的方法是通过重定向解决,但是方式2在网速很慢或者是用户快速的点击提交按钮时,还是能够重复提交数据。
struts2中为方式2提供了解决方案(方式1用重定向是也可以防止用户刷新页面而引起的重复提交),struts2通过使用令牌(token)解决此类的问题。
要使用token,首先在页面上在你要提交的表单中加上<s:token/>,次标签解析后会生成两个隐藏域:
<input type ="hidden" name ="struts.token.name" value ="struts.token" />
<input type ="hidden" name ="struts.token" value ="LVYMI4CX9YBDS9A0AAF9UAJL8UDX1N05 " />
在该标签执行完成后会生成一个随机的值(红色部分),该值同时会加入到session中。
其次,就是在你个struts.xml中加入token拦截器。
<package name="token-struts" extends="struts-default">
<interceptors>
<interceptor name="token"/>
<interceptor-stack name="token-default">
<interceptor-ref name=" token "/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="token-default"/>
</package>
如果是用注解的话,那么的action要这么定义:@ParentPackage("token-struts")。
如果不是注解,可以将上面的拦截器栈加入到你的actin定义中。
这样就完成了整个防止重复提交的任务了。
如果你想了解此拦截器是这么工作的,你可以打开源码看看,其中TokenHelper.validToken()最是关键,就是通过这个帮助类完成对令牌的判断。
上述是可以解决重复提交的问题,但是随之而来的又是一个麻烦。
拦截器顾名思义就是用来对请求进行拦截的,一个请求在执行前就被拦截了,默认情况下拦截器会拦截被配置下所有的请求。但是很多情况下该配置下的其他请求不需要这个拦截,比如删除,更新操作。就完成不需要这个拦截器去拦截。拦截器又不能区分不同的请求而做出不同的操作。
这种情况就有两种解决方案:
第一,不用token拦截器,只在你需要防止重复提交的action处理方法中加入 TokenHelper.validToken()这个判断,如果为返回true就执行,否则跳过。
第二,用token拦截器,但是重写此拦截器TokenInterceptor。在重写的拦截器中判断tokenNames,如果值为空则不做任何操作,如果有值则做拦截。
分享到:
相关推荐
总的来说,Struts2的`token`拦截器是防止重复提交的有效解决方案,通过结合合理的拦截器配置和跳转策略,可以确保应用程序的稳定性和数据一致性。在实际开发中,还需要考虑其他因素,如异常处理、用户体验优化等,以...
### Struts2防止重复提交的解决方案 #### 一、引言 在Web应用程序开发中,一个常见的问题是如何有效地防止表单的重复提交。这不仅能够提高用户体验,还能增强系统的安全性。Struts2作为一款广泛使用的Java Web应用...
Struts2框架提供了一种解决方案,即使用Token机制来防止表单的重复提交。以下是对这个主题的详细说明: 1. **表单重复提交问题**:当用户在提交表单时,由于网络延迟或用户误操作,可能会导致同一个表单被多次提交...
Struts2的解决方案之一是利用Action的Result类型,尤其是`redirect`和`redirectAction`。这两种结果类型都可以在处理完表单后使浏览器跳转到新的URL,从而避免再次提交。 1. **redirect** 结果类型: 这种结果类型...
"防止表单重复提交 token"是Struts2提供的一种解决方案,通过在请求中加入一个唯一的token来确保请求的唯一性和一致性。 首先,我们来看如何实现这个机制。在Struts2中,我们可以使用拦截器(Interceptor)来实现...
Struts2提供了一种基于Token的防止重复提交策略。在表单提交时,服务器会生成一个唯一的Token并将其存储在Session中,同时将Token放入到表单中。当用户提交表单时,服务器会检查提交的Token是否与Session中的Token...
Struts框架是Java Web开发中常用的MVC框架之一,它为开发者提供了强大的控制层解决方案。然而,Struts框架在处理HTTP请求时,如果没有适当的防护措施,可能会遇到重复提交的问题,这可能导致数据不一致或者服务器...
Struts框架作为Java Web应用开发的经典框架之一,提供了一套成熟的解决方案来处理这个问题——即所谓的令牌(token)机制。 #### 什么是令牌机制? 令牌机制是Struts框架用于防止表单重复提交的一种手段。其基本...
2. **sessionToken机制**:Struts2框架提供了一个拦截器`TokenInterceptor`,它可以自动管理基于Session的令牌,防止重复提交。 3. **.strutsPrepareAndExecute interceptor**:这个拦截器可以处理表单的唯一性,...
通过上述步骤,我们可以在不改变原有Action代码的情况下,利用Struts2的拦截器机制防止重复提交。这个压缩包中的Eclipse项目可能包含了一个示例实现,你可以通过阅读代码,更深入地理解这个解决方案的工作原理和应用...
Struts框架是一个经典的Java Web开发框架,用于构建MVC(模型-视图-控制器...在实际开发中,除了Struts的令牌机制,还可以结合前端的解决方案,如禁用提交按钮、使用AJAX异步提交等,来进一步增强防止重复提交的效果。
3. 可能会有一些常见问题的解决方案,如文件大小限制、文件类型检查等。 通过观看视频,开发者可以更好地理解和实践Struts框架在处理重复提交和文件上传时的具体步骤,从而提高开发效率和应用的健壮性。
本篇文章将深入探讨如何防止表单重复提交,主要关注于基于Struts2框架的解决方案。 首先,理解表单重复提交的原因。用户在点击提交按钮后,如果网络延迟或用户误操作导致页面刷新或再次点击提交,就可能发生重复...
1. **配置Action**: 在Struts配置文件(如struts.xml)中,为需要防止重复提交的Action添加`token`拦截器。 ```xml <result name="success">/success.jsp <result name="input">/input.jsp ``` 2. **创建...
总的来说,Struts 1.2的Token机制提供了一种简单但有效的防止重复提交的解决方案。通过理解和实践这一机制,开发者可以更好地保护Web应用程序的数据一致性。同时,深入研究源码有助于加深对Struts工作原理的理解,...
### 二、Struts框架实现表单提交及防止重复提交 #### Struts框架简介 Struts是一个基于MVC(Model-View-Controller)设计模式的开源Java Web应用程序框架。它可以帮助开发者构建可扩展的企业级应用。 #### 使用...
// 清除令牌,防止重复提交 return "success"; } else { addFieldError("token", "Invalid or duplicate submission"); return INPUT; } } } ``` ### 3. 注意事项 - 令牌需要在每次表单加载时生成并放入...