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) {
. . .
}
安らかなURLなしで作業すると、すべてが機能します。グーグルとスタッキングの後、静的リソースの絶対パスを使用して解決策を見つけました:
<link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/resources/css/960_16_col.css">
このスタック オーバーフローの質問に書かれているとおりですが、回避策のようです。
静的 URL を解決して相対関係を維持するエレガントな方法はありますか?