文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

tomcat起動時にseasarのFilter系が全てClassNotFoundになる罠

tomcatのバージョンを6から7にアップした時の罠を紹介です〜


f:id:treeapps:20180426142529p:plain

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に注意が必要ですね。