我在用
<url-pattern>/*</url-pattern>
将所有请求Map到一个sevlet,在这里我执行所有的身份验证工作。但我想跳过一些静态内容(如css文件)。所以我试图fowrding他们从该sevlet的资源文件是
if(isResourceFile){
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("static/" + fileName);
dispatcher.forward(request, response);
}
但这将启动一个无限循环,因为这将再次调用相同的sevlet
有没有什么方法可以不Mapweb.xml中的所有资源(css)文件来解决这个问题?
3条答案
按热度按时间eni9jsuy1#
/*
的url-pattern
最好由Filter
s独占使用,而不是Servlet
s。把你所有的静态文件放在一个特定的文件夹中(也许被一个更有效的FileServlet的url-pattern
覆盖?),并让过滤器检查它。例如(伪)
另请参阅:
mzsu5hc02#
假设您只想验证JSP文件,您可以更改URL:
我认为使用过滤器而不是servlet来处理身份验证是一个更好的主意。在生产环境中,您应该为静态内容使用前端Web服务器。
oxcyiej73#
如果你不能使用过滤器,你必须在Map中使用通配符'*',而没有像'.jsp'这样的扩展名,那么这可能对你有用:
在静态目录的开头添加'/'将为它提供根上下文。