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