jsp页面怎么防止刷新页面又提交表单

向数据库插入数据,刷新页面又提交了重复提交了刚刚的数据,用表单做的,action是本页面,只会jsp,能不能实现,越详细越好!... 向数据库插入数据,刷新页面又提交了重复提交了刚刚的数据,用表单做的,action是本页面,只会jsp,能不能实现,越详细越好! 展开
 我来答
曹晓山11
2015-08-01 · 知道合伙人互联网行家
曹晓山11
知道合伙人互联网行家
采纳数:3033 获赞数:52066
毕业南阳理工学院计算机科学与技术专业,本科学位。互联网行业从业3年工作经验,读过编程类相关书籍多本。

向TA提问 私信TA
展开全部

JSP刷新页面表单重复提交问题解决办法,使用sessionID和时间戳作为标识,关键代码如下:

public class SswpdjAction extends BaseAction{  
       public String execute(){
        /**业务代码**/
        ................
        //设置标识
        this.setSessionToken();
        //转到添加页面
        return "toAdd";
      }
  
      public String reSave(){
        if(this.token != null && this.token.equals(this.getSessionToken())){
          /**设置新标识**/
          this.setSessionToken();
      
          /**业务代码**/
          ..............
          return "toAdd";
        }else{
          printWriter out = null;
          try{
            httpServletResponse.setContentType("text/html;charset=UTF-8");
            out = httpServletResponse.getWriter();
            out.println("<script>alert('刷新提交表单!');</script>");
            out.flush();
        
            }catch(IOException e){
                e.printStackTrace();
            }finally{
                if(out != null){
                    out.close();
                }
            }
        }
        return null;
  }

 public class BaseAction extends ActionSupport{

    /**jsp页面标识**/
    protected String token;

    public String getToken(){
        return token;
    }

    public void setToken(String token){
        this.token = token;
    }

    public String getSessionToken(){
        if(null != httpSession.getAttribute("Token")){
            return httpSession.getAttribute("Token");
        }else{
            return null;
        }
    }

    /**标识生成**/
    public void setSessionToken(){
        String flag = useMd5(httpSession.getId() + System.currentTimeMillis());
        httpSession.setAttribute("Token", flag);
        httpServletRequest.setAttribute("SessionToken", flag);
    }

    /**MD5加密**/
    private String useMd5(String str){
        byte[] bs = str.getBytes();
        String result = null;
        try{
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(bs);
            result = md5.digest().toString();
        }catch(NoSuchAlgorithmException e){
            e.printStackTrace();
        }finally{

        }
        return result;
    }
}

JSP页面设置标识隐藏域:

<form>
  <input type="hidden" name="token" value="${SessionToken}" />
</form>
匿名用户
2013-08-28
展开全部
很久以前在网上找的,你试试吧
用JavaScript解决
在表单中写一个隐藏域<input type="hidden" value="false" name="resubmit "/>
如果第一次提交,就改变 value="true" ;
再次提交时候,可以用JS 在客户端判断hidde值

var resubmit = false;
function checkCFSubmit()
{
if (resubmit )
{
return false;
}
else
{
resubmit = true;
return true;
}

然后在<form>中添加onsubmit="javascript:return checkCFSubmit();"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-08-28
展开全部
添加验证码,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式