tomcatのバージョンを6から7にアップした時の罠を紹介です〜
tomcat7にバージョンアップしてtomcatを起動した時、以下のエラーが発生しました。
致命的: フィルタ requestDumpFilter の起動中の例外です java.lang.ClassNotFoundException: org.seasar.extension.filter.RequestDumpFilter 致命的: フィルタ s2filter の起動中の例外です java.lang.ClassNotFoundException: org.seasar.framework.container.filter.S2ContainerFilter 致命的: フィルタ hotdeployfilter の起動中の例外です java.lang.ClassNotFoundException: org.seasar.framework.container.hotdeploy.HotdeployFilter 致命的: フィルタ encodingfilter の起動中の例外です java.lang.ClassNotFoundException: org.seasar.extension.filter.EncodingFilter 致命的: フィルタ routingfilter の起動中の例外です java.lang.ClassNotFoundException: org.seasar.struts.filter.RoutingFilter
ClassNotFoundException系は、MavenのDependenciesとWEB-INF/libが
共存している時によく見る光景ですが、今回は違いました。
エラーも警告も出ません。ちゃんとビルドパス上に正しくseasar系のjarはあります。
tomcat6の時のjar構成と比較してみたりしても、一向に原因が解りません。
そこでふと気づいたのです。なんかweb.xmlの書き方が違うと。
Doltengでプロジェクトを自動生成してweb.xmlも自動生成されたものを使ってましたが、
どうもこのweb.xmlがおかしい。
よくみてみると、DTDのバージョン指定が2.4になっていました。
tomcat6はservlet2.4、tomcat7はservlet3.0、なので、
旧式のweb.xmlを新式のサーブレットコンテナが読み込めず、
ClassNotFoundになっていたようです。
ちょっとはまったので、バージョンアップ時はweb.xmlに注意が必要ですね。