日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JSP入門之避免Form表單重復(fù)提交的幾種方案

對于JSP入門的初級的學(xué)習(xí)者表單的提交是一個非常困擾的問題,那么如何避免Form表單多次提交呢?可以從以下的幾個方面入手:

目前創(chuàng)新互聯(lián)公司已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設(shè)計、港南網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

一.對于初學(xué)JSP可以先通過Javascript中設(shè)置

設(shè)置一個變量,只允許表單提交一次?!?

 
 
 
  1.   ﹤script language="javascript"﹥   
  2.    var checkSubmitFlg = false;   
  3.    function checkSubmit() {   
  4.    if (checkSubmitFlg == true) {   
  5.    return false;   
  6.    }   
  7.    checkSubmitFlg = true;   
  8.    return true;   
  9.    }   
  10.    document.ondblclick = function docondblclick() {   
  11.    window.event.returnValue = false;   
  12.    }   
  13.    document.onclick = function doconclick() {   
  14.    if (checkSubmitFlg) {   
  15.    window.event.returnValue = false;   
  16.    }   
  17.    }   
  18.   ﹤/script﹥   
  19.      
  20.   ﹤html:form action="myAction.do" method="post" onsubmit="return checkSubmit();"﹥  

二. 對于JSP人門還要掌握Javascript的另一設(shè)置

將表單提交按鈕或者image置為disable  

 
 
 
  1.    ﹤html:form action="myAction.do" method="post"   
  2.    onsubmit="getElById('submitInput').disabled = true; return true;"﹥      
  3.    ﹤html:image styleId="submitInput" src="images/ok_b.gif" border="0" /﹥    
  4.    ﹤/html:form﹥   

三.在JSP入門階段也要注意善于利用STRUTS的同步令牌機制 
 
  利用同步令牌(Token)機制來解決Web應(yīng)用中重復(fù)Form表單提交的問題,Struts也給出了一個參考實現(xiàn)。

  基本原理: 

  服務(wù)器端在處理到達的請求之前,會將請求中包含的令牌值與保存在當(dāng)前用戶會話中的令牌值進行比較,看是否匹配。在處理完該請求后,且在答復(fù)發(fā)送給客戶端之前,將會產(chǎn)生一個新的令牌,該令牌除傳給客戶端以外,也會將用戶會話中保存的舊的令牌進行替換。這樣如果用戶回退到剛才的提交頁面并再次提交的話,客戶端傳過來的令牌就和服務(wù)器端的令牌不一致,從而有效地防止了重復(fù)提交的發(fā)生?!?

  1.  if (isTokenValid(request, true)) {   
  2.    // your code here   
  3.    return mapping.findForward("success");   
  4.   } else {   
  5.    saveToken(request);   
  6.    return mapping.findForward("submitagain");   
  7.   }   

STRUTS根據(jù)用戶會話ID和當(dāng)前系統(tǒng)時間來生成一個唯一(對于每個會話)令牌的,具體實現(xiàn)可以參考TokenProcessor類中的generateToken()方法。  

1. //驗證事務(wù)控制令牌,﹤html:form ﹥會自動根據(jù)session中標識生成一個隱含input代表令牌,防止兩次提交

2. 在action中: 

 
 
 
  1.    //﹤input type="hidden" name="org.apache.struts.taglib.html.TOKEN"   
  2.    // value="6aa35341f25184fd996c4c918255c3ae"﹥   
  3.    if (!isTokenValid(request))   
  4.  errors.add(ActionErrors.GLOBAL_ERROR,   
  5.    new ActionError("error.transaction.token"));   
  6.    resetToken(request); //刪除session中的令牌  

