4

我有一个使用 Spring 和 Maven 构建的 Java EE 应用程序。它具有通常的项目结构。这是层次结构的一部分。

MyApplication
    src
        main
            webapp
                WEB-INF
                    layout
                        header.jsp
                styles
                    main.css

我想在我的 JSP 中包含那个 CSS 文件。我有以下标签。

<c:url var="styleSheetUrl" value="/styles/main.css" />
<link rel="stylesheet" href="${styleSheetUrl}">

当我部署应用程序时,找不到 CSS 页面。当我查看页面源时,href 是/MyApplication/styles/main.css. 查看 WAR 内部,有一个/styles/main.css. 但是,当我尝试直接在浏览器中访问 CSS 文件时,我得到了 404。

我发现问题的原因是 Dispatcher Servlet 映射。映射如下所示。

<servlet-mapping>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

我想 Dispatcher Servlet 不知道如何处理 CSS 请求。处理这个问题的最佳方法是什么?我宁愿不必更改所有请求映射。

4

2 回答 2

7

您需要配置 Spring 以将静态资源(CSS、JS、图像)与对您的应用程序的 servlet 请求分开处理。为此,请将您的 Spring 配置配置为通过单独的顶级目录(例如“static”)将请求映射到静态文件:

<!-- Where to load static resources (css, js, images) -->
<mvc:resources mapping="/static/**" location="/" />

然后更改您的 JSP 以使用路径/static/styles/main.css

请注意,约定要求您将“样式”目录命名为“css”。

于 2012-09-10T03:33:25.643 回答
4

在 web.xml 中添加以下内容

<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.js</url-pattern>
</servlet-mapping>

并使用以下内容包含您的CSS

<link rel="stylesheet" href="styles/main.css">
于 2014-04-25T19:36:02.580 回答