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

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

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

    迷途書童

    敏感、勤學、多思
    隨筆 - 77, 文章 - 4, 評論 - 86, 引用 - 0
    數據加載中……

    防止任意形式的重復提交

    Struts Token 機制可以解決這個問題。

    1. ? 防止通過超鏈接重復訪問 Struts Action

    如果我們要防止 A 的默認頁面 J 中指向 K 的超鏈接重復提交數據,按照下列步驟即可:

    a. ? 如果 J 是從 Struts Action 轉發而來,我們要在該 Struts Action execute 方法中添加下面的一行:

    ??? saveToken(request);

    b. ? 如果 J 不是從 Struts Action 轉發而來,那么新建一個 Struts Action ,在該 Struts Action excute 方法中增加上面的一行,然后再從該 action 轉到 J 頁面。

    c. ? J 頁面中使用 Struts 標簽生成指向 K 的超鏈接,如:

    ?? <html:link action="/deleteLayoutAction?layoutId=0" transaction="true" >delete</html:link>

    ?? 注意紅色字體部分。

    d. ? <html:link> 標簽指向的 action excute 方法中加入下面的代碼:

    ?? if (!isTokenValid(request)) {

    ???????????????????? return mapping.findForward(" 這種情況下就是重復提交,轉到相應的頁面 ");

    ????????????? }

    e All Done.

    2. ? 防止通過表單重復提交數據。

    a. ? 如果 J 是從 Struts Action 轉發而來,我們要在該 Struts Action execute 方法中添加下面的一行:

    ??? saveToken(request);

    b. ? 如果 J 不是從 Struts Action 轉發而來,那么新建一個 Struts Action ,在該 Struts Action excute 方法中增加上面的一行,然后再從該 action 轉到 J 頁面。

    c. ? J 頁面中表單 Action 屬性指向的 Struts action excute 方法中加入下面的代碼:

    ?? if (!isTokenValid(request)) {

    ?????????? saveToken(request);

    ???????????????????? return mapping.findForward(" 這種情況下就是重復提交,轉到相應的頁面 ");

    ?? saveToken(request);

    ????????????? }

    e All Done.

    posted on 2006-05-06 15:54 迷途書童 閱讀(2091) 評論(9)  編輯  收藏 所屬分類: java應用

    評論

    # re: 防止任意形式的重復提交  回復  更多評論   

    Struts 的 Token 機制可以解決這個問題。

    如果沒用Struts 怎么辦哇 .................. 郁悶。
    2006-05-06 17:52 | Web 2.0 技術資源

    # re: 防止任意形式的重復提交  回復  更多評論   

    可以仿照struts的token機制原理自己實現一下,very easy!
    2006-05-06 19:31 | 獨孤過客

    # re: 防止任意形式的重復提交  回復  更多評論   

    我想知道一個事情:
    使用了令牌機制之后,如果在同一個客戶端打開兩個同樣的窗口,那么豈不是新的窗口可以提交表單,舊的窗口就無法提交了呢?

    如果是這樣的話,令牌機制也不是十分完美啊,如果是在論壇里面使用的話,往往會打開若干個窗口,只有最新的一個窗口可以正確提交表單,簡直糟糕透了。
    2006-05-07 10:54 | Jonney

    # re: 防止任意形式的重復提交  回復  更多評論   

    其實還有比較難處理的情況:

    return mapping.findForward(" 這種情況下就是重復提交,轉到相應的頁面 ");

    在應用中,這個相應的頁面可能是動態的.
    比如說首次提交是成功的,那么重復提交就應該也到成功頁面.
    如果首次提交是失敗的,那么重復提交就應該也到失敗頁面.
    但是在代碼中我們只知道是重復提交,卻不知道首次提交的結果.
    所以無法決定應該轉到什么頁面.

    當然, 如果技術能夠驅動需求, 比如發生重復提交時顯示指定的頁面.
    問題可以解決.但是把技術上的問題暴露給用戶,終歸不是很友好.
    2006-05-09 07:12 | InPractice

    # re: 防止任意形式的重復提交  回復  更多評論   

    樓上說的有一定的道理,喪失一點友好性總比引起數據不一致要好得多,所謂”魚與熊掌不能兼得“
    2006-05-09 23:09 | 獨孤過客

    # re: 防止任意形式的重復提交  回復  更多評論   

    你們很強啊

    我為你們感到驕傲
    2006-05-17 00:54 | 夢游客

    # 愛我蒙古  回復  更多評論   

    bi mongl ges neen heezee ged buu maart!
    2006-07-02 05:03 | 蒙古人175866762

    # re: 防止任意形式的重復提交  回復  更多評論   

    “防止任意形式的重復提交”標題起得真好聽,可惜要用Struts 框架,建議該標題為:“利用Struts 框架,防止任意形式的重復提交”
    2006-11-23 12:25 | 被蒙騙的人

    # re: 防止任意形式的重復提交  回復  更多評論   

    使用了令牌機制之后,如果在同一個客戶端打開兩個同樣的窗口,那么豈不是新的窗口可以提交表單,舊的窗口就無法提交了呢?
    這個問題確實很鬧心。我還沒有解決掉。
    2007-05-22 08:58 | wts
    主站蜘蛛池模板: 亚洲手机中文字幕| 亚洲AV成人片色在线观看| 亚洲综合伊人制服丝袜美腿| 特级精品毛片免费观看| 亚洲AV日韩AV永久无码下载| 中文字幕日本人妻久久久免费| 亚洲中文字幕无码不卡电影| 国产免费AV片在线观看播放| 中文字幕亚洲无线码| 中文字幕无码毛片免费看| 日本亚洲欧洲免费天堂午夜看片女人员 | 97热久久免费频精品99| 亚洲日本在线播放| 成年午夜视频免费观看视频| 亚洲成av人片天堂网无码】| 免费人成视频在线观看不卡| 成人免费无码H在线观看不卡| 亚洲AV无码成人精品区蜜桃| 精品无码免费专区毛片| 亚洲精品免费网站| 国产又黄又爽又猛的免费视频播放| 青青久久精品国产免费看| 国产AV无码专区亚洲AV男同| 国产成人免费午夜在线观看| 亚洲精品国产综合久久久久紧| 无码欧精品亚洲日韩一区夜夜嗨 | 一本色道久久88亚洲精品综合 | 中文字幕成人免费视频| 亚洲欧美综合精品成人导航| 亚洲国产精品嫩草影院久久 | 亚洲国产成人VA在线观看| 免费看一区二区三区四区| 亚洲成人网在线观看| 国产一级淫片a免费播放口之| 中文在线观看永久免费| 亚洲av成人综合网| 自拍偷自拍亚洲精品第1页| 国产精品视频免费| 一级毛片试看60分钟免费播放| 亚洲精品日韩专区silk| 免费人成视频在线观看视频|