Spring can't load static resources -


i'm trying load static resources such css files , javascript files in jsp files using relative paths, seems servlet mappings overriding mapping them.

project structure:

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-dispatcher-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/" /> 

i jsp file i'm trying load stylesheet:

<%@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'/>" /> 

the error is:

warn org.springframework.web.servlet.pagenotfound:1108 - no mapping found http request uri [/project/assets/styles/common.css] in dispatcherservlet name 'mvc-dispatcher'

the better approach is:

<c:set var="root" value="${pagecontext.request.contextpath}"/>  <link rel="stylesheet" type="text/css" href="${root}/assets/styles/common.css"/> 

${root} resolved relative context path regardless of ports, protocol, domain name etc.


Comments