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みたいな仕組みを何とかして作るしか無いなぁ。やっぱ。