書いているうちに、このエントリ読んでて面白いのか?って疑問が出てきましたが、「How Tomcat Worksを読んだ人」にとってはまとめ的なものとして、「How Tomcat Worksを読んでない人」にとっては手軽にTomcatの概観がつかめるようなエントリに、という方針で行くことにしました。
Chapter 3 : Connector
Tomcatの肝のひとつ、Connectorです。TomcatでトラブるときってたいがいConnector周りのような気がします。
ここまでHttpServerとして実装してきた部分が
- HttpConnector
- ServerSocketで接続を受け付ける。接続したらSocketをHttpProcessorに渡す
- HttpProcessor
- Socketを受け取りRequestとResponseを作成する
- ServletProcessor
- Request、Responseを受け取りServletに処理をさせる
というパートに分かれます。
HttpProcessorはHttpConnectorのヘルパークラスという位置づけなので、HttpConnectorとHttpProcessorを合わせて「Connector」と考えます。ServletProcessorは後の章で「Container」に変わります。「Connector」+「Container」がTomcatなのです。
本の冒頭に「Tomcatってこんなにシンプルなんだぜ」といわんばかりにこのクラス図が載っているんですが、ウソでは無いにせよ、このインターフェースの具象クラスのほうを掘り下げないと全然ワカランって。個人的には「server.xmlがTomcatのクラス構造をそのまま表している」という事実自体がTomcatのアーキテクチャの特徴だと思います。その辺はまた後ほど。
Chapter 4 : Tomcat Default Connector
Chapter3で概念が分かったら、実際にTomcatで使用されているHttpConnectorを見ていきます。Default Connectorと銘打っていますが、既にデフォルトはCoyoteConnectorでした。残念。しかも同じCoyoteConnectorでもプロトコルハンドラによって大幅に処理が変わります。そこらへんはこの本ではカバーされないのですが、欲しかったな。JKとかコード読みにくくてうんざりです。Tomcat6のAJP Connectorはよさげですが。
さて、この章ではリクエストラインやHTTPヘッダのパース、HttpProcessorインスタンスをプールしてマルチスレッドで処理、といったところを解説。さして難しくないです。