How Tomcat Works その1

結構前に読んだ本なんですが、ブログに書こうと思ったまま忘れていたので復習がてらレビュー。

ServerSocketのみの単なるHTTPサーバが章を追う毎にパワーアップして行き、ついにはTomcatになる!というイカした構成。ミドルウェアアーキテクチャをしっかり解説した本は少ないと思うので、お薦めです。テンポも良い感じです。興味の無い機能は飛ばして読めるし。が!

気付いたら買った版は絶版になってました。新版(おそらくTomcat6対応)のリリース日は延々と延期されています。
http://www.amazon.co.jp/How-Tomcat-Works-Developing-Container/dp/097521280X/ref=sr_1_2?ie=UTF8&s=english-books&qid=1206967376&sr=8-2
http://www.amazon.com/How-Tomcat-Works-Developing-Container/dp/0975212842/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1206967420&sr=8-1

PDFなら買えるみたい
http://books.brainysoftware.com/index.jsp?show=tomcat

Chapter 1 : A Simple Web Servlet

まずはServerSocketで口を開けます。接続をacceptしたら、inputStreamをRequetsオブジェクト、outputStreamをResponseオブジェクトにセットします。HTTPリクエストからURIをパースして、ファイルシステムのファイルをちゃんと返します。
おおーこんなところから真面目にスタートですよ。ドキドキしますね。
http://books.brainysoftware.com/index.jsp?show=tomcat
からソースコードはダウンロードできますが、ダウンロードしたり、本のコードを書き写したりせず、ちらっと見てから勘で自作すると勉強になる気がします。

Chapter 2 : A Simple Servlet Container

はやくもServletです。配置されたServletクラスをクラスローダで動的にロードし、serviceメソッドを実行、という流れ。
ここの目玉はURLClassLoaderでしょうか。アプリサーバのユーザとしてクラスローダを知っている人は多いと思いますが、一度はクラスローダをnewしてloadClassする体験をしてみてはいかがでしょう。
それからここに来てjavax.servlet.Servlet,javax.servlet.ServletRequest,javax.servlet.ServletResponseが登場。これらをちゃんとimplementsすることで、Servlet仕様に則ったサーブレットが動くコンテナが作れるのです。
さらにRequestFacade,ResponseFacadeも登場。アプリのデバッグ時に見かけてなんだこれ?って思っていた人もいるかもしれません。Request,Responseオブジェクトのいくつかのメソッドを、アプリ開発者から隠蔽するためのFacadeで、Servletにはこれが渡されます。