我们在bbs上经常会看到注册这个页面.假如用户已经全部填写了符合规范的信息,数据将全部提交到数据中.为了避免用户通过浏览器的后退功能.出现重复提交的可能.struts可以用token来解决重复提交的问题.源码和注释见附件
总结出来,希望对初学者有所帮助.
建一个Insert.jsp页面代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<html:html locale="true">
<head>
<html:base />
<title>insert.jsp</title>
</head>
<body>
<html:form action="insert" method="post">
<bean:message key="label.name"/><html:text property="name" />
<bean:message key="label.phone"/><html:text property="phone"/>
<bean:message key="label.address"/><html:text property="address"/>
<html:submit ><bean:message key="modify.add"/></html:submit>
<html:reset><bean:message key="button.reset"/></html:reset>
</html:form>
<html:errors/>
</body>
</html:html>
建一个InsertAction代码如下:
//Created by MyEclipse Struts
// XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_4.1.1/xslt/JavaClass.xsl
package com.yourcompany.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.yourcompany.bean.ListBean;
import com.yourcompany.struts.form.ModifyForm;
/**
* MyEclipse Struts
* Creation date: 02-20-2007
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class InsertAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModifyForm modifyForm = (ModifyForm) form;
//得到token
String token_request =request.getParameter("org.apache.struts.taglib.html.TOKEN");
//打出来看看是什么东东
System.out.println("token in request is:"+ token_request);
ActionErrors errors = new ActionErrors();
//判断token是否有效,如果为假证明有重复提交,声明一个错误信息,并反馈出来
if(!isTokenValid(request)){
errors.add("insettoken",new ActionError("error.invalid.token"));
saveErrors(request, errors);
saveToken(request);
return (new ActionForward(mapping.getInput()));
}
//当用户首次提交时返!isTokenValid()返回true
else{
resetToken(request);
}
int result=new ListBean().add(modifyForm);
if(result==1){
return mapping.findForward("addlist");
}else{
return mapping.findForward("error");
}
}
}
建一个PrepareInsertAction代码如下:
package com.yourcompany.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* MyEclipse Struts
* Creation date: 02-20-2007
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class PrepareInsertAction extends Action {
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
System.out.print("hello PrepareInsertAction");
//创建一个新的令牌
saveToken(request);
return mapping.findForward("inserttoken");
}
}
详细代码见附件的源码.程序里我已经写了相关的注释.
希望对大家能有所帮助.
分享到:
- 2007-02-20 20:56
- 浏览 6377
- 评论(5)
- 论坛回复 / 浏览 (4 / 16277)
- 查看更多
相关推荐
为了解决这个问题,Struts2引入了Token机制,同时也支持利用Cookie来防止重复提交。 **Struts2的Token机制** 1. **添加Token标签**:在需要防止重复提交的JSP页面中,使用Struts2的`<s:token>`标签。这个标签会在...
### 防止重复提交代码知识点详解 #### 一、问题背景 在Web应用程序中,特别是在使用Java进行后端开发时,重复提交问题是常见的技术挑战之一。例如,在用户提交表单后,由于网络延迟或其他原因导致用户多次点击提交...
在Java Web应用开发中,Struts2框架提供了一种非常实用的方法来解决这个问题——通过使用`tokenSession`拦截器。相比于传统的`token`拦截器,`tokenSession`提供了更加灵活和友好的用户体验。本文将深入探讨`token...
24. **防止重复提交**:可以使用s:token标签防止表单重复提交的问题。 25. **Struts2整合Spring和Hibernate**:Struts2与Spring的整合可以实现依赖注入,与Hibernate的整合则方便进行持久化操作。 以上就是Struts2...
在Web应用程序开发过程中,为了防止重复提交表单或CSRF(跨站请求伪造)等安全问题,Struts2框架提供了一种名为“令牌”的机制。该机制通过在用户会话中存储一个随机生成的唯一值,并在表单提交时验证该值是否有效来...
- **内置拦截器**:Struts2提供了一系列内置拦截器,如`params`(参数填充)、`token`(防止重复提交)、`servletConfig`(获取Servlet配置信息)等。 - **自定义拦截器**:可以通过实现`Interceptor`接口或继承`...
如果Token已经使用过或者过期,就会阻止再次提交,从而避免了用户意外或恶意的重复操作。 6. **实践操作**: 实践中,你可以通过修改已有的Struts1工程来学习这些概念。例如,创建一个新的Action,编写对应的...
### Struts2面试题知识点详解 #### 一、Struts2的工作流程 1. **请求接收**:所有的请求首先会被`StrutsPrepareAndExecuteFilter`接收。 2. **请求识别**:`StrutsPrepareAndExecuteFilter`判断这个请求是否属于...
在Web开发中,防止重复提交是一项重要的任务,因为这可以避免用户意外或恶意地多次执行相同的操作,导致数据的不一致。在Java Web应用中,Struts2框架提供了一种拦截器(Interceptor)机制来处理这类问题。然而,...
Struts1可以通过两种方式解决:一是使用令牌(Token)机制,用户在提交表单时,服务器会生成一个唯一的令牌并存入session,同时将令牌放入隐藏字段。当表单提交时,服务器检查令牌是否有效,若已使用则拒绝处理。二...
### Struts2标签库知识点详解 #### 一、实验背景及目标 本实验报告主要针对Struts2框架中的标签库进行深入研究与实践。通过实验,学员能够掌握Struts2中几个常用标签(如`<s:radio>`、`<s:select>`、`<s:token>`)...
本课件主要涵盖了Struts框架中的几个关键概念和技术,包括Validator框架、国际化支持、不同类型的DispatcherAction、动态ActionForm以及如何处理表单的重复提交等问题。以下是针对这些知识点的详细解释。 #### 二、...
- **Token机制**:每次提交前生成一个唯一的Token,并将其存入session,在提交时进行验证。 - **服务器端控制**:记录每个请求的状态,对于已经处理过的请求不再处理。 ### 知识点十四:整合jfreechart #### 14.1 ...
利用Token解决重复提交 Struts提供了一种机制来防止表单重复提交,即通过生成唯一的Token并在每次表单提交时检查该Token的有效性。 ##### 2.Struts应用的国际化 Struts支持通过配置资源文件实现国际化,使应用...
Struts2.0引入了一系列新的表单标签,如、、<s:token>等,它们提供了更丰富和灵活的表单元素,支持客户端验证和服务器端验证的无缝集成。 十三、Struts2.0与AJAX的融合 AJAX技术的兴起,为Web应用带来了全新的交互...
- **防止表单重复提交**:通过使用令牌(token)机制来防止用户的重复提交操作。 - **Struts 验证框架**:Struts 提供了一个强大的验证框架,可以在客户端和服务器端对用户输入进行验证,确保数据的有效性和安全性...
### Struts2 S 标签库详解 #### 引言 Struts2 是一款流行的 Java Web 开发框架,它提供了一系列强大的功能来帮助开发者构建健壮的 Web 应用程序。其中,Struts2 的标签库是其核心特性之一,为开发者提供了丰富的 ...
- **用途**:防止表单重复提交,通过在每次提交时生成一个唯一的令牌,并在服务器端进行验证。 24. **Token Session (会话令牌)** - **说明**:与Token拦截器类似,但使用`HttpSession`存储令牌,适用于需要长...
- **1.1 解决重复提交 Token** - **作用**:为每个表单生成一个唯一的Token值,并在提交时检查这个值是否已被使用过。 - **示例代码**: ```jsp <%@ taglib uri="http://struts.apache.org/tags-...