ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>麻豆精品99,国产精品视频网,精品视频在线看http://www.aygfsteel.com/J2EEHOME/category/35833.htmlOne Target,One Dreamzh-cnFri, 07 Nov 2008 16:09:50 GMTFri, 07 Nov 2008 16:09:50 GMT60JSP、Struts避免Form重复提交的几¿Uæ–¹æ¡?/title><link>http://www.aygfsteel.com/J2EEHOME/archive/2008/11/07/239345.html</link><dc:creator>J2EE Home工作å®?/dc:creator><author>J2EE Home工作å®?/author><pubDate>Fri, 07 Nov 2008 15:38:00 GMT</pubDate><guid>http://www.aygfsteel.com/J2EEHOME/archive/2008/11/07/239345.html</guid><wfw:comment>http://www.aygfsteel.com/J2EEHOME/comments/239345.html</wfw:comment><comments>http://www.aygfsteel.com/J2EEHOME/archive/2008/11/07/239345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/J2EEHOME/comments/commentRss/239345.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/J2EEHOME/services/trackbacks/239345.html</trackback:ping><description><![CDATA[1.javascript åQŒè®¾¾|®ä¸€ä¸ªå˜é‡ï¼Œåªå…è®¸æäº¤ä¸€‹Æ¡ã€‚  <br />     <br />   2 ˜q˜æ˜¯javascriptåQŒå°†æäº¤æŒ‰é’®æˆ–者image¾|®äØ“disable  <br />      onsubmit="getElById('submitInput').disabled = true; return true;">   <br />    <br />     <br />   3 利用struts的同步ä×o牌机制   <br />   利用同步令牌åQˆTokenåQ‰æœºåˆ¶æ¥è§£å†³Web应用中重复提交的问题åQŒStruts也给å‡ÞZº†ä¸€ä¸ªå‚考实现ã€?<br />   基本原理åQšã€€ <br />   服务器端在处理到辄¡š„è¯äh±‚之前åQŒä¼šž®†è¯·æ±‚中包含的ä×o牌å€ég¸Žä¿å­˜åœ¨å½“前用户会话中的ä×oç‰Œå€ÆD¿›è¡Œæ¯”较,看是否匹配。在处理完该è¯äh±‚后,且在½{”复发送给客户端之前,ž®†ä¼šäº§ç”Ÿä¸€ä¸ªæ–°çš„ä×o牌,该ä×o牌除传给客户端以外,也会ž®†ç”¨æˆ·ä¼šè¯ä¸­ä¿å­˜çš„æ—§çš„ä×o牌进行替换。这样如果用户回退到刚才的提交™åµé¢òq¶å†‹Æ¡æäº¤çš„话,客户端传˜q‡æ¥çš„ä×o牌就和服务器端的令牌不一è‡ß_¼Œä»Žè€Œæœ‰æ•ˆåœ°é˜²æ­¢äº†é‡å¤æäº¤çš„发生。 <font face="Times New Roman"> <p><br />   if (isTokenValid(request, true)) {<br />    // your code here<br />    return mapping.findForward("success");<br />   } else {<br />    saveToken(request);<br />    return mapping.findForward("submitagain");<br />   } <br />   Strutsæ ÒŽ®ç”¨æˆ·ä¼šè¯ID和当前系¾lŸæ—¶é—´æ¥ç”Ÿæˆä¸€ä¸ªå”¯ä¸€åQˆå¯¹äºŽæ¯ä¸ªä¼šè¯ï¼‰ä»¤ç‰Œçš„,具体实现可以参考TokenProcessor¾cÖM¸­çš„generateToken()æ–ÒŽ³•。  <br />   1. //验证事务控制令牌,会自动根据session中标识生成一个隐含input代表令牌åQŒé˜²æ­¢ä¸¤‹Æ¡æäº?br />   2. 在action中:   <br />    //   // value="6aa35341f25184fd996c4c918255c3ae"></p> <p>   if (!isTokenValid(request))<br /> errors.add(ActionErrors.GLOBAL_ERROR,<br />    new ActionError("error.transaction.token"));<br />    resetToken(request); //删除session中的令牌  <br />   3. action有这æ ïLš„一个方法生成ä×o牌  </p> <p>   protected String generateToken(HttpServletRequest request) ...{  <br />    HttpSession session = request.getSession();<br />    try ...{<br />    byte id[] = session.getId().getBytes();<br />    byte now[] =<br />    new Long(System.currentTimeMillis()).toString().getBytes();<br />    MessageDigest md = MessageDigest.getInstance("MD5");<br />    md.update(id);<br />    md.update(now);<br />    return (toHex(md.digest()));<br />    } catch (IllegalStateException e) ...{<br />    return (null);<br />    } catch (NoSuchAlgorithmException e) ...{<br />    return (null);<br />    }<br />    }<br />  <br /> 在更新的时候防止按钮重复点击,主要是用Session来做判断<br /> 在JSP/Servlet中可ä»?/p> <p>SynchroToken.java<br /> package com.lims.util;<br /> import org.apache.struts.util.*;<br /> import javax.servlet.http.*;<br /> import javax.servlet.jsp.*;<br /> import org.apache.struts.action.*;<br /> /**<br />   *</p> <p>Title: SynchroToken</p> <p><br />   *<br /> Description:</p> <p><br />   *<br /> Copyright: Copyright (c) 2004</p> <p><br />   *<br /> Company: NetStar</p> <p><br />   * @author Jstar<br />   * @version 1.0<br />   * Created in 2004/04/21<br />   */<br /> public class SynchroToken{<br />  public final static java.lang.String TOKEN_NAME = "_token";<br />  public static boolean checkToken (HttpServletRequest request){<br />    boolean isEqual = false;<br />    HttpSession session = request.getSession ();<br />    String formToken = request.getParameter (TOKEN_NAME);<br />    String sessionToken = (String)session.getAttribute (TOKEN_NAME);<br />    System.out.println ("formToken: " + formToken + " sessionToken: " +<br />                        sessionToken);<br />    if (formToken != null && sessionToken == null){<br />      session.setAttribute (TOKEN_NAME, formToken);<br />      isEqual = true;<br />    }<br />    return isEqual;<br />  }<br />  /**<br />   * Insert the method's description here.<br />   * Creation date: (4/19/2004 3:23:25 PM)<br />   * @return java.lang.String<br />   * @param request javax.servlet.http.HttpServletRequest<br />   */<br />  public static String getToken (HttpServletRequest request){<br />    String token = "" + System.currentTimeMillis ();<br />    HttpSession session = request.getSession ();<br />    if (session != null){<br />      session.removeAttribute (TOKEN_NAME);<br />    }<br />    return token;z<br />  }<br />  /**<br />   * Insert the method's description here.<br />   * Creation date: (4/19/2004 3:24:10 PM)<br />   * @return java.lang.String<br />   */<br />  final static java.lang.String getTOKEN_NAME (){<br />    return TOKEN_NAME;<br />  }<br />  public static String message (PageContext pageContext, String key) throws<br />      JspException{<br />    return RequestUtils.message (pageContext, null, null, key);<br />  }<br /> }</font></p> <img src ="http://www.aygfsteel.com/J2EEHOME/aggbug/239345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/J2EEHOME/" target="_blank">J2EE Home工作å®?/a> 2008-11-07 23:38 <a href="http://www.aygfsteel.com/J2EEHOME/archive/2008/11/07/239345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">ºÚÉ½ÏØ</a>| <a href="http://" target="_blank">ÇìÔÆÏØ</a>| <a href="http://" target="_blank">»Ý°²ÏØ</a>| <a href="http://" target="_blank">ÌÚ³åÏØ</a>| <a href="http://" target="_blank">ÕżҽçÊÐ</a>| <a href="http://" target="_blank">ÌÒÔ´ÏØ</a>| <a href="http://" target="_blank">ÒËÀ¼ÊÐ</a>| <a href="http://" target="_blank">³üÖÝÊÐ</a>| <a href="http://" target="_blank">ÌïÁÖÏØ</a>| <a href="http://" target="_blank">Â«É½ÏØ</a>| <a href="http://" target="_blank">ÂÌ´ºÏØ</a>| <a href="http://" target="_blank">ÇìÑôÊÐ</a>| <a href="http://" target="_blank">×õË®ÏØ</a>| <a href="http://" target="_blank">¶«Ì¨ÊÐ</a>| <a href="http://" target="_blank">ÁéÊ¯ÏØ</a>| <a href="http://" target="_blank">ÒÊÔ´ÏØ</a>| <a href="http://" target="_blank">Ëç·ÒºÓÊÐ</a>| <a href="http://" target="_blank">ÄÏ´¨ÊÐ</a>| <a href="http://" target="_blank">ÑïÖÐÊÐ</a>| <a href="http://" target="_blank">°¢¿Ë</a>| <a href="http://" target="_blank">Ðû»¯ÏØ</a>| <a href="http://" target="_blank">ÂÔÑôÏØ</a>| <a href="http://" target="_blank">Á®½­ÊÐ</a>| <a href="http://" target="_blank">¾²°²Çø</a>| <a href="http://" target="_blank">ÔÆÁúÏØ</a>| <a href="http://" target="_blank">²©°×ÏØ</a>| <a href="http://" target="_blank">Æ½Â½ÏØ</a>| <a href="http://" target="_blank">ÔªÑôÏØ</a>| <a href="http://" target="_blank">ÁÉÄþÊ¡</a>| <a href="http://" target="_blank">°²ÏçÏØ</a>| <a href="http://" target="_blank">ÀË¿¨×ÓÏØ</a>| <a href="http://" target="_blank">¿ªÆ½ÊÐ</a>| <a href="http://" target="_blank">Çí½áÏØ</a>| <a href="http://" target="_blank">ÒËÑôÏØ</a>| <a href="http://" target="_blank">»ªÍ¤ÏØ</a>| <a href="http://" target="_blank">º¼½õºóÆì</a>| <a href="http://" target="_blank">ÑôÐÅÏØ</a>| <a href="http://" target="_blank">ÉÏË¼ÏØ</a>| <a href="http://" target="_blank">ÓÀ´¨ÊÐ</a>| <a href="http://" target="_blank">²ìÓçÏØ</a>| <a href="http://" target="_blank">ÊÖ»ú</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>