How Tomcat Works その2

書いているうちに、このエントリ読んでて面白いのか?って疑問が出てきましたが、「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.xmlTomcatのクラス構造をそのまま表している」という事実自体がTomcatアーキテクチャの特徴だと思います。その辺はまた後ほど。

Chapter 4 : Tomcat Default Connector

Chapter3で概念が分かったら、実際にTomcatで使用されているHttpConnectorを見ていきます。Default Connectorと銘打っていますが、既にデフォルトはCoyoteConnectorでした。残念。しかも同じCoyoteConnectorでもプロトコルハンドラによって大幅に処理が変わります。そこらへんはこの本ではカバーされないのですが、欲しかったな。JKとかコード読みにくくてうんざりです。Tomcat6のAJP Connectorはよさげですが。
さて、この章ではリクエストラインやHTTPヘッダのパース、HttpProcessorインスタンスをプールしてマルチスレッドで処理、といったところを解説。さして難しくないです。