3. action有這樣的一個方法生成令牌 

 
 
 
  1. protected String generateToken(HttpServletRequest request) {     
  2.    HttpSession session = request.getSession();   
  3.    try {   
  4.    byte id[] = session.getId().getBytes();   
  5.    byte now[] =   
  6.    new Long(System.currentTimeMillis()).toString().getBytes();   
  7.    MessageDigest md = MessageDigest.getInstance("MD5");   
  8.    md.update(id);   
  9.    md.update(now);   
  10.    return (toHex(md.digest()));   
  11.    } catch (IllegalStateException e) {   
  12.    return (null);   
  13.    } catch (NoSuchAlgorithmException e) {   
  14.    return (null);   
  15.    }   
  16.    }  

在更新的時候防止表單按鈕重復(fù)點擊,主要是用Session來做判斷

四.在JSP入門時還要掌握頁面方式

 
 
 
  1. ﹤input type="hidden " name=" ﹤% =com.lims.util.SynchroToken.TOKEN_NAME%﹥ " value =" ﹤%= com.lims.util.SynchroToken.getToken(request)%﹥" ﹥    
  2.  
  3. SynchroToken.java  
  4. package com.lims.util;  
  5. import org.apache.struts.util.*;  
  6. import javax.servlet.http.*;  
  7. import javax.servlet.jsp.*;  
  8. import org.apache.struts.action.*;  
  9. /**  
  10.   * ﹤p﹥Title: SynchroToken ﹤/p﹥  
  11.   * ﹤p﹥Description: ﹤/p﹥  
  12.   * ﹤p﹥Copyright: Copyright (c) 2004﹤/p﹥  
  13.   * ﹤p﹥Company: NetStar﹤/p﹥  
  14.   * @author Jstar  
  15.   * @version 1.0  
  16.   * Created in 2004/04/21  
  17.   */  
  18. public class SynchroToken{  
  19.  public final static java.lang.String TOKEN_NAME = "_token";  
  20.  public static boolean checkToken (HttpServletRequest request){  
  21.    boolean isEqual = false;  
  22.    HttpSession session = request.getSession ();  
  23.    String formToken = request.getParameter (TOKEN_NAME);  
  24.    String sessionToken = (String)session.getAttribute (TOKEN_NAME);  
  25.    System.out.println ("formToken: " + formToken + " sessionToken: " +  
  26.                        sessionToken);  
  27.    if (formToken != null && sessionToken == null){  
  28.      session.setAttribute (TOKEN_NAME, formToken);  
  29.      isEqual = true;  
  30.    }  
  31.    return isEqual;  
  32.  }  
  33.  /**  
  34.   * Insert the method's description here.  
  35.   * Creation date: (4/19/2004 3:23:25 PM)  
  36.   * @return java.lang.String  
  37.   * @param request javax.servlet.http.HttpServletRequest  
  38.   */  
  39.  public static String getToken (HttpServletRequest request){  
  40.    String token = "" + System.currentTimeMillis ();  
  41.    HttpSession session = request.getSession ();  
  42.    if (session != null){  
  43.      session.removeAttribute (TOKEN_NAME);  
  44.    }  
  45.    return token;z  
  46.  }  
  47.  /**  
  48.   * Insert the method's description here.  
  49.   * Creation date: (4/19/2004 3:24:10 PM)  
  50.   * @return java.lang.String  
  51.   */  
  52.  final static java.lang.String getTOKEN_NAME (){  
  53.    return TOKEN_NAME;  
  54.  }  
  55.  public static String message (PageContext pageContext, String key) throws  
  56.      JspException{  
  57.    return RequestUtils.message (pageContext, null, null, key);  
  58.  }  
  59. }   
  60.  

五.也可以通過添加中轉(zhuǎn)頁面的方式

對于JSP入門的角度講,可以通過添加中轉(zhuǎn)頁面的方式,這樣做雖然在視覺上不是很好,頁面間顯繁瑣,但是這是有效地避免Form表單重復(fù)提交的好方式。


文章標題:JSP入門之避免Form表單重復(fù)提交的幾種方案
網(wǎng)站鏈接:http://www.5511xx.com/article/dpeojdh.html