内容紹介
最新バージョンTomcat 8に対応した、Tomcatの機能を網羅した解説書!
Javaアプリケーションサーバで根強い人気を誇るTomcatの解説書。本書は、日本人唯一のTomcatコミッタである藤野圭一氏による執筆で、Tomcatの機能を網羅しています。使い方はもちろんのこと、アーキテクチャについても踏み込んで解説することでさらに深い理解を促し、中上級者が自分で機能を拡張してカスタマイズできるような情報も提供します。新バージョンTomcat 8に対応した唯一無二の書籍です。
このような方におすすめ
iPhone/iPadアプリ開発者(デザイナー、プログラマー、マネージャー、マーケッター)
目次
詳細目次
はじめに
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コミュニティ
索引
続きを見る