詳解 Tomcat

[cover photo]
TOPICS
Java
発行年月日
PRINT LENGTH
460
ISBN
978-4-87311-705-8
FORMAT
Print PDF
Ebook
5,060円
Ebookを購入する
Print
5,060円

本書は根強い人気を誇るJavaアプリケーションサーバ、Tomcatについて解説したものです。日本人唯一のTomcat PMC(プロジェクト管理委員会)メンバーであり、アクティブコミッタである藤野圭一氏による執筆で、Tomcatの機能や使い方についてだけでなく、アーキテクチャについても踏み込んで詳しく解説することで、さらに深い理解を促し、中上級者が自分で機能を拡張してカスタマイズできるような情報も提供します。最新バージョンTomcat 8に対応した唯一無二の書籍です。

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

第2刷正誤表


※2019年4月更新。3刷で修正済みです。

■p.xix 9.2.14
【誤】9.2.14 Welcomeファイル処理
【正】9.2.14 welcomeファイル処理

■p.12 下から4行目
【誤】読込み
【正】読み込み

■p.28 下から5行目
【誤】(Bacic)
【正】(Basic)

■p.57 8行目
【誤】ハードコード
【正】ハードコーディング

■p.65 2行目
【誤】ハードコード
【正】ハードコーディング

■p.145 図5-4
【誤】Pooler
【正】Poller

■p.145 2行目
【誤】待ち合せ
【正】待ち合わせ

■p.147 図5-6
【誤】Pooler
【正】Poller

■p.171 脚注
【誤】振舞う
【正】振る舞う

■p.187 11行目
【誤】組合せ
【正】組み合わせ

■p.212 3行目
【誤】後ほどで
【正】後程

■p.222 16行目
【誤】ハードコード
【正】ハードコーディング

■p.239 下から3行目
【誤】いなけれなりません
【正】いなければなりません

■p.271 15、20行目
【誤】読込ま
【正】読み込ま

■p.292 8、9行目
【誤】Welcome
【正】welcome

■p.335 下から16行目
【誤】組合せ
【正】組み合わせ

■p.405 下から7行目
【誤】組合わせ
【正】組み合わせ

■p.405 下から3行目
【誤】9.2.14 Welcomeファイル処理
【正】9.2.14 welcomeファイル処理

■p.406 下から8行目
【誤】もっている
【正】持っている

■p.407 下から12行目
【誤】まったく
【正】全く

目次

目次
はじめに

1章 Tomcatとは

2章 Tomcatの基本
    2.1 インストール
        2.1.1 JDKのインストール
        2.1.2 Tomcatのダウンロード
        2.1.3 Tomcatのインストール
            2.1.3.1 Linuxでのインストール
            2.1.3.2 Windowsでのインストール
    2.2 ディレクトリ構成
    2.3 Tomcatの起動
        2.3.1 Tomcat制御スクリプト
            2.3.1.1 setenvスクリプト
        2.3.2 環境変数
            2.3.2.1 CATALINA_HOMEとCATALINA_BASE

3章 アーキテクチャ
    3.1 Tomcatのアーキテクチャ
    3.2 Catalinaアーキテクチャ
        3.2.1 各コンポーネント解説
            3.2.1.1 Server
            3.2.1.2 Service
            3.2.1.3 Connector
            3.2.1.4 Engine
            3.2.1.5 Host
            3.2.1.6 Context
            3.2.1.7 Wrapper
            3.2.1.8 コンテナコンポーネント
        3.2.2 リクエスト処理パイプライン
            3.2.2.1 Valveとは
            3.2.2.2 Pipelineとは
            3.2.2.3 リクエスト処理パイプライン
    3.3 ライフサイクルアーキテクチャ
        3.3.1 ライフサイクルアーキテクチャとCatalinaアーキテクチャの構成
        3.3.2 ライフサイクルリスナ
        3.3.3 ライフサイクルリスナの設定方法
    3.4 Tomcatクラスローダ
        3.4.1 Tomcatクラスローダ階層
        3.4.2 検索の優先順位

