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.
    }
}