java - RequestDispatcher.forward循环

标签 java jsp jakarta-ee servlets

我正在使用

<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。将所有静态文件放在某个文件夹中(可能被更有效的 FileServleturl-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/

相关文章:

java - 检索时图像不显示

javascript - 如何从javascript弹出窗口打开父窗口选项卡

java - 在hibernate中,JSP值如何匹配实体类中的变量

java - dialogBu​​ilder.setMessage 为空

java - 为什么当我输入 "ps -ef | grep java"时,Linux 操作系统上的 java 进程在 java 命令中没有显示 -classpath?

java - 将字符串写入文件,用户从 &lt;input type ="file"> 中选择

java - 请求调度程序 : Servlet mapping doesn't work properly

java - 如何在 Java Web 应用程序中动态设置 session 超时?

读取简单值时出现 java.util.InputMismatchException

java - 在没有 web 方面安装 java?