2013-11-28 34 views
2

我有一個名爲'插入'的數據插入數據庫的servlet。response.sendRedirect vs getRequestDispatcher

在這個servlet的末尾,我有一個getRequestDispatcher,它將用戶發送到一個名爲「outcome.jsp」的頁面。我的servlet也發送一個變量給outcome.jsp與request.setAttribute("Message", "bla bla bla");

在outcome.jsp我有一個request.getAttribute("Message");,我向用戶顯示消息的值。

在瀏覽器url上總是有我的servlet的url(http://www.site.com/insert),所以用戶可以使用瀏覽器的reload按鈕並使插入1000000000次。

我嘗試使用response.sendRedirect是,但我不能使用request.setAttribute,我需要它顯示爲關於刀片結果

如何避免我的servlet的URL信息顯示在瀏覽器的URL爲了不允許用戶使用重載按鈕進行無限插入?

謝謝

+0

遵循PRG(張貼重定向獲取)模式http://en.wikipedia.org/wiki/Post/Redirect/Get –

+0

你使用你的兩個人中哪一個仍然會有同樣的問題。雙重插入的檢查應該分開進行 – MaVRoSCy

回答

0

有史以來兩種方法的使用,你仍然有同樣的問題(即使在sendRedirect()的情況下通過由用戶捕獲和再現請求標頭)。雙重插入的檢查應該分開進行。

通常,如果要禁用客戶端的雙重條目,則可以創建令牌並將其發送給客戶端。當客戶端想要插入時,可以檢查該令牌是否有效,然後執行插入操作(然後從有效列表中刪除令牌)。

這只是衆多方法之一....

希望這有助於

0

如果使用response.sendRedirect是(),一個新的請求將開始,所以你無法訪問您先前請求設置的數據,以顯示你必須使用查詢參數的數據,即將附加到網址

response.sendRedirect("/outcome.jsp?Message=bla bla") 

在JSP頁面,你需要閱讀的

request.getParameter("Message") 
相關問題