我正在使用
<url-pattern>/*</url-pattern>将所有请求映射到一个sevlet,我在其中执行所有身份验证工作。但是我想跳过一些静态内容(比如css文件).so,我试着把它们从那个sevlet查找到资源文件所在的位置。
if(isResourceFile){
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("static/" + fileName);
dispatcher.forward(request, response);
}但这将启动一个无限循环,因为它将再次调用相同的sevlet
有没有办法在不映射web.xml中的所有资源(Css)文件的情况下解决这个问题?
发布于 2009-07-01 14:33:47
假设您只希望对JSP文件进行身份验证,则可以更改URL:
/*.jsp我认为使用过滤器而不是servlet来处理身份验证是一个更好的主意。在生产环境中,您应该为静态内容使用前端for服务器。
发布于 2009-11-18 07:50:25
/*的url-pattern最好由Filters独占使用,而不是Servlets。将所有静态文件放在某个文件夹中(也许会被更有效的FileServlet的url-pattern所覆盖?)并让过滤器检查它。
例如(伪)
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.
}
}希望这能有所帮助。
发布于 2009-11-18 04:04:23
如果你不能使用过滤器,并且你必须在映射中使用通配符'*‘,而不是像'.jsp’这样的扩展名,那么这对你来说是可行的:
if(isResourceFile){
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/static/" + fileName);
dispatcher.forward(request, response);
return;
}在静态目录的开头添加'/‘将为其提供根上下文。
https://stackoverflow.com/questions/1069442
复制相似问题