TL;DR: 私は単純な Tomcat/Spring/Freemarker webapp を作成していますが、Spring の DispatcherServlet を<mvc:resources...>
構成に合わせるのに苦労しているようです。
注意してください:他の回答で与えられた解決策を試したので、これは他の質問の複製ではありません。誰かが既存の質問を見つけ、その質問が私が見逃した解決策を提供する場合、喜んで VTC を複製します (または、必要に応じてこの質問を削除します)。
Freemarker に基づく非常に単純な webapp があります。その部分はうまく機能しています。すべてのリクエスト ( ) を処理する単一のリクエスト ハンドラ メソッドがありますが、この機能を使用して@RequestMapping("/**")
静的リソースを提供したいと考えています。リソースは、最上位の webapp ディレクトリのサブディレクトリにあります。/${contextPath}/static/...
<mvc:resources.../>
SOに関する他の質問を読んだことに基づいて、追加しました
<mvc:resources mapping="/static/**" location="/" />
私のSpring構成に。
何をしても、静的リソース ファイルとして解決されると予想されるリクエストは、代わりにコントローラーのリクエスト ハンドラー メソッドに送信されます。私が考えることができる唯一のことは、@RequestMapping
注釈が よりも優先されるmvc:resources
ということですが、それはあまり意味がありません。
リソース URL が正しく生成されていることを確認しました。つまり、テンプレート行です。
<link rel="stylesheet" href="${contextPath}/static/css/gallery.css">
生成する
<link rel="stylesheet" href="/gallery/static/css/gallery.css">
リクエストはTomcatサーバーによって受信されており、間違った場所にルーティングされています.
私はこの主題に関する SO に関するほとんどの質問を読んだことがあり、正しくやっていると信じています (たとえば、Trying to get mvc resources to serve my static resources を参照してください)。
環境
- エクリプス ルナ
- Java 8
- トムキャット 8
- フリーマーカー 2.3.23
- 春 4.2.0
- ウィンドウズ 7 SP1
デプロイされたレイアウト
標準の Java EE Tomcat ディレクトリ構造
webapps
|- gallery
|- css
|- images
|- js
|- META-INF
|- WEB-INF
|- classes
|- lib
|- views
Tomcat コンテキスト定義
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:\dev\tools\apache-tomcat-8.0.24\wtpwebapps\gallery"
path="/gallery" reloadable="true"
source="org.eclipse.jst.j2ee.server:gallery"/>
Spring サーブレット構成
WEB-INF/main-servlet.xml
...
<mvc:resources mapping="/static/**" location="/" />
<mvc:annotation-driven/>
<context:component-scan base-package="com.mysite.gallery"/>
...
これらのステートメントの可能な順序をすべて試しましたが、効果がないようです。私も追加してみました
<mvc:default-servlet-handler/>
効果なし。
WEB-INF/web.xml
標準の Spring MVC DispatcherServlet 構成
...
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>main</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>main</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
...
RequestMapping メソッド
...
@RequestMapping("/**")
public String gallery(ModelMap modelMap, HttpServletRequest req, HttpServletResponse resp)
{
etc...
フリーマーカー テンプレート
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="${contextPath}/static/css/photoswipe.css">
<link rel="stylesheet" href="${contextPath}/static/css/default-skin/default-skin.css">
<link rel="stylesheet" href="${contextPath}/static/css/gallery.css">
<script src="${contextPath}/static/js/photoswipe.min.js"></script>
<script src="${contextPath}/static/js/photoswipe-ui-default.min.js"></script>
</head>
<body>
<div>
...