4

インタビューで質問されましたが、サーブレットがサーブレットオブジェクトをインスタンス化するのをどのように停止しますか?
コンテナがサーブレットオブジェクトを破棄することを決定したと言いました。

彼はまた、コンテナが最初にサーブレットオブジェクトを作成し、次にそれを破棄すると述べました。私の質問は、サーブレットオブジェクトがまだ作成されていないため、破棄しても意味がないということです。深刻な問題でトラップをインスタンス化しようとしているときに、サーブレットクラスをどのようにコーディングしますか?コード(または他の方法)でインスタンス化を停止する必要がありますか?

4

3 に答える 3

1

javax.servlet.UnavailableException彼はあなたがから投げることを期待していると思いますinit()

public class UnavailableException extends ServletExceptionこの例外は、サーブレットが使用できないことを示します。サーブレットはいつでもこの例外を報告する可能性があり、サーブレットを実行しているネットワークサービスは適切に動作する必要があります。使用不可には2つのタイプがあり、高度なサービスはこれらを異なる方法で処理します。

永久に利用できない。サーブレットは、サーブレットの問題を修正するための管理アクションが実行されるまで、クライアント要求を処理できません。たとえば、サーブレットが正しく構成されていないか、サーブレットの状態が破損している可能性があります。適切に記述されたサーブレットは、サーブレットを使用可能にするために管理者が実行する必要のあるエラーと修正アクションの両方をログに記録します。

一時的に利用できなくなります。システム全体の問題により、現時点ではサーブレットはリクエストを処理できません。たとえば、第3層サーバーにアクセスできない場合や、要求を処理するためのメモリまたはディスクストレージが不足している場合があります。問題は、過度の負荷によるものなどの自己修正であるか、管理者による修正措置が必要な場合があります。

于 2013-03-21T17:48:28.350 に答える
1

コンテナによるサーブレットのインスタンスの作成を停止するには、次の3つの方法があります。

  1. web.xmlでサーブレットへの参照を削除します。コンテナが注釈を処理している場合は、@WebServlet注釈も削除する必要があります。

  2. コンストラクターで、例外をスローします。

  3. init()メソッドで、例外をスローします。

于 2013-03-21T17:49:10.440 に答える
0

そうです、コンテナはサーブレットの作成とライフサイクルに責任があります。init()最初にデフォルトのパブリックコンストラクタを使用してサーブレットのインスタンスを作成し、次にそのメソッドを呼び出します。コンテナがサーブレットを破棄する場合、destroy()通常(IMHO)空のメソッドを呼び出します。

コンテナは、アプリケーションのおそらく新しいバージョンをデプロイするときに、ホット再デプロイ中に最初に破棄してから新しいサーブレットを作成できます。おそらくこれはあなたのインタビュアーがあなたから聞きたかったことです。

于 2013-03-21T17:49:43.580 に答える