如何解决表单的重复提交问题?目前使用表单提交的方式大致分为两种,一种是原生的表单提交方式,另外一种是ajax提交表单。前一种提交表单后,这次请求地址会记录到浏览器的历史记录中,如果点击浏览器的刷新按钮会出现数据的重复的提交问题。而后者使用ajax提交是不记录到历史记录中的,不过在开发过程中由没有对提交后的页面或者按钮做处理(主要是屏蔽用户再次点击),用户再次点击会出数据重复提交问题。这时可能你会说,我们可以使用数据库的唯一约束呀,如果用hibernate可以在字段属性上添加unique属性(此属性依赖于数据库的唯一约束)。这可能是一种解决方案,他需要依赖于数据库,如果按照常规的分层方式这个操作一直到了持久层才发现,能不能吧层次往外提升一下呢?那就是我们今天要讲到的struts2 的注解token的配置实现。
我们这里要讲的是token的配置,如果您还没有了解如何注解配置struts2 和拦截器的配置,最好先看一下。
首先是token的拦截器栈配置,为了提交性能我们希望对某些方法配置token,当然了你也可以配置个全局的拦截器栈,你得为所有的请求添加token令牌。
在struts.xml中配置tokenSessionStack如下:
<interceptors> <interceptor-stack name="tokenSessionStack"> <interceptor-ref name="tokenSession"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <global-results> <result name=”invalid.token”>xxxx.jsp</result><!—配置重复提交的错误页面--> </global-results>
配置解说<interceptor-stack name="tokenSessionStack"> 这一行中的tokenSessionStack是来自于struts2中的struts-default.xml中的,我们也可以自己在上面定义一行,使用struts默认的token连接器或者自己实现Interceptor接口的拦截器,defaultStack也是来自于struts-default.xml中的一般情况这个要配置你自己业务相关的连接器。
接下来就是如何在action层添加注解?
在action层添加注解有两种方式一种添加在类上,另一种就更明确一些直接添加到方法级别。
添加在类上使用的是@InterceptorRef或者@InterceptorRefs,在方法上面使用@Action在@Action中配置interceptorRefs参数,具体配置看下面:
第一中方式
@InterceptorRe(“tokenSessionStack”) public class UserAction extends ActionSupport {
或者
@InterceptorRefs{@InterceptorRe(“tokenSessionStack”)} public class UserAction extends ActionSupport {
这种方式配置的拦截器会拦截这个action中的所有的方法。
第二中方式在方法中配置:
public class UserAction extends ActionSupport { @Action(value=”save”, interceptorRefs={@InterceptorRe(“tokenSessionStack”)}) public String save(){
这种配置的方法需要注意的是,如果在类上配置了 @Namespace或者 @Namespaces的在前台提交的表单的url和@Action参数value不同的要改成value的值,否则拦截器不起作用。
相关推荐
然后,在Action类中创建一个`java.io.File`或者`org.apache.struts2.dispatcher.multipart.FileItem`类型的字段来接收上传的文件,并使用`@FileUpload`注解标记。最后,处理请求时,框架会自动将上传的文件内容填充...
总结来说,Servlet、Struts和SpringMVC都提供了各自的解决方案来防止表单重复提交,主要方法包括使用Session、令牌机制、重定向和拦截器等。开发者可以根据项目需求选择合适的方式来实现,确保应用的稳定性和数据...
通过以上方法,Struts的Token机制能有效防止Web应用中的重复提交问题,确保数据的准确性和一致性。不过,随着技术的发展,现代框架如Spring Boot等提供了更先进的解决方案,例如CSRF(跨站请求伪造)保护,可以考虑...
本文将深入探讨Struts2的属性驱动和模型驱动的区别,以及如何防止表单的重复提交,并讲解如何在表单中正确显示验证信息。 ### 属性驱动与模型驱动 **属性驱动**(Property Driven)是Struts2中的一种常见做法,它...
当用户尝试重复提交表单时,Struts2会检测到Token已经使用过,因此会抛出异常。你可以捕获这个异常并给出相应的提示,例如: ```java public class MyAction extends ActionSupport { @Override public void ...
在这个SSH笔记中,我们将深入探讨四个核心主题:数据验证、文件上传下载、防止表单重复提交以及自定义拦截器。 首先,我们来谈谈数据验证。在Web应用中,数据验证是必不可少的一环,它确保用户输入的数据符合业务...
Struts2 Token回退刷新是一种防止重复提交的安全机制,尤其在处理并发操作和防止 CSRF(跨站请求伪造)攻击时显得尤为重要。Struts2框架提供了一种令牌验证的方式来确保每个表单提交是唯一的,避免了恶意用户通过...
3. 防止重复提交:可以使用令牌(Token)机制防止用户意外或恶意的重复登录请求。 4. 用户验证:除了用户名和密码外,还可以加入验证码、邮箱验证等方式提高安全性。 综上所述,使用Struts2实现登录功能涉及了...
防止表单重复提交是Web开发中的常见问题,Struts2通过令牌机制来解决这个问题,避免了同一操作被多次执行。 项目练习部分涉及到使用Ajax实现异步请求并返回JSON数据,这通常通过Struts2的JSON插件实现。文件下载则...
- 在开发过程中,利用Struts2的注解来简化Action配置,提高开发效率。 总之,Struts2标签库是Struts2框架的核心组成部分,它通过提供丰富的标签,极大地简化了视图层的开发,提高了代码的可读性和可维护性。熟练...
防止表单重复提交是Web开发中的一个重要功能,为了避免重复提交造成的数据重复或错误,Struts2同样提供拦截器实现这一功能。可以配置token拦截器来为每个请求生成一个令牌(token),并将这个令牌存储在客户端。提交...
在Web表单提交中,防止重复提交是一个常见的需求,而Struts2的Token机制就是为了应对这一问题而设计的。Token机制能确保用户只能提交一次表单,避免了由于网络延迟或误操作导致的重复数据录入。 ### 一、Token机制...
09 Struts_09Token : Structs的令牌机制,避免重复提交问题 10 Struts_10SmartUpload : structs的文件上传 11 Struts_11Internationalize : Structs的国际化和消息文件的使用 12 Struts_12GeneralApply : Structs的...
- 使用注解方式(适用于Struts2较新版本)。 - 在`struts.xml`或Action类中通过配置文件的方式进行校验规则的定义。 **3.2 校验规则示例** - **常见校验规则**:如必填字段验证、长度限制、格式验证等。 #### 四...
15.3 使用令牌防止表单重复提交 313 15.3.1 使用s:token/表单标签 313 15.3.2 令牌拦截器规则的例外 314 15.4 自动显示等待页面 316 15.5 完成CRUD操作的一个动作 317 15.5.1 CRUD 317 15.5.2 拦截器和接口 318 ...
- 讨论了如何使用Struts的令牌机制来避免重复提交的问题。 - **9.4 StrutsAction单态陷阱,请谨慎使用全局变量** - 警告了使用全局变量可能带来的问题,并提供了相应的解决策略。 - **9.5 Struts异常处理** - ...
这部分可能使用Struts2的表单提交和Action处理来完成。 3. **投票展示**:系统需要显示投票主题和选项,以及每个选项的票数。这通常通过Action将数据传递给JSP页面,使用JSTL或其他标签库来渲染。 4. **投票操作**...
这些方法允许开发者在XML配置文件或注解中定义校验规则,降低了直接编码方式带来的问题。 总之,尽管直接编码方式在Struts的早期应用广泛,但随着软件工程实践的进化,更推荐采用声明式校验,以实现更好的代码组织...
5. TokenInterceptor防止表单重复提交。 34 6.使用拦截器实现权限验证 35 7.拦截器中的注解 37 8.使用PreResultListener实现回调 39 六、使用标签 40 1.基础表单标签 40 2.单选按钮和复选框: 41 3.三种方式实现下拉...
### 知识点十三:防止重复提交 #### 13.1 问题背景 在Web应用中,由于网络延迟等原因,用户可能会不小心多次点击提交按钮,导致数据重复提交。 #### 13.2 解决方案 - **Token机制**:每次提交前生成一个唯一的...