JAVAサーブレットのクラスを初期化するときの方法について何種類かあるので迷ったので覚書き。
かんたんなサーブレットクラスを作ってテストしてみた。
public class InitTest extends HttpServlet{ static{ System.out.println("static medhod called"); } public void init() throws ServletException{ System.out.println("init medhod called"); } public InitTest(){ System.out.println("class constructor called"); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("http doGet called"); } }
1番めはstaticメソッド。initilizerとも呼ばれる。staticなinitilizerで呼ばれるタイミングは一番早い。
2番めはinitメソッドでインスタンス作成後に一度だけ呼び出されるらしい。
3番めはコンストラクタでインスタンス作成したときに呼び出される。
で、上記クラスをTomcatで実行してhttpでアクセスしてみたら
static medhod called class constructor called init medhod called http doGet called
という順番で呼び出された。staticメソッドとクラスのコンストラクタのどちらを使おうかと迷っていたらクラスのinit()メソッドというのも存在していて余計にややこしくなった。init()メソッドは今まで使ってこなくても何の問題もなかったのでJAVAサーブレットで開発をしている上では無視しておいてもいいんじゃないだろうか(適当)
JAVAサーブレット自体がクラスのインスタンスを1つしか作成しないようになっていていくつもインスタンスを作るようなものだったらstaticメソッドを使うかコンストラクタを使うかとか迷わないんだが。