読者です 読者をやめる 読者になる 読者になる

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

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

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

java tomcat

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

Jakarta Tomcatエキスパートガイド―Webアプリケーションのための環境構築

Jakarta Tomcatエキスパートガイド―Webアプリケーションのための環境構築

  • 作者: アミツト・バコレ,中川和夫,Ja-Jakarta
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2003/08
  • メディア: 単行本
  • 購入: 2人 クリック: 23回
  • この商品を含むブログ (14件) を見る

Tomcatハンドブック 第2版

Tomcatハンドブック 第2版