4章 基本機能
    4.1 Valveとは
        4.1.1 ValveとServlet Filter
        4.1.2 カスタムValveの作成
        4.1.3 Tomcatで提供しているValve実装クラス
            4.1.3.1 AccessLogValve
            4.1.3.2 CrawlerSessionManagerValve
            4.1.3.3 ErrorReportValve
            4.1.3.4 RemoteAddrValveとRemoteHostValve
            4.1.3.5 RemoteIpValve
            4.1.3.6 SemaphoreValve
            4.1.3.7 StuckThreadDetectionValve
            4.1.3.8 RewriteValve
            4.1.3.9 認証Valve
        4.1.4 Tomcatで提供しているFilter実装クラス
    4.2 ロギング
        4.2.1 ClassLoaderLogManager
        4.2.2 ログレベル
        4.2.3 Handler
            4.2.3.1 org.apache.juli.FileHandler
            4.2.3.2 org.apache.juli.AsyncFileHandler
        4.2.4 Formatter
        4.2.5 Log4Jでのロギング
    4.3 セッション管理
        4.3.1 セッションについて
        4.3.2 Tomcatのセッション管理
            4.3.2.1 JSESSION Cookieコンフィグレーション
            4.3.2.2 セッションライフサイクルとセッションリスナ
            4.3.2.3 セッションマネージャとクラス構成
            4.3.2.4 標準セッションマネージャ(org.apache.catalina.session.StandardManager)
            4.3.2.5 パーシステンスマネージャ
    4.4 認証機能
        4.4.1 Tomcatのコンテナ管理セキュリティ
            4.4.1.1 認証機能
            4.4.1.2 Realm機能
            4.4.1.3 パスワードのダイジェスト化
        4.4.2 Servlet APIによる認証
        4.4.3 シングルサインオン
            4.4.3.1 シングルサインオンのログアウト
            4.4.3.2 Tomcatのシングルサインオンの制約
    4.5 自動デプロイメント
        4.5.1 用語
        4.5.2 自動デプロイメントに関連するHostとContextの属性
        4.5.3 Tomcat起動時のデプロイ
            4.5.3.1 Contextディスクリプタによるデプロイ
            4.5.3.2 WARファイルによるデプロイ
            4.5.3.3 ディレクトリによるデプロイ
            4.5.3.4 2回目以降のデプロイの注意点
        4.5.4 ホットデプロイ
            4.5.4.1 デプロイ
            4.5.4.2 リデプロイ/アンデプロイ
            4.5.4.3 ContextディスクリプタによってデプロイされたWebアプリケーションのリデプロイ
            4.5.4.4 WARファイルによってデプロイされたWebアプリケーションのリデプロイ
            4.5.4.5 ディレクトリによってデプロイされたWebアプリケーションのリデプロイ
            4.5.4.6 リロード
    4.6 Jasper
        4.6.1 Jasperコンパイルオプション
            4.6.1.1 JSPの更新チェック
            4.6.1.2 JSPの監視
        4.6.2 org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER
    4.7 監視および管理機能
        4.7.1 管理機能
            4.7.1.1 Managerアプリケーション
            4.7.1.2 HTMLManager
            4.7.1.3 (Text-base)Manager
            4.7.1.4 Server Status
            4.7.1.5 JMXProxy
            4.7.1.6 Host-Manager
            4.7.1.7 HTMLHostManager
            4.7.1.8 管理アプリケーションの仕組み
        4.7.2 Tomcatのリソース監視
            4.7.2.1 TomcatのMBean登録
            4.7.2.2 Tomcatの内部コンポーネントのMBean
            4.7.2.3 カスタムコンポーネントのMBean

