我正在使用RESTFul URL來開發Spring MVC應用程序。我遇到了靜態資源路徑解析問題。Spring mvc RESTFUL找不到具有URI的HTTP請求的映射
我在JSP頁面的靜態資源寫成:
<link type="text/css" rel="stylesheet" href="resources/css/960_16_col.css">
所以當頁面被Tomcat 7呈現的,我得到一個錯誤:
No mapping found for HTTP request with URI [/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,但它似乎是一個解決辦法。
有沒有一種優雅的方式來解決靜態URL和他們的親屬?
'$ {pageContext.request.contextPath}'是一樣簡單,你可以得到它。我不認爲這是一種解決方法。考慮一下,變量/標籤必須能夠適應Web應用程序作爲根web應用程序和具有領先上下文名稱的開發環境運行的時間。所以你需要一些變量來適應你在絕對URL中可能期望的差異。僅供參考,您可以使用相對URL,但通常認爲它是一個壞主意(在SO上搜索優缺點)。 – nickdos