Java RequestDispatcher.forward循环
我正在使用Java RequestDispatcher.forward循环,java,jsp,jakarta-ee,servlets,Java,Jsp,Jakarta Ee,Servlets,我正在使用 <url-pattern>/*</url-pattern> 但这将启动一个无限循环,因为它将再次调用相同的sevlet 有没有办法在不映射web.xml中的所有资源(css)文件的情况下解决此问题?假设您只想验证JSP文件,您可以更改URL: /*.jsp 我认为最好使用过滤器而不是servlet来处理身份验证。在生产环境中,您应该使用前端Web服务器来处理静态内容。如果您不能使用筛选器,并且必须在映射中使用通配符“*”,而不使用扩展名“.jsp”,那么这
<url-pattern>/*</url-pattern>
但这将启动一个无限循环,因为它将再次调用相同的sevlet
有没有办法在不映射web.xml中的所有资源(css)文件的情况下解决此问题?假设您只想验证JSP文件,您可以更改URL:
/*.jsp
我认为最好使用过滤器而不是servlet来处理身份验证。在生产环境中,您应该使用前端Web服务器来处理静态内容。如果您不能使用筛选器,并且必须在映射中使用通配符“*”,而不使用扩展名“.jsp”,那么这对您来说就可以了:
if(isResourceFile){
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/static/" + fileName);
dispatcher.forward(request, response);
return;
}
在静态目录的开头添加“/”将为其提供根上下文
/*
的url模式
最好只由过滤器
s使用,而不是Servlet
s使用。将所有静态文件放在某个文件夹中(可能由更有效的url模式
覆盖),然后让过滤器检查它
例如(伪)
希望这有帮助。感谢您这么快回复。我计划在url中不使用.jsp后缀。我将尝试使用过滤器。请使用/作为frontcontroller中的url映射。
if(isResourceFile){
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/static/" + fileName);
dispatcher.forward(request, response);
return;
}
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.
}
}