5章 応用機能
    5.1 Connector
        5.1.1 Connectorのアーキテクチャ
            5.1.1.1 ProtocolHandler
            5.1.1.2 Endpoint
            5.1.1.3 ConnectionHandler
            5.1.1.4 リクエストプロセッサ
            5.1.1.5 CoyoteAdapter
        5.1.2 リクエスト処理詳細
            5.1.2.1 Endpointによる接続受付処理
            5.1.2.2 ConnectionHandlerによるリクエスト処理
            5.1.2.3 Pollerのタイムアウト処理
    5.2 クラスタリング
        5.2.1 クラスタリングとは
            5.2.1.1 パフォーマンスの向上
            5.2.1.2 可用性の向上
        5.2.2 Tomcatのクラスタリング
            5.2.2.1 クラスタメンバシップ
            5.2.2.2 Tomcatクラスタのロードバランス
            5.2.2.3 セッションレプリケーション
            5.2.2.4 アーキテクチャ
        5.2.3 セッションレプリケーション
            5.2.3.1 レプリケーション方式
            5.2.3.2 セッションレプリケーション利用時の制約
            5.2.3.3 クラスタセッションマネージャ
            5.2.3.4 クラスタセッションマネージャの設定方法
            5.2.3.5 セッションクラス
            5.2.3.6 差分レプリケーション
            5.2.3.7 セッションの差分情報の登録
            5.2.3.8 差分レプリケーションのタイミング
            5.2.3.9 DeltaManager
            5.2.3.10 BackupManager
        5.2.4 Channelとは
            5.2.4.1 Channelインスタンス
            5.2.4.2 ChannelCoordinator
            5.2.4.3 MembershipService
            5.2.4.4 MembershipListener
            5.2.4.5 ChannelSender
            5.2.4.6 ChannelReceiver
            5.2.4.7 ChannelListener
            5.2.4.8 ChannelInterceptor
        5.2.5 クラスタその他機能
            5.2.5.1 JvmRouteBinderValveによるセッションID書き換え
            5.2.5.2 ClusterDeployerによるクラスタ間のWARデプロイ
    5.3 Tomcat JDBC Connection Pool
        5.3.1 利用方法
        5.3.2 設定パラメータ
            5.3.2.1 基本のパラメータ
            5.3.2.2 コネクションプールに関するパラメータ
            5.3.2.3 コネクション検証に関するパラメータ
            5.3.2.4 PoolCleanerに関するパラメータ
            5.3.2.5 その他のパラメータ
        5.3.3 JDBC-Poolの拡張機能
            5.3.3.1 コネクションのパージ機能
            5.3.3.2 JMXサポート
            5.3.3.3 JdbcInterceptor
    5.4 WebSocket
        5.4.1 WebSocketとは
        5.4.2 Java WebSocket API
            5.4.2.1 javax.websocket.Endpoint
            5.4.2.2 javax.websocket.Session
            5.4.2.3 javax.websocket.MessageHandler
            5.4.2.4 javax.websocket.RemoteEndpoint
            5.4.2.5 javax.websocket.WebSocketContainer
            5.4.2.6 javax.websocket.server.ServerEndpointConfig
            5.4.2.7 javax.websocket.server.ServerApplicationConfig
            5.4.2.8 アノテーションを使用したEndpoint
        5.4.3 TomcatのWebSocket
        5.4.4 クラス構成
        5.4.5 WebSocketの処理フローの解説
            5.4.5.1 WebSocketコンテナの初期化
            5.4.5.2 リクエスト受け付けからUpgradeするまでの処理
            5.4.5.3 WebSocketリクエスト処理(メッセージ受信:OnMessage)
            5.4.5.4 WebSocketリクエスト処理(メッセージ送信)
    5.5 Parallel deployment
        5.5.1 Parallel deploymentによるWebアプリケーションのバージョン管理
        5.5.2 リクエストとコンテナのマッピング
            5.5.2.1 Mapperコンポーネント
            5.5.2.2 リクエストとコンテナのマッピング
            5.5.2.3 Parallel deployment時のマッピング
    5.6 メモリリーク防止と検知
        5.6.1 クラスローダのメモリリーク
        5.6.2 メモリリークの防止と検知
            5.6.2.1 Webアプリケーションクラスローダによる参照クリア
            5.6.2.2 ThreadLocalLeakPreventionListenerによるThreadLocalリークの防止
            5.6.2.3 JREMemoryLeakPreventionListenerによるWebアプリケーションクラスローダのリークの防止
            5.6.2.4 Hostによるメモリリーク検知

