<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風(fēng)行天下

    JAVA太極
    posts - 4, comments - 10, trackbacks - 0, articles - 55
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    在編寫web應(yīng)用程序時(shí),經(jīng)常會(huì)遇到這樣的情況:由于網(wǎng)速慢等諸多原因,用戶刷新了好幾次頁面,造成多次遞交。
    struts中利用token可以來防止這種情況的發(fā)生。以增加一本書的紀(jì)錄舉例如下:

    struts通常鼓勵(lì)采用這樣的流程--
    用 戶 || ||調(diào)用 \/ EditBookAction || ||初始化form并跳轉(zhuǎn) \/ book.jsp || ||遞交 \/ SaveBookAction 使用token方法如下-- a.在EditBookAction中調(diào)用saveToken(request)方法。 b.在SaveBookAction中檢驗(yàn):isTokenValid(request),如為true, resetToken(request).為false按錯(cuò)誤處理。代碼如下: if (!isTokenValid(request)) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.transaction.token")); } resetToken(request);
    利用Token解決重復(fù)重復(fù)提交:
    Struts利用同步令牌(Token)的方式來解決Web應(yīng)用中重復(fù)提交的問題,其機(jī)制是在form表單中增加一個(gè)隱藏的域,保存當(dāng)前令牌值,然后在程序中判斷此令牌值是否合法.
    org.apache.struts.action.Action類提供了相關(guān)操作Token的方法:
    1、isTokenValie方法:
    判斷存儲(chǔ)在當(dāng)前用戶會(huì)話中的令牌值和請(qǐng)求參數(shù)中的令牌值是否匹配.如果匹配,返回true,反之返回false.只要符合下列情況之一的,就會(huì)返回false:
    不存在HttpSession對(duì)象;
    在session范圍內(nèi)沒有保存令牌值;
    在請(qǐng)求參數(shù)中沒有令牌值;
    存儲(chǔ)在當(dāng)前用戶session范圍內(nèi)的令牌值和請(qǐng)求參數(shù)中的令牌值不匹配.
    2、resetToken方法:
    從當(dāng)前session范圍內(nèi)刪除令牌屬性.
    3、saveToken方法:
    創(chuàng)建一個(gè)新的令牌,并把它保存在當(dāng)前session范圍內(nèi).如果HttpSession不存在,就首先創(chuàng)建一個(gè)HttpSession對(duì)象.

    如何利用上述方法應(yīng)用令牌機(jī)制解決重復(fù)提交問題:
    以用戶注冊為例:
    在用戶請(qǐng)求newUser.jsp之前,首先把請(qǐng)求轉(zhuǎn)發(fā)到PrepareAction,PrepareAction 調(diào)用saveToken方法,創(chuàng)建一個(gè)新的令牌,并將令牌值保存在當(dāng)前HttpSession中(新創(chuàng)建的),PrepareAction接著把請(qǐng)求轉(zhuǎn)發(fā)給newUser.jsp.

    newUser.jsp中的<html:form>標(biāo)簽自動(dòng)判斷在session范圍內(nèi)是否存在Token,如果存在,就自動(dòng)在表單中生成一個(gè)包含Token信息的隱藏字段,例如:
    <input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="....">

    在用戶提交表單后,由InsertUserAction處理請(qǐng)求.在InsertUserAction中,調(diào)用isTokenValid方法,判斷當(dāng)前用戶會(huì)話中的令牌值和請(qǐng)求參數(shù)中的令牌值是否匹配.如果匹配,就調(diào)用resetToken方法,刪除Token,然后執(zhí)行插入數(shù)據(jù)操作.如果不匹配,返回相關(guān)錯(cuò)誤提示,進(jìn)行相關(guān)操作.

    OK.醬紫就可以有效放置重復(fù)提交了.

    如何在不使用Struts的前提下利用令牌機(jī)制解決重復(fù)提交問題:
    Struts的令牌機(jī)制有幾個(gè)要點(diǎn)可以讓我們在普通的JSP/Servlet中解決重復(fù)提交問題.
    1、提供幾個(gè)操作Token的相關(guān)方法:
    關(guān)鍵有三個(gè):
    resetToken(HttpServletRequest request)-->重置令牌值.
    saveToken(HttpServletRequest request)-->保存令牌值.
    isTokenValid(HttpServletRequest request)-->檢測令牌是否合法.

    2、在form表單中增加隱藏域,保存當(dāng)前令牌值.

    3、在執(zhí)行持久性數(shù)據(jù)操作之前調(diào)用相關(guān)方法判斷當(dāng)前令牌是否合法,之后在進(jìn)行相關(guān)操作.

    方法是相同的,只是實(shí)現(xiàn)的方式不太一樣.

    只有注冊用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 无码国产精品一区二区免费式直播| a级毛片免费高清视频| 永久免费在线观看视频| 亚洲AV午夜成人影院老师机影院| 和老外3p爽粗大免费视频| 免费少妇a级毛片人成网| 亚洲a∨无码精品色午夜| 成人免费午夜视频| 亚洲色偷偷色噜噜狠狠99网| 老司机在线免费视频| 亚洲激情视频图片| 精品免费国产一区二区三区| 在线观看亚洲精品专区| 亚洲天堂免费在线视频| 中文日本免费高清| 久久99国产亚洲精品观看| 69视频免费在线观看| 亚洲冬月枫中文字幕在线看| 嫩草影院免费观看| 九九综合VA免费看| 成人午夜亚洲精品无码网站| 国产精品99精品久久免费| 亚洲成A∨人片在线观看无码| 成人毛片免费网站| 一本岛v免费不卡一二三区| 日本亚洲视频在线| 久久国产免费福利永久| 亚洲国产成人手机在线观看| 亚洲日本中文字幕天堂网| 国内精品久久久久影院免费| 亚洲日本在线观看| 一区二区无码免费视频网站| 亚洲日韩一区二区三区| 国产免费卡一卡三卡乱码| 一级毛片在播放免费| 人人狠狠综合久久亚洲88| 18女人腿打开无遮掩免费| 亚洲国产精品无码久久久秋霞1| 婷婷亚洲天堂影院| APP在线免费观看视频| 亚洲人成免费电影|