我正在使用
<url-pattern>/*</url-pattern>
将所有请求映射到一个 sevlet,我在其中完成所有身份验证工作。 但我想跳过一些静态内容(如css文件)。所以我尝试将它们转发 该 sevlet 到资源文件所在的位置
if(isResourceFile){
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("static/" + fileName);
dispatcher.forward(request, response);
}
但这将启动无限循环,因为这将再次调用相同的 sevlet
有没有办法解决这个问题,而不需要映射 web.xml 中的所有资源(css)文件?
最佳答案
/*
的 url-pattern
最好由 Filter
独占使用,而不是 Servlet
s。将所有静态文件放在某个文件夹中(可能被更有效的 FileServlet 的 url-pattern
覆盖?)并让 Filter 检查它。
例如(伪)
public void doFilter(request, response, chain) {
if (requestURI.startsWith("/static")) {
chain.doFilter(request, response); // Just continue. Do nothing.
} else {
request.getRequestDispatcher("/pages").forward(request, response); // Forward to page controller.
}
}
另请参阅:
关于java - RequestDispatcher.forward循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1069442/