6章 Apache―Tomcat連携
    6.1 Apache HTTP Serverと Tomcatの連携
    6.2 mod_jkとは
        6.2.1 CPing/CPong
        6.2.2 コネクションプーリング
        6.2.3 ロードバランス
        6.2.4 スティッキーセッション
        6.2.5 リトライ
        6.2.6 workerの状態遷移
        6.2.7 メンテナンス
        6.2.8 その他機能
            6.2.8.1 uriworkermap
            6.2.8.2 ドメインクラスタリング
            6.2.8.3 Status Worker

7章 セキュリティ対策
    7.1 Tomcatのセキュリティ対策全般
    7.2 Tomcatのセッション固定攻撃対策
    7.3 CSRFプロテクション
        7.3.1 CsrfPreventionFilterの仕組み
    7.4 SSL情報の伝搬
        7.4.1 Apache(mod_jk)の設定で対策する場合
        7.4.2 Tomcat(Connector)の設定で対策する場合

8章 コンフィグレーションリファレンス
    8.1 server.xml
        8.1.1 Server
        8.1.2 Service
        8.1.3 Executor
        8.1.4 Connector(HTTP/AJP)
        8.1.5 Engine
        8.1.6 Host
        8.1.7 Context
            8.1.7.1 ネストエレメント
            8.1.7.2 Contextパラメータ
            8.1.7.3 Environmentエントリ
            8.1.7.4 Resource定義
        8.1.8 Global Resources
            8.1.8.1 Environmentエントリ
            8.1.8.2 Resource定義
        8.1.9 JarScanner
        8.1.10 JarScanFilter
        8.1.11 Listeners
            8.1.11.1 APR Lifecycle Listener ― org.apache.catalina.core.AprLifecycleListener
            8.1.11.2 JRE Memory Leak Prevention Listener ― org.apache.catalina.core.JreMemoryLeakPreventionListener
            8.1.11.3 Security Lifecycle Listener ― org.apache.catalina.security.SecurityListener
            8.1.11.4 ThreadLocalLeakPreventionListener ― org.apache.catalina.core.ThreadLocalLeakPreventionListener		
            8.1.11.5 UserConfig ― org.apache.catalina.startup.UserConfig
            8.1.11.6 JMX Remote Lifecycle Listener ― org.apache.catalina.mbeans.JmxRemoteLifecycleListener
        8.1.12 Loader
        8.1.13 Manager
            8.1.13.1 ネストエレメント
            8.1.13.2 すべてのManagerのネストエレメント
            8.1.13.3 PersistentManagerのネストエレメント
        8.1.14 Realm
            8.1.14.1 JDBC Realm ― org.apache.catalina.realm.JDBCRealm
            8.1.14.2 DataSource Realm ― org.apache.catalina.realm.DataSourceRealm
            8.1.14.3 JNDI Directory Realm ― org.apache.catalina.realm.JNDIRealm
            8.1.14.4 UserDatabase Realm ― org.apache.catalina.realm.UserDatabaseRealm
            8.1.14.5 Memory Based Realm ― org.apache.catalina.realm.MemoryRealm
            8.1.14.6 JAAS Realm ― org.apache.catalina.realm.JAASRealm
            8.1.14.7 Combined Realm ― org.apache.catalina.realm.CombinedRealm
            8.1.14.8 LockOut Realm ― org.apache.catalina.realm.LockOutRealm
            8.1.14.9 ネストエレメント
        8.1.15 Resources
            8.1.15.1 PreResources
        8.1.16 Valve
            8.1.16.1 Access Log Valve
            8.1.16.2 Extended Access Log Valve
            8.1.16.3 Remote Address Valve
            8.1.16.4 Remote Host Valve
            8.1.16.5 Remote IP Valve
            8.1.16.6 SSL Valve
            8.1.16.7 SingleSignOnValve
            8.1.16.8 Basic Authenticator Valve
            8.1.16.9 Digest Authenticator Valve
            8.1.16.10 Form Authenticator Valve
            8.1.16.11 SSL Authenticator Valve
            8.1.16.12 SPNEGO Valve
            8.1.16.13 Crawler Session Manager Valve
            8.1.16.14 Stuck Thread Detection Valve
            8.1.16.15 SemaphoreValve
        8.1.17 Cluster要素
            8.1.17.1 ClusterManager
            8.1.17.2 Channel
            8.1.17.3 Membership
            8.1.17.4 Sender
            8.1.17.5 Receiver
            8.1.17.6 Interceptor
            8.1.17.7 ClusterValve
            8.1.17.8 ClusterDeployer
    8.2 web.xml
        8.2.1 Filters
            8.2.1.1 Add Default Character Set Filter ― org.apache.catalina.filters.AddDefaultCharsetFilter
            8.2.1.2 CORS Filter ― org.apache.catalina.filters.CorsFilter
            8.2.1.3 CSRF Prevention Filter ― org.apache.catalina.filters.CsrfPreventionFilter
            8.2.1.4 Expires Filter ― org.apache.catalina.filters.ExpiresFilter
            8.2.1.5 Remote Address Filter ― org.apache.catalina.filters.RemoteAddrFilter
            8.2.1.6 Remote Host Filter ― org.apache.catalina.filters.RemoteHostFilter
            8.2.1.7 Remote IP Filter ― org.apache.catalina.filters.RemoteIpFilter
            8.2.1.8 Set Character Encoding Filter ― org.apache.catalina.filters.SetCharacterEncodingFilter
    8.3 システムプロパティ
    8.4 mod_jkコンフィグレーション
        8.4.1 workers.properties
        8.4.2 mod_jk.conf
            8.4.2.1 ログ関連コンフィグレーション
            8.4.2.2 Forwarding関連ディレクティブ(JkOptions)

