Javaの場合はmainメソッドが最初に動くんだよなあ、くらいの認識しかなかったので少し調べてみた。
サーブレットコンテナとは?
まずは必要な前提知識を。
サーブレットコンテナとは、サーブレットを動かすのに必要なソフトウェア。代表的なものはTomcat。
mainメソッドはいつ呼び出しているのか?
Javaプログラムのエントリポイントは、public static void main(String[] args)。
どんなプログラムにも必ずあると思っていたが、他のJavaプログラムから呼び出されるなら必要ない。
Tomcatがmainメソッドを持っていて、Tomcatからサーブレットが呼び出されるのでサーブレットはmainメソッドを持っていない。
起動からの流れ(合っているか怪しい)
- Tomcat起動(Javaコマンド打ってmainメソッド呼び出し)
- Tomcatのmainメソッドが実行される
- サーブレットがインスタンス化され、サーブレットのinitメソッド実行
- HTTPリクエスト待機状態に入る
この状態が、Eclipseでtomcat起動した時と同じ状態だと思う。
リクエストが来たらどうなる?
どのクラスのdoGet/doPostを呼び出すかは、web.xmlに「このURLにリクエスト来たらこのクラスを呼び出してね」と書いてある。
こういう流れで起動するから、開発者からするとdoGet/doPostがエントリーポイントのように見える。
インスタンス化とは
newして、メモリ領域に入れること。
Tomcatのmainメソッド
ここから始まる。BootStrapクラス。
public static void main(String args[]) { synchronized (daemonLock) { if (daemon == null) { // Don't set daemon until init() has completed Bootstrap bootstrap = new Bootstrap(); try { bootstrap.init(); } catch (Throwable t) { handleThrowable(t); log.error("Init exception", t); return; } daemon = bootstrap; } else { //以下省略
参考
いまさら聞けないサーバーサイドJava 第2回 サーブレットとJSPを使いこなすコツ | ウルシステムズ株式会社