Struts2防止表单重复提交示例

preview
共21个文件
jar:7个
xml:3个
jsp:2个
需积分: 0 8 下载量 22 浏览量 更新于2012-02-28 1 收藏 3.12MB ZIP 举报
Struts2是一个流行的Java Web框架,它为开发者提供了一种构建MVC(Model-View-Controller)架构的应用程序的方式。在Web开发中,表单重复提交是一个常见的问题,可能导致数据不一致或者服务端处理压力增大。为了防止这种情况,开发者通常会采取一些策略,如在Struts2中使用Token机制。 在Struts2中防止表单重复提交的过程主要包括以下几个步骤: 1. **生成Token**:当用户发起表单请求时,服务器会生成一个唯一的Token并将其存储在服务器的会话(Session)中,同时将这个Token作为隐藏字段放入到HTML表单中。 2. **提交表单**:用户填写表单并点击提交按钮,此时表单数据连同隐藏的Token一起发送到服务器。 3. **验证Token**:服务器接收到请求后,首先检查请求中的Token是否与会话中存储的Token一致。如果匹配,说明这是第一次提交,服务器正常处理表单数据并清除会话中的Token;如果不匹配或会话中没有对应的Token,那么就认为是重复提交,服务器可以忽略此次请求或返回错误提示。 4. **清理Token**:成功处理请求后,服务器需要从会话中移除Token,防止同一个Token再次被提交。 在实际应用中,Struts2提供了`Token拦截器`来实现这个功能。开发者需要在struts配置文件中添加Token拦截器栈,并在相应的Action类上进行配置。配置完成后,框架会自动处理Token的生成、验证和清理工作。 以下是一个简单的配置示例: ```xml <!-- 在struts.xml配置文件中 --> <package name="default" extends="struts-default"> <interceptors> <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/> <interceptor-stack name="myStack"> <interceptor-ref name="defaultStack"/> <interceptor-ref name="token"> <!-- 可以设置参数,例如设置失败后跳转的Action --> <param name="includeActionNames">save*</param> <param name="onSessionCreation">true</param> </interceptor-ref> </interceptor-stack> </interceptors> <action name="saveUser" class="com.example.SaveUserAction" method="execute"> <!-- 使用自定义的拦截器栈 --> <interceptor-ref name="myStack"/> <result name="success">/success.jsp</result> <result name="input">/input.jsp</result> </action> </package> ``` 在这个例子中,`SaveUserAction`的`execute`方法会被`myStack`中的拦截器处理,包括Token拦截器。如果Token验证失败,根据配置可能会重定向到`input.jsp`页面,让用户重新填写表单。 总结来说,Struts2通过Token机制有效地解决了表单重复提交的问题,提高了Web应用的健壮性。通过合理的配置和拦截器的使用,开发者可以轻松地集成这一功能,确保每个表单请求只被处理一次。