簡體   English   中英

多請求響應轉發

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM