Spring mvc RESTFUL没有为带HTTP的HTTP请求找到映射

时间:2012-11-28 11:23:09

标签: java spring-mvc restful-url

我正在使用RESTFul网址开发Spring MVC应用程序。我在静态资源路径解析方面遇到了麻烦。

我在jsp页面中写了一个静态资源:

<link type="text/css" rel="stylesheet" href="resources/css/960_16_col.css">

因此当页面由tomcat 7呈现时,我收到错误:

  

找不到带URI的HTTP请求的映射[/mycoolapp/instances/demo/resources/css/960_16_col.css]

在我的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"> 

写在stack overflow question中,但似乎是一种解决方法。

有没有一种优雅的方法来解决静态网址并让他们保持亲戚?

2 个答案:

答案 0 :(得分:2)

尝试使用<spring:url />标记,默认情况下会将上下文根附加到网址。

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<link type="text/css" rel="stylesheet" href='<spring:url value="/resources/css/960_16_col.css" htmlEscape="true"/>'/>

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/spring.tld.html

答案 1 :(得分:0)

导入标签lib

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

然后使用url标签:

<c:url var="myCss" value="/resources/css/960_16_col.css"/>
<link type="text/css" rel="stylesheet" href="${myCss}"/>

或不创建变量:

 <link type="text/css" rel="stylesheet" href="<c:url value='/resources/css/960_16_col.css'/>" />