利用Token解决重复提交问题
1、定义一个InsertForm类
package com.sunrex.demo01.form;import org.apache.struts.action.ActionForm;@SuppressWarnings("serial")public class InsertForm extends ActionForm {private String username;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}}?
2、定义InsertAction类
package com.sunrex.demo01.action;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;public class InsertAction extends DispatchAction {@Overrideprotected ActionForward unspecified(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {//根据时间戳,保存session的Globals.TRANSACTION_TOKEN_KEY中//还可以更新session的Globals.TRANSACTION_TOKEN_KEYsaveToken(request);return mapping.findForward("init");}public ActionForward insert(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws Exception {//isTokenValid是将页面中出来的参数,与session中的//Globals.TRANSACTION_TOKEN_KEY的值比较, 如果相等,表示不是重复提交。if(isTokenValid(request)) {System.out.println("---不是重复提交---");resetToken(request);//第一次提交时,isTokeValid(request)为true} else {System.out.println("--重复提交---");saveToken(request);}return mapping.findForward("insert");}}?
3、配置Struts-config.xml文件
<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"><struts-config><form-beans><form-bean name="insertForm" type="com.sunrex.demo01.form.InsertForm"/></form-beans><action-mappings><action path="/insert"type="com.sunrex.demo01.action.InsertAction"scope="request"name="insertForm"parameter="method"><forward name="init" path="/WEB-INF/demo01/index.jsp"></forward><forward name="insert" path="/WEB-INF/demo01/insert.jsp"></forward></action></action-mappings></struts-config>
?
4、定义index.jsp页面
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%><%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %> <%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GB18030"><title>Insert title here</title></head><body><html:form action="/insert.do?method=insert"><html:text property="username"></html:text><html:submit value="提交"></html:submit></html:form></body></html>
?
运行时:首先访问到index.jsp页面,其生成的源码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=GB18030"><title>Insert title here</title></head><body><form name="insertForm" method="post" action="/Struts1_002/insert.do?method=insert"><div><input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="b466e3fe1bb04a3a05b7de6cff56b522"></div><input type="text" name="username" value=""><input type="submit" value="提交"></form></body></html>
?