我们在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
- 浏览 6349
- 评论(5)
- 论坛回复 / 浏览 (4 / 16267)
- 查看更多
相关推荐
详解struts2的token机制和cookie来防止表单重复提交 今天在做一个投票系统时要实现防止表单重复提交! 当时就想到了用struts2提供的token机制 struts2的token机制防止表单重复提交: 首先需要在提交的jsp页面(要...
如果Token已经使用过或者过期,就会阻止再次提交,从而避免了用户意外或恶意的重复操作。 6. **实践操作**: 实践中,你可以通过修改已有的Struts1工程来学习这些概念。例如,创建一个新的Action,编写对应的...
在Web开发中,防止重复提交是一项重要的任务,因为这可以避免用户意外或恶意地多次执行相同的操作,导致数据的不一致。在Java Web应用中,Struts2框架提供了一种拦截器(Interceptor)机制来处理这类问题。然而,...
Struts1可以通过两种方式解决:一是使用令牌(Token)机制,用户在提交表单时,服务器会生成一个唯一的令牌并存入session,同时将令牌放入隐藏字段。当表单提交时,服务器检查令牌是否有效,若已使用则拒绝处理。二...
3.4.16 token标签详解 150 3.4.17 updownselect标签详解 151 3.5 struts 2 ajax标签详解 156 3.5.1 a与submit标签详解 157 3.5.2 autocompleter标签详解 158 3.5.3 datetimepicker标签详解 160 3.5.4 div标签...
5. **安全防护**:防止SQL注入、XSS攻击等网络安全问题,对用户输入进行过滤和转义。 ### 关系模型 在数据库设计中,新闻和评论之间通常建立一对多关系。一条新闻可以有多个评论,但一个评论只属于一条特定的新闻...
【SSM框架详解】 SSM框架是Java Web开发中常用的一种组合框架,它由Spring、Struts和MyBatis三个组件组成。这个压缩包“ssm+element+axios后台加前台.zip”很可能是包含了使用SSM框架开发的前后台代码。 1. **...
【Java实现的在线试题系统详解】 Java是一种广泛使用的高级编程语言,尤其在开发企业级应用时,其稳定性和跨平台特性使其成为首选。本系统基于Java技术,采用面向对象的设计方法,构建了一个功能完备的联机在线试题...
12. Struts:ActionForm、Action、Interceptor的概念,以及Struts配置文件的理解。 13. Spring MVC:DispatcherServlet、ModelAndView、Controller、HandlerMapping、HandlerAdapter等核心概念。 14. Hibernate:ORM...