詳解 Tomcat

[cover photo]
  • 2014年12月 発行
  • 460ページ
  • ISBN978-4-87311-705-8
  • フォーマット Print PDF

オライリー・ジャパンで書籍を購入:
定価4,968円

Ebook Storeで電子版を購入:
価格3,974円

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

関連書籍

Head First Java 第2版
Javaによる関数型プログラミング
Tomcatハンドブック 第2版

目次
はじめに

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コミュニティ

索引

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]