<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片在线观看 | 国产亚洲自拍一区| www一区二区www免费| 亚洲色偷偷狠狠综合网| 中文字幕版免费电影网站| 国产亚洲午夜高清国产拍精品 | 亚洲第一网站免费视频| 亚洲成电影在线观看青青| 四虎成年永久免费网站| 67194在线午夜亚洲| 在线a人片天堂免费观看高清| 亚洲乱码av中文一区二区| 国产成人免费网站在线观看| 国产精品成人亚洲| 国产精品亚洲不卡一区二区三区 | 最新猫咪www免费人成| 亚洲国产欧美一区二区三区| 免费很黄很色裸乳在线观看| 国产VA免费精品高清在线| 亚洲AV无一区二区三区久久| 久久成人国产精品免费软件| 亚洲精品中文字幕无码A片老| 亚洲国产成人爱av在线播放| 野花香高清视频在线观看免费 | 人人狠狠综合久久亚洲| 亚洲一区二区三区在线播放| 免费成人在线视频观看| 亚洲一卡一卡二新区无人区| 亚洲性日韩精品一区二区三区 | 亚洲精品日韩中文字幕久久久|