2013-07-19 131 views
0

我試圖加載靜態資源,如css文件和JavaScript文件在我的jsp文件中使用相對路徑,但似乎通過servlet映射重寫映射到他們。春天無法加載靜態資源

項目結構:

webapp/ 
    assets/ 
     scripts/ 
     dashboard.js 
     styles/ 
     common.css 
    WEB-INF/ 
     views/ 
     pages/ 
      home/ 
       body.jsp 

的web.xml:

... 
<servlet> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

... 

MVC-調度-servlet.xml中:

<import resource="applicationContext.xml" /> 
<context:component-scan base-package="com.nickythorne.controller" /> 

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/> 
</bean> 

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" > 
    <property name="definitions" value="/WEB-INF/tiles-definitions.xml" /> 
</bean> 

<mvc:resources mapping="/assets/**" location="/assets/" /> 

我在那裏我想我的JSP文件加載樣式表:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 

<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}" /> 

<link rel="stylesheet" type="text/css" href="<c:url value='/assets/styles/common.css'/>" /> 

我得到的錯誤是:

WARN org.springframework.web.servlet.PageNotFound:1108 - 發現用於與URI [/project/assets/styles/common.css]在HTTP請求沒有映射DispatcherServlet的名稱爲 'MVC-調度'

回答

0

更好的方法是:

<c:set var="root" value="${pageContext.request.contextPath}"/> 

<link rel="stylesheet" type="text/css" href="${root}/assets/styles/common.css"/> 

${root}時將忽略端口解析爲您的相對上下文路徑,PROT ocol,域名等。

+0

c:url自動將上下文前導到路徑。 – Nick

+0

問題在於調度程序試圖解析path/project/assets/styles /作爲視圖。但顯然它不能被發現,因爲它不存在。我需要以某種方式從servlet中排除/ assets/**路徑。 – Nick