Servletのライフサイクルについて
ライフサイクルとは文字通り、インスタンスの生成から消滅に至るまでの流れを指します。Servletは前述の通り、最初にインスタンス生成が要求された場合のみインスタンス化されます。その際、initメソッドが呼び出され初期化処理が実行されます。最初のみ特定の処理を行うにはinitメソッドを記述する必要があります。2回目以降にServletのインスタンス生成が要求される場合、スレッドが生成されるか、スレッドプールが有効な場合、あらかじめ生成されたスレッドプールからスレッドが取り出されます。2回目以降はinitメソッドは呼び出されません。ブラウザからHttp GetまたはPostタイプのリクエストが要求されると、ServletのdoGet、doPostメソッドが呼びされます。doGet、doPostメソッドは引数のHttpServletRequestのgetParameterを使い、ブラウザで入力された値を取得し、要求に応じます。doGet、doPostメソッドは繰り返し呼び出されクライアントの多様な要求に応えます。Servletの消滅はプログラムから明示的に行うのではなく、管理コンソールからの停止の指示や、サーバ自身の停止の前に呼び出されます。
おさらい
- Webアプリケーションの基礎はServletである
- JSPやJSP STLという技術もServletの上に乗っている(JSPがServletに置き換えられコンパイルされることは次回紹介します)
- Servletは最初の呼び出しのみインスタンス化され、それ以降何度呼び出してもスレッドが生成されるのみである
- 同じServletのスレッド同士はメモリ空間を共有する
- Servletには明確なライフサイクルが存在する
上記のことをしっかり押さえておけばServletやJSPを使ったWebアプリケーションの理解はグンと楽になります。なお、サンプルコードはページトップにあるので、ダウンロードしてご利用ください。プロジェクト構成は図25の通りです。

参考資料
- 『Javaスレッドプログラミング―並列オブジェクト指向プログラミングの設計原理』 Doug Lea著、翔泳社、2000年8月
- 『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』 結城 浩著、ソフトバンククリエイティブ、2006年3月
- 『創るJava NetBeansでつくって学ぶJava GUI & Webアプリケーション[改訂第3版]』 きしだ なおき著、毎日コミュニケーションズ、2005年11月
1と2を読めば、非常に難しいと感じるマルチスレッドプログラミングの理解が楽になります。今回はスレッドを悪者扱いしましたが、スレッドは使い方次第で味方にも敵にもなるため、しっかりと基礎を押さえておく必要があります。当連載では説明しないため、これらで理解を深めてください。3はNetBeans 6.7.1を使った説明であり、当連載では説明できないことをほぼカバーしており、本連載とともに読まれることをお薦めします。
次回(第3回)はJSPを説明し、第4回目にWebアプリケーションを作成します。
