-4

サーブレットinit()のメソッド内でメソッドを呼び出すとどうなるか教えてください。doget()例外をスローしますか?サーブレットのライフサイクルにどのような影響がありますか?

お知らせ下さい。

4

3 に答える 3

1

init()ほとんどの場合、メソッド内のコードが実行されます。

このメソッドについて特別なことはありませんがinit、サーブレットがサービスを開始する前にコンテナがメソッドを呼び出します。いつでも呼び出すことができます。initメソッドが共有データの値を変更すると、奇妙な問題が発生する可能性があります。

なぜ誰かがメソッドinit内から呼び出さなければならないのか想像できません。doGet

于 2012-07-17T15:18:16.250 に答える
1

init()まず第一に、からメソッドを呼び出そうとした場合、この質問を避けることができ、doGet()何が起こるかを確認できます。

とにかく、Servlet Spec 2.3 は次のように述べています。

サーブレットが永続的な構成データを読み取ったり、コストのかかるリソース (JDBC™ API ベースの接続など) を初期化したり、その他の 1 回限りのアクティビティを実行したりできるように、初期化が提供されます。

そのため、現在の方法には、これらの1 回限りのアクティビティがいくつ含まれているか疑問に思うはずです。init()そのメソッドを呼び出すことは、別のメソッドを呼び出すことと同じです。あなたのinit()メソッドが行う唯一のことは、ServetConfigのinitパラメーターから所有されている属性を初期化するシナリオで考えています。その場合、何も悪いことは起こりません。

ただし、init()メソッドがサーブレットの内部状態を変更する可能性のあるタスクを実行すると、奇妙な動作に直面する可能性があります。

init()で使用する必要があるタスクをメソッドで実行している場合はdoGet()、それらをプライベートな内部メソッドに移動します。

于 2012-07-17T15:23:34.480 に答える
0

init() メソッドを実装していなければ、ほとんど何も起こりません。理由は、継承された実装も空であるためです。サーブレットは、GenericServlet から次の実装を継承する HttpServlet を拡張する可能性があります。

public void init() throws ServletException {
    // NOOP by default
}

独自の実装がある場合は、実装内のコードが実行されます。それは例外をスローしますか - それはあなたがコード化したものに依存します.

ServletConfig を引数として init を呼び出すと、元の ServletConfig が置き換えられてinit()呼び出されます。initまたはinit(ServletConfig)メソッドを呼び出す理由がわかりません。メソッドは、必要に応じてオーバーライドし、サーブレット コンテナーによって呼び出されます。

于 2012-07-17T16:06:31.553 に答える