【问题标题】:404 Error accessing static content when defualt servlet is defined in web.xml404 在 web.xml 中定义默认 servlet 时访问静态内容时出错
【发布时间】:2011-05-03 15:41:51
【问题描述】:

我在 Tomcat 7 容器中运行 web 应用程序,并在尝试访问静态内容(.css 等)时收到 404 错误。下面是我的目录结构:

    • 元信息
    • 资源
      • CSS
    • WEB-INF

我在部署描述符中定义了一个默认 servlet,如下所示:

<servlet>
    <servlet-name>HomeController</servlet-name>
    <servlet-class>controller.HomeController</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>HomeController</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

HomeController servlet 将请求转发到 .jsp,然后正确呈现视图。

request.getRequestDispatcher("view.jsp").forward(request,
        response);

“view.jsp”有一个指向位于上面列出的 css 文件夹中的样式表 (style.css) 的链接。但是,由于 servlet 被配置为默认 servlet,我现在无法访问 css 文件夹中的静态内容,并且对该样式表的任何请求都会返回 404 错误。

<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/style.css" />

有没有办法解决这个问题?提供静态资源但仍能定义默认 servlet 的最佳方法是什么?

【问题讨论】:

    标签: tomcat servlets default


    【解决方案1】:

    不要自行开发自己的默认 servlet。使用 servletcontainer 的内置默认 servlet。您的前端控制器应映射到更具体的 URL 模式,例如*.html/pages/*

    如果您的意图是不更改 URL,那么您应该创建一个附加的 Filter 类,该类映射到 /* 并在请求 /resources/* 时继续链,否则转发到前端控制器 servlet映射到/pages/*

    例如

    String uri = ((HttpServletRequest) request).getRequestURI();
    if (uri.startsWith("/resources/")) {
        chain.doFilter(request, response); // Goes to container's default servlet.
    } else {
        request.getRequestDispatcher("/pages" + uri).forward(request, response);
    }
    

    并将您的 CSS 与 URL 中的 /resources 路径链接起来,就像您在公共 webcontent 文件夹结构中一样。

    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/resources/css/style.css" />
    

    另见:

    【讨论】:

      【解决方案2】:

      你不应该像这样从资源路径链接 css:

      <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/resources/css/style.css" />
      

      【讨论】:

      • 我相信结果会和使用 ${pageContext.request.contextPath} 一样
      猜你喜欢
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多