现在的位置: 首页 > 综合 > 正文

重复提交(引用他人)

2018年01月23日 ⁄ 综合 ⁄ 共 3162字 ⁄ 字号 评论关闭

刷新页面还会提交数据这样的解决办法就是利用struts的token
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");
}
}

 

 

这里有struts token一个例子下载

http://www.javaeye.com/topic/54945

抱歉!评论已关闭.