我正在开发一个带有 RESTFul url 的 Spring MVC 应用程序。我在静态资源路径解析方面遇到了麻烦。
我在一个jsp页面中有一个静态资源,写成:
<link type="text/css" rel="stylesheet" href="resources/css/960_16_col.css">
所以当页面由tomcat 7渲染时,我得到一个错误:
未找到带有 URI [/mycoolapp/instances/demo/resources/css/960_16_col.css] 的 HTTP 请求的映射
在我的 servlet-context.xml 我有:
<annotation-driven />
<resources mapping="/resources/**" location="/resources/" />
我的 web.xml 是:
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
最后我的控制器是:
@RequestMapping(value = "/instances/{proj}/{type}", method = RequestMethod.GET)
public ModelAndView instances(Locale locale, Model model,
@PathVariable("proj") String project,
@PathVariable("type") String type) {
. . .
}
在没有宁静的网址的情况下工作一切正常。在谷歌搜索和堆叠之后,我找到了使用静态资源绝对路径的解决方案:
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/resources/css/960_16_col.css">
如this stack overflow question中所写,但这似乎是一种解决方法。
有没有一种优雅的方法来解决静态网址并保持它们的亲戚关系?