2012-09-10 66 views
4

我有一個Java EE應用程序,它使用Spring和Maven構建。它具有通常的項目結構。這是一個層次結構。Spring WAR中的CSS文件返回404

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是。看看戰爭的內部,有一個/styles/main.css。但是,當我嘗試直接在瀏覽器中訪問CSS文件時,我得到了404。

我發現問題的原因是分派器Servlet映射。映射如下所示。

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

我想象Dispatcher Servlet不知道如何處理CSS請求。處理這個問題的最好方法是什麼?我寧願不必更改所有的請求映射。

+0

注:這不是誰所在的CSS文件中的JSP。這是webbrowser在檢索並解析JSP生成的一堆HTML之後執行的。 – BalusC

+0

已編輯。只是正確的速度;) –

回答

7

你需要配置Spring來處理static resources(CSS,JS,圖像)與servlet請求分開處理。要做到這一點,配置Spring配置通過一個單獨的頂級目錄(例如「靜態」),以請求映射到靜態文件:

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

然後改變你的JSP使用路徑/static/styles/main.css

請注意,約定規定您將您的「樣式」目錄命名爲「css」。

+0

+1謝謝。在我的應用程序上下文XML中使用了''',並且它能夠工作(我將重做以後再使用靜態文件夾)。 –

3

添加以下在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"> 
+0

它的工作原理!對於任何其他類型的靜態資源,相應的應添加適當的