9章 マイグレーションガイド
    9.1 Tomcat7.0から8.0へのマイグレーション
        9.1.1 JavaAPI関連
            9.1.1.1 Java7必須
            9.1.1.2 非推奨API
            9.1.1.3 Servlet 3.1 API
        9.1.2 デフォルトコネクタ
        9.1.3 DBCPバージョンアップ
        9.1.4 Web Application Resources
        9.1.5 セッションID変更
        9.1.6 Debug用ポート
        9.1.7 内部APIの変更
        9.1.8 SessionIdGeneratorの追加
        9.1.9 CredentialHandlerの追加
    9.2 Tomcat6.0から7.0へのマイグレーション
        9.2.1 JavaAPI関連
            9.2.1.1 Java6必須
            9.2.1.2 非推奨API
            9.2.1.3 Servlet 3.0 API
        9.2.2 正規表現
        9.2.3 デプロイメント
        9.2.4 Managerアプリケーション
        9.2.5 Host Managerアプリケーション
        9.2.6 セッションマネージャコンフィグレーション
        9.2.7 Session Cookieコンフィグレーション
        9.2.8 Cookies
        9.2.9 Request属性
        9.2.10 Comet
        9.2.11 XMLバリデーション
        9.2.12 システムプロパティ
        9.2.13 conf/web.xmlファイル処理
        9.2.14 Welcomeファイル処理
        9.2.15 アノテーションスキャン
        9.2.16 TLD処理
        9.2.17 内部API
        9.2.18 JSPコンパイラ
        9.2.19 その他注意点
            9.2.19.1 コネクタとスレッドプール
            9.2.19.2 アクセスログ
            9.2.19.3 レルム
            9.2.19.4 セッションの最終アクセス時間
            9.2.19.5 ライフサイクルリスナ
            9.2.19.6 クラスタ
            9.2.19.7 Valve
            9.2.19.8 スレッドローカル削除
            9.2.19.9 クラスローダの優先順位

10章 ソースコードリーディング
    10.1 ソースコードのダウンロード
        10.1.1 ソースコードの構成
    10.2 ソースコードからのビルド
        10.2.1 JDKのインストール
        10.2.2 Antのインストール
        10.2.3 Tomcatのビルド
    10.3 リモートデバッグ
        10.3.1 JPDAモードでのTomcat起動
        10.3.2 Eclipseによるリモートデバッグ
        10.3.3 パッケージの説明

付録A Tomcatコミュニティ
    Apache Software Foundation(ASF)
    Tomcatコミュニティ

索引