2.

Apache Tomcat 入門 — Servlet コンテナのバージョン / 構成 / Spring Boot との関係

編集
この記事の要点
  • Apache Tomcat は Java Servlet / JSP を動かすオープンソース Web コンテナ
  • バージョンと Servlet 仕様の対応: Tomcat 8 (Servlet 3.1) / 9 (4.0) / 10 (5.0 = Jakarta EE) / 11 (6.0)
  • Tomcat 10 以降は javax.* → jakarta.* へパッケージ変更(既存アプリの大きな移行ポイント)
  • ディレクトリ: bin/(起動スクリプト)conf/(server.xml/web.xml)webapps/(WAR 配置)logs/
  • Connector: HTTP/1.1 (8080) / AJP (8009) / HTTPS (8443)
  • デプロイは WAR を webapps/ に置く / Manager App で GUI 操作 / CATALINA_OPTS で JVM チューニング

Apache Tomcat とは

Apache Tomcat は Apache Software Foundation が開発するオープンソースの Java Servlet コンテナ。Java の Web 標準仕様(Servlet / JSP / WebSocket / Expression Language)を実装した Web サーバーで、Java の Web アプリケーション (WAR ファイル) を動かす定番ミドルウェアです。

「アプリケーションサーバー」のような Java EE 全機能 (EJB, JMS, JTA) は持たず、Web 層に特化した軽量実装。OSS で無償、商用利用も自由です。

バージョンと Servlet 仕様

TomcatServlet 仕様必要 Javaパッケージ状況
Tomcat 7Servlet 3.0Java 6+javax.servletサポート終了
Tomcat 8.5Servlet 3.1Java 7+javax.servlet2024-03 EOL
Tomcat 9Servlet 4.0Java 8+javax.servlet事実上の標準(既存系)
Tomcat 10Servlet 5.0 (Jakarta EE 9)Java 8+jakarta.servlet移行版
Tomcat 10.1Servlet 6.0 (Jakarta EE 10)Java 11+jakarta.servlet新規推奨
Tomcat 11Servlet 6.1 (Jakarta EE 11)Java 17+jakarta.servlet最新

javax → jakarta 問題

Tomcat 9 までは javax.servlet.*、Tomcat 10 以降は jakarta.servlet.* に名前空間が変わりました。Servlet コードを書き換えるか、変換ツールで一括置換しないと Tomcat 10 で動きません。

// Tomcat 9 まで
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// Tomcat 10 以降
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

既存資産が大量にある場合はTomcat 9 を使い続ける選択肢が現実的。新規は Tomcat 10.1+ を推奨。

インストールとディレクトリ構造

# Linux
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.34/bin/apache-tomcat-10.1.34.tar.gz
tar xzf apache-tomcat-10.1.34.tar.gz
cd apache-tomcat-10.1.34/

# 起動
bin/startup.sh

# 停止
bin/shutdown.sh

# ログ確認
tail -f logs/catalina.out
ディレクトリ役割
bin/startup.sh / shutdown.sh / catalina.sh など起動スクリプト
conf/server.xml / web.xml / context.xml / tomcat-users.xml
webapps/WAR ファイル配置場所。自動展開される
logs/catalina.out / localhost_access_log / catalina.YYYY-MM-DD.log
lib/Tomcat 共通ライブラリ (JDBC ドライバなどを置く)
temp/一時ファイル
work/JSP コンパイル結果

server.xml の主要設定




  

    
    

    
    

    
    
      
        
      
    

    
      
    
  

デプロイ方法

  1. WAR ファイルを webapps/ に配置 → 自動展開(autoDeploy=true)
  2. Manager App から GUI でアップロード → http://localhost:8080/manager/html
  3. Maven / Gradle プラグインmvn tomcat7:deploy
  4. context.xml に Path を記述 → 独自パスに展開
# Manager App を使う場合、conf/tomcat-users.xml に
# 

# CLI から WAR デプロイ
curl -u admin:adminpass -T myapp.war \
    "http://localhost:8080/manager/text/deploy?path=/myapp&update=true"

# アンデプロイ
curl -u admin:adminpass \
    "http://localhost:8080/manager/text/undeploy?path=/myapp"

Tomcat vs Spring Boot Embedded

Spring Boot は Tomcat / Jetty / Undertow を埋め込み (Embedded) で同梱し、java -jar app.jar で起動する単独サーバーとして動かせます。

方式メリットデメリット
Tomcat (Standalone)1 つの Tomcat に複数アプリ同居可。運用ノウハウ豊富環境構築が必要。Tomcat 設定とアプリ設定が分離
Spring Boot EmbeddedJAR 1 つで完結。Docker と相性良いサーバー = アプリ = 1 対 1。Tomcat 共有不可

JVM オプション (CATALINA_OPTS)

# bin/setenv.sh を作成(環境別チューニング推奨方法)
cat > bin/setenv.sh <<'EOF'
export CATALINA_OPTS="-Xms2g -Xmx4g \
    -XX:+UseG1GC \
    -XX:MaxGCPauseMillis=200 \
    -Djava.awt.headless=true \
    -Dfile.encoding=UTF-8 \
    -Duser.timezone=Asia/Tokyo \
    -XX:+HeapDumpOnOutOfMemoryError \
    -XX:HeapDumpPath=/var/log/tomcat/heapdump.hprof"
EOF
chmod +x bin/setenv.sh

# JMX 有効化(監視用)
export CATALINA_OPTS="$CATALINA_OPTS \
    -Dcom.sun.management.jmxremote \
    -Dcom.sun.management.jmxremote.port=9010 \
    -Dcom.sun.management.jmxremote.authenticate=false \
    -Dcom.sun.management.jmxremote.ssl=false"

FAQ

Q: Tomcat 9 から 10 へ移行する手順は
A: Apache Tomcat Migration Tool for Jakarta EE(OSS)を使うと WAR 内の javax.*jakarta.* に一括変換できます。WebSocket / EL / JSF など全標準 API が対象です。

Q: Apache HTTP Server (httpd) と連携する必要はあるか
A: 必須ではありません。Tomcat 単独で HTTPS も提供できます。静的ファイル配信パフォーマンス / 大規模で複雑な VirtualHost が必要な場合のみ httpd + AJP / mod_jk を検討してください。

Q: メモリ不足で OutOfMemoryError が出る
A: -Xmx を増やし、-XX:+HeapDumpOnOutOfMemoryError でヒープダンプを取って Eclipse MAT で解析。WAR のリロードで PermGen / Metaspace が膨らむケースも要注意。

編集
Post Share
子ページ
  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編)
同階層のページ
  1. Apache HTTP Server
  2. Apache Tomcat
  3. Nginx