簡體   English   中英

dispatcher.forward導致無限循環

[英]dispatcher.forward causes infinite loop

我正在嘗試執行以下操作:創建一個servlet處理所有請求,如果url包含單詞“ hello”,則將響應代碼設置為403,否則將請求轉發到html頁面。 這是我的servlet:

@WebServlet("/*")
public class AllRequestsHandlerServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String url = request.getRequestURL().toString();
        if(url.contains("hello")) {
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
        } else {
            RequestDispatcher dispatcher = request.getRequestDispatcher("/static-html-page.html");
            dispatcher.forward(request, response);
        }
    }
}

但是在轉發之后,由於此servlet也處理轉發的請求,因此會導致無限循環。 我該如何避免呢?

這永遠不會起作用,因為/*映射到每個請求-包括轉發到/static-html-page.html路徑,路徑映射的優先級高於所有其他映射。

有兩種解決方法。 最簡單的方法(假設Web應用程序中沒有其他內容)是:

  • /static-html-page.html重命名為/static-html-page.jsp
  • 將映射從/*更改為/

這確實意味着/static-html-page.jsp可以直接訪問。 如果您不想這樣做,請將其移至/WEB-INF request.getRequestDispatcher("/WEB-INF/static-html-page.html")仍然可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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