5.

Tomcat エラー一覧|起動失敗 / 404 / Servlet マッピング / 文字化け対処入口

編集
この記事の要点
  • Tomcat 関連のエラー一覧入口ページ
  • カテゴリ: ビルド/コンパイル時 / 起動失敗 / ランタイム / クラス解決 / アクセス制御
  • 切り分け順: catalina.out 確認 → Eclipse 由来か Tomcat 由来か → バージョン整合 → WAR 配置
  • 頻出: InstanceManager / build-path / 404 / port 8080 already in use / OutOfMemoryError
  • 子ページから個別エラーを選択

Tomcat エラーの種類

種類典型例主な原因
ビルド/コンパイル時org.apache.tomcat.InstanceManager not found / ビルドパス不完全Eclipse のターゲットランタイム未設定
起動失敗Address already in use: bind / Failed to startポート競合 / 既存プロセス / 設定不正
クラス解決ClassNotFoundException / NoClassDefFoundErrorlib jar 不足 / 依存衝突
HTTP エラー404 Not Found / 500 Internal Server Errorマッピング不正 / コード例外
メモリjava.lang.OutOfMemoryError / Metaspace-Xmx 不足 / メモリリーク
WAR 配置モジュール名が無効 / WAR が展開されない動的 Web ファセット未設定 / packaging 不一致
文字コード日本語文字化け / ???? 表示URIEncoding / 文字エンコーディング設定

切り分けの起点: catalina ログ

Tomcat エラーは大半が catalina.out または catalina.YYYY-MM-DD.log に出ます:

# 標準的なログ場所
$CATALINA_HOME/logs/
├── catalina.out                 ← 標準出力 / エラー出力(最重要)
├── catalina.2024-05-15.log      ← Tomcat 自身のログ
├── localhost.2024-05-15.log     ← Web アプリのデプロイ・初期化ログ
├── manager.2024-05-15.log       ← Manager アプリのログ
├── host-manager.2024-05-15.log
└── localhost_access_log.2024-05-15.txt   ← アクセスログ

# リアルタイム監視
tail -f $CATALINA_HOME/logs/catalina.out

# エラーだけ抽出
grep -iE "(error|exception|severe)" $CATALINA_HOME/logs/catalina.out | tail -50

# Docker の場合
docker logs -f tomcat-container

頻出エラー Top 10 と対処

エラー原因対処
java.net.BindException: Address already in useポート 8080 が他プロセスで使用中netstat -ano \| findstr 8080 で確認 / 別ポートに変更
org.apache.tomcat.InstanceManager not foundEclipse のターゲットランタイム未設定プロパティ → ターゲットランタイムで Tomcat にチェック
HTTP Status 404 - Not Foundコンテキストパス / サーブレットマッピング違いweb.xml と @WebServlet の URL パターン確認
java.lang.OutOfMemoryError: Java heap spaceヒープ不足setenv.sh-Xmx2g 指定
java.lang.OutOfMemoryError: Metaspaceクラスロード過多(hot deploy で増える)-XX:MaxMetaspaceSize=512m
ClassNotFoundExceptionlib に jar が無い / 依存解決失敗WEB-INF/lib に jar を配置 or pom.xml 修正
java.lang.IllegalStateException: getOutputStream() has already been calledgetWriter と getOutputStream の混在どちらかに統一
The requested resource is not availableWAR がデプロイされていないwebapps/ に配置 or manager で deploy
org.apache.catalina.core.StandardContext.startInternal Errorアプリ初期化失敗localhost ログでスタックトレース確認
java.io.UnsupportedEncodingException: ${file.encoding}変数展開が失敗setenv.sh の構文ミス確認

調査フローチャート

  1. catalina.out をスクロールして最新のエラーを確認
  2. スタックトレースの Root Cause(Caused by:)を探す
  3. エラーメッセージの固有部分でこの Wiki / Google 検索
  4. 環境問題か、コード問題かを見極める
    • 環境: ポート / 設定ファイル / ライブラリ → Tomcat / OS の確認
    • コード: アプリ起動時 → アプリのロジック修正
  5. Tomcat バージョンを確認(Servlet API のバージョン整合性)
  6. 必要なら WAR 再ビルド・再配置でクリーンに

Tomcat バージョンと Servlet API

TomcatServlet APIパッケージJDK 最低
7.03.0javax.servletJDK 6+
8.53.1javax.servletJDK 7+
9.04.0javax.servletJDK 8+
10.0 / 10.15.0 / 6.0jakarta.servletJDK 8 / 11+
11.06.1jakarta.servletJDK 17+

Tomcat 10 でパッケージが javaxjakarta に変更。古いコードを Tomcat 10 にデプロイすると ClassNotFoundException 連発するので注意。

関連子ページ

  • InstanceManager クラスが見つかりません
  • 型 InstanceManager を解決できません
  • ビルド・パスが不完全です
  • モジュール名が無効です (WAR エクスポート)
  • サーバとプロジェクトの紐付け
  • Tomcat プロジェクトのディレクトリ構成

各エラーの詳細は子ページを参照してください。一般的な調査の起点は本ページのフローチャートです。

編集
Post Share
子ページ
  1. ビルド・パスが不完全であるため、プロジェクトはビルドされませんでした。org.apache.tomcat.InstanceManager のクラス・ファイルが見つかりません。ビルド・パスを修正してから、プロジェクトの取り消しおよび再ビルドを行ってください。
  2. 型 org.apache.tomcat.InstanceManager を解決できません。必要な .class ファイルから間接的に参照されています
  3. 要求されたリソースへのアクセスが拒否されました
同階層のページ
  1. tomcatインストール(CentOS)
  2. WARファイルのAutoDeploy設定
  3. tomcatの起動/停止(Linux, Mac)
  4. JRE(JVM)のJavaのバージョン確認方法
  5. エラー一覧
  6. CATALINA_HOMEの確認方法(Linux, Mac)
  7. 管理画面の開き方
  8. tomcatの起動確認方法
  9. tomcatの起動/停止ログとcatalina.log/catalina.outの違い
  10. CentOSにおけるポート開放方法
  11. Javaのバージョン変更方法(Mac編)