<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未满十八| 久久综合给合久久国产免费| 在线综合亚洲中文精品| 日日噜噜噜噜夜夜爽亚洲精品| 久久这里只精品99re免费| 亚洲av永久无码精品网址| 亚洲AV无一区二区三区久久| 国产成人精品免费视频大全五级 | 久9这里精品免费视频| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 男女一边桶一边摸一边脱视频免费| 亚洲成AV人综合在线观看| 久久久久亚洲精品美女| 2022中文字字幕久亚洲| 国产乱子影视频上线免费观看| 中文字幕亚洲免费无线观看日本| 国产精品免费在线播放| 九九九国产精品成人免费视频| 污污免费在线观看| 一级特黄录像视频免费| 性生大片视频免费观看一级| 无遮挡免费一区二区三区| 亚洲高清免费视频| 嫩草成人永久免费观看| 最近2019年免费中文字幕高清| 18禁在线无遮挡免费观看网站| 嫩草成人永久免费观看| 精品国产sm捆绑最大网免费站| 和日本免费不卡在线v| 国内自产拍自a免费毛片| 免费吃奶摸下激烈视频| 久久亚洲国产精品五月天婷| 久久精品国产亚洲av四虎| 亚洲欧洲精品视频在线观看| 亚洲熟妇AV乱码在线观看| 人人鲁免费播放视频人人香蕉| 中文字幕乱码一区二区免费| 一个人看的www在线观看免费| 在线观看免费精品国产| 亚洲人成网站在线播放影院在线|