Apache Tomcatを調べるときは、対応するServlet仕様・Java・アプリの名前空間を先に合わせます。この親ページの下にある子ページから、インストール・起動停止・エラー・設定確認など必要な手順を選んでください。
目的別に子ページから選ぶ
設定変更の前に、対象インスタンス・起動ユーザー・起動方法を記録します。下の例は独立した説明用で、すべてを足せば安全な本番環境が完成するわけではありません。参考: Managerのロール分離、JMXの保護設定、Contextの命名規則、公式移行ツール。
| この記事の要点 |
|
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 仕様
| Tomcat | Servlet 仕様 | 必要 Java | パッケージ | 状況 |
|---|---|---|---|---|
| Tomcat 7 | Servlet 3.0 | Java 6+ | javax.servlet | サポート終了 |
| Tomcat 8.5 | Servlet 3.1 | Java 7+ | javax.servlet | 2024-03 EOL |
| Tomcat 9 | Servlet 4.0 | Java 8+ | javax.servlet | サポート対象。既存javax.servlet系との対応を確認 |
| Tomcat 10.0 | Servlet 5.0 (Jakarta EE 9) | Java 8+ | jakarta.servlet | 2022-10-31サポート終了 |
| Tomcat 10.1 | Servlet 6.0 (Jakarta EE 10) | Java 11+ | jakarta.servlet | サポート対象。アプリとJavaの対応を確認 |
| Tomcat 11 | Servlet 6.1 (Jakarta EE 11) | Java 17+ | jakarta.servlet | サポート対象。Servlet 6.1/Java 17以降 |
javax → jakarta 問題
Tomcat 9 までは javax.servlet.*、Tomcat 10 以降は jakarta.servlet.* に名前空間が変わりました。Servlet等の変更対象APIを使うアプリは移行が必要です。 すべてのjavaxパッケージを機械的にjakartaへ置き換えるのではなく、依存ライブラリ・設定・対象仕様も照合します。変換ツールだけでアプリ全体の互換性が保証されるわけではありません。
// 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;
2026年10月確認時点では9.0/10.1/11.0が公式のサポート対象です。アプリの仕様とJavaに適合する系列の修正版を選び、番号が大きいだけで互換と判断しません。最新の対応/終了状況は公式バージョン表を確認してください。
インストールとディレクトリ構造
次は10.1.34を固定した過去の記録で、現在のダウンロード手順ではありません。 公式の対象系列から修正版と検証用署名/ハッシュを確認します。起動・停止コマンドは稼働系へ影響するため、調査だけの目的では実行しないでください。
# 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配置先。自動配備/展開はHostの設定と起動/稼働中の条件による |
logs/ | catalina.out / localhost_access_log / catalina.YYYY-MM-DD.log |
lib/ | Tomcat 共通ライブラリ (JDBC ドライバなどを置く) |
temp/ | 一時ファイル |
work/ | JSP コンパイル結果 |
server.xml の主要設定
下は説明用の旧設定です。changeme/changeitを実運用で使わず、AJPや管理用の待受を必要なく有効にしないでください。redirectPortだけではHTTPSは有効にならず、TLS証明書とConnectorの設定が必要です。ポート番号は例で、現在の待受を表しません。
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<!-- HTTP コネクタ -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
maxThreads="200"
redirectPort="8443" />
<!-- AJP コネクタ (Apache HTTP Server と連携時) -->
<Connector port="8009" protocol="AJP/1.3"
address="127.0.0.1"
secretRequired="true"
secret="changeme"
redirectPort="8443" />
<!-- HTTPS コネクタ -->
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
SSLEnabled="true" maxThreads="200">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/keystore.jks"
certificateKeystorePassword="changeit"
type="RSA" />
</SSLHostConfig>
</Connector>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true" />
</Engine>
</Service>
</Server>
デプロイ方法
下のManager/curlは保守比較用で、そのまま実行しないでください。 admin/adminpassの固定資格情報、GUIとscriptロールの兼用を推奨しません。公式はCSRF保護のため両ロールを同じ利用者へ与えないことを推奨します。CLIの引数/履歴にも秘密を残さず、管理経路はアクセス制限と適切な暗号化を設計します。deploy/undeployはアプリを変更・削除する操作です。tomcat7:deployも現在の全系列へそのまま使えるとは扱いません。
- WAR ファイルを
webapps/に配置 → 自動展開(autoDeploy=true) - Manager App から GUI でアップロード → http://localhost:8080/manager/html
- Maven / Gradle プラグイン →
mvn tomcat7:deploy - コンテキスト名を設定 → 通常の自動配備ではWAR/XMLのファイル名からパスを決める。アプリ内META-INF/context.xmlのPathで任意に変更する手順ではない
# Manager App を使う場合、conf/tomcat-users.xml に
# <user username="admin" password="adminpass"
# roles="manager-gui,manager-script"/>
# 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は対象バージョンが対応するサーバーを埋め込み (Embedded)で利用できます。対応するTomcat/Jetty等はBootの版と依存構成で確認し、java -jar app.jar で起動する単独サーバーとして動かせます。
| 方式 | メリット | デメリット |
|---|---|---|
| Tomcat (Standalone) | 1 つの Tomcat に複数アプリ同居可。運用ノウハウ豊富 | 環境構築が必要。Tomcat 設定とアプリ設定が分離 |
| Spring Boot Embedded | JAR 1 つで完結。Docker と相性良い | サーバー = アプリ = 1 対 1。Tomcat 共有不可 |
JVM オプション (CATALINA_OPTS)
次の旧例を実環境へコピーしないでください。 特にJMXのauthenticate=false/ssl=falseは認証・暗号化を無効にする設定で、管理ポートをそのまま外部公開してはいけません。監視が不要なら有効化せず、必要なら接続元制限・認証・TLS・権限を別途設計します。catによる既存setenv.shの上書きや、既存CATALINA_OPTSの消去も避けます。固定の2GB/4GBは推奨値ではなく、メモリ上限と計測に合わせます。ヒープダンプは秘密値や大容量データを含み得るため保存権限/容量/取扱いが必要です。
# 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を使う場合も、公式の変換対象と対象系列を確認し、変換後の依存関係・設定・アプリ動作を検証します。全javaxパッケージや全標準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 が膨らむケースも要注意。
- Apache HTTP Server
- Apache Tomcat
- Nginx
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09