webapps配下でないディレクトリにリソースを置く
Tomcatで、ウェブアプリで使われるリソースをwebapps配下でないディレクトリに置きたい場合あります。
例えば、リソース(画像やJSPなど)をアップロードしてウェブアプリの画面を動的に構成したい時です。
またお客様がウェブアプリ本体のソースを修正することなく、カスタマイズできるようにしたい時もありますね。
もし、そういうリソースをwebapps配下におくと、
ウェブアプリをデプロイするたびに既存のリソースが消えてしまうので、困りますね。
こういう場合、Tomcat8に追加されたResources Componentを使えばいいです。
以下のようにserver.xmlのContext要素配下にResources要素とその下のPostResources要素を追加します。
<Context docBase="myweb" path="" reloadable="false"> <Resources allowLinking="false"> <PostResources className="org.apache.catalina.webresources.DirResourceSet" base="${other}/myres" webAppMount="/myres" /> </Resources> </Context>
PostResourcesのbaseにはリソースが位置する絶対パスを指定します。
${other}のようにJVMのシステムプロパティを指定することもできます。
webAppMountにはURLのパス(ウェブアプリのルートパスで次の部分)を指定します。
上記の場合、URLの後ろに/myresと入力した場合、
baseディレクトリにあるリソースを読み込んでレスポンスとして返します。
リソースの位置がwebappsでないだけで、既存webapps配下にあるリソースとまったく同じです。
良い機能ですね。