[英]Multiple Request Response Forward
目前,我正在使用以下代碼將一些ArrayList's
從Servlet傳遞到JSP頁面。
RequestDispatcher rd = null;
request.setAttribute("date",al);
request.setAttribute("bau",al1);
request.setAttribute("project",al2);
rd = request.getRequestDispatcher("ResourceChart.jsp");
rd.forward(request,response);
問題是,當我單擊頁面上的刷新時,再次傳遞了相同的日期,最終結果很奇怪。 我是否還應該轉發到JSP頁面,以避免servlet重新生成變量並將其傳遞?
什么是實現此目標的最佳方法?
您顯然正在刷新POST請求,而忽略/確認瀏覽器的內置警告,即將重新發送數據。 在那種情況下,確實會使用先前提交的數據重新執行doPost()
方法,該數據只會以DB中的重復條目結束。
避免在POST請求刷新時重復提交的規范方法是在POST請求之后發送重定向。 重定向隱式創建一個新的GET請求。 然后,刷新將導致僅重新執行GET請求,這是完全無害的。
為此,將doPost()
問題顯示的行中的所有內容替換為以下一行
response.sendRedirect(request.getContextPath() + "/ResourceChart");
(假設您的servlet映射在/ResourceChart
的URL模式上)
並創建一個新的doGet()
方法,在其中將所有這些刪除的行放回原處,以及准備列表的必要邏輯。 您唯一需要做的更改是將JSP文件放在/WEB-INF
文件夾中,以防止最終用戶能夠通過輸入/猜測其URL而無需先調用servlet的doGet()
來直接打開它。
request.getRequestDispatcher("/WEB-INF/ResourceChart.jsp").forward(request, response);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.