scalatraで404や500のエラーページをカスタマイズする方法

ちょっとハマったのでメモがてら。

 

scalatraで例外とかだすと、スタックトレース満載のエラー画面になって大変便利です。
でも、この状態でサービスインするとクラッカーの皆さんにも大変便利、というか普通に恥ずいw

なので、エラー画面を変更しようと思い、Servletのお作法に従って、下記のようにweb.xmlに追記.

    
        <error-page>
		<error-code>500</error-code>
		<location>/error/500.html</location>
	</error-page>
</web-app>

まあ、よくある感じの書き方だと思います。だが、画面は変わらず...

なんでだろ、とチュートリアルを見てみたところデフォルトはデバックモードになっていて、フィルタで書き換えてるみたいですね。エラーページ。なので、ドキュメントに従い下記のようにweb.xmlにproductionに変更しました。

    <servlet>
		<servlet-name>scalate</servlet-name>
		<servlet-class>cn.orz.pascal.ebooksearch.web.WebFront</servlet-class>
		<init-param>
			<param-name>org.scalatra.environment</param-name>
			<param-value>production</param-value>
		</init-param>
	</servlet>

これで、晴れてerror-pageで指定したページに飛びました。

ちなみに余談ですがscalatraがデバックモードか否かはisDevelopmentModeメソッドで判定できます。ScalatraServletやScalatraFilterを継承してれば使えるので、割と便利かもです。

しかし、productionとdevelopmentの切り替えで毎回web.xmlを書きなおすのは面倒。sbtでmavenのprofileみたいな仕組みを何とかして作るしか無いなぁ。やっぱ。