我正在尝试执行以下操作:我创建一个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也处理转发的请求,因此会导致无限循环。我该如何避免呢?
答案 0 :(得分:1)
这永远不会起作用,因为/*
映射到每个请求-包括转发到/static-html-page.html
的路径映射都比其他所有映射都优先。
有两种解决方法。最简单的方法(假设网络应用中没有其他内容)是:
/static-html-page.html
重命名为/static-html-page.jsp
/*
更改为/
这确实意味着可以直接访问/static-html-page.jsp
。如果您不想这样做,请将其移至/WEB-INF
下。 request.getRequestDispatcher("/WEB-INF/static-html-page.html")
仍然可以使用。