Velocityテンプレートの置き場所を指定する

VelocityViewServletでテンプレートの置き場所を指定する方法。

velocity.propertiesに

webapp.loader.resource.path = /WEB-INF/template/

とするとテンプレートは /WEB-INF/template 以下から取得されるようになる。 http://localhost:8080/context-path/hoge/fuga.vm へアクセスすれば /WEB-INF/template/hoge/fuga.vm が読み込まれるし、サーブレットからフォワードする時の指定も /hoge/fuga.vm でいい。

注意点は

velocimacro.library = /WEB-INF/VM_global_library.vm

このファイルも webapp.loader.resource.path に指定した場所から以下から探すので読み込まれなくなってしまう。 /WEB-INF/hogehoge/ 以下に移動するか、リソースを探すパスを追加する。

パスを追加するには、

webapp.loader.resource.path = . , WEB-INF/hogehoge/

カンマ区切りでテンプレートを探す基準のパスをいくつでも指定できる。このパスはウェブアプリのdocBaseからの相対パス。../hoge のようなdocBaseの外に出るような指定はできない。ServletContext#getResourceAsStreamを使ってロードしているので、サーブレットエンジンの実装によっては外に出れるかもしれないがTomcatはダメ。