- PR -

サーブレットライフサイクルに関して

1
投稿者投稿内容
ヤス
会議室デビュー日: 2005/05/23
投稿数: 3
投稿日時: 2006-06-26 17:42
お世話になります。
サーブレット実行時の初期化に関して質問があります。

サーブレットで初期化処理で
init()で行なうとコンストラクタで行なうでは
init()で行なうのが正しいとサンの試験の例題回答にありましたが

http://suned.sun.co.jp/JPN/certification/compsqwa.html

明確な理由が良く分かりませんでした。

init()は初期化メソッドなのでそちらの方が好ましいのは
分かるのですが、コンストラクタで初期化処理を行なってはいけない
具体的な理由があるのでしょうか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-06-26 18:29
サーブレットの初期化には、通常初期化のパラメータを使用しますが、
初期化のパラメータはServletConfigによって参照できます。

ServletConfigはinit(ServletConfig)メソッドで初めて設定され、
その後initメソッドが実行されます。
この辺はjavax.servlet.GenericServletのソースを読むとわかると思います。

厳密にはインスタンスが生成されたタイミング=初期化可能ではありません。
コンテナがサーブレットのインスタンスを生成するのは、
コンテナの準備の段階で生成するものですが、
初期化は準備か完了してから行われるものです。

この手のコンテナ管理系のフレームワークでは
通常コンストラクタを書かないことが推奨されているものも多いです。
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2006-06-26 20:48
引用:

ヤスさんの書き込み (2006-06-26 17:42) より:
分かるのですが、コンストラクタで初期化処理を行なってはいけない
具体的な理由があるのでしょうか?



サーブレット、はほとんどの場合、サーバとして動作します。
「サーバ」ということは「起動時」と「クラスインスタンス時」
が異なる可能性があります。

先にクラスを割り付けておけば、クラスをアクセス時に割り付けない分、
早いのは当然です。


1

スキルアップ/キャリアアップ(JOB@IT)