2011-01-20 7 views

答えて

6

javadocは理由として明確である

でsuper.init(設定)をコールする必要はありませんように上書きすることができる便利なメソッドです。 init(ServletConfig)を上書きするのではなく、単にこのメソッドをオーバーライドすると、GenericServlet.init(ServletConfig config)によって呼び出されます。 ServletConfigオブジェクトはまだgetServletConfig()で取得できます。

サーブレットがServletConfigを気にしない場合は、init()を実装してください。

+0

申し訳ありませんが、私は便宜的なメソッドを取得しませんでした。 – abson

+0

@Abkutty: "便利なメソッド"は、 "完全な"メソッドの簡単な代替として提供されています。 – skaffman

0

基本的には、GenericServletからは、何もしません

1)のinit()2つのinitメソッドがあります。 でsuper.init(設定)をコールする必要はありませんように上書きすることができる便利な方法が。

2)init(ServletConfig config)サーブレットコンテナによって呼び出され、サーブレットに サーブレットがサービスされていることを示します。

1

ジェネリックサーブレットクラスの一部として2つのinit()メソッドがあります。

  1. のinit(のServletConfigの設定)
  2. のinit()2 INIT()およびそれらの用途を理解するため

サンプル・サーブレット・プログラム。

public class TestServlet extends HttpServlet{ 

    public void init() throws...... 
    { 
     System.out.println("we are in 2nd init() "); 
    } 
    public void service(HttpServlet.........)throws .....{ 
     System.out.println("we are in TestServlet"); 
    } 

} 

上記のサーブレットがサーバーにデプロイされたときに実行される手順。クライアントが TestServletへの初めてのリクエストを送信し、これまで、サーバはtestServletオブジェクトを作成し、() メソッド(のinit(のServletConfigの設定))最初のinitを呼び出してプロジェクトをデプロイした後

  1. 。次に、 TestServletの最初のinit()メソッドをチェックします。利用できない場合は、スーパークラスHttpServletもチェックします。 最初のinitメソッドは使用できません。次にHttpServletのスーパークラスを確認します。 GenericServletクラスfirst init )が利用可能であれば、JVMはそれを実行して、 秒のinit()を呼び出します。これは、TestServletで2番目のinit()が直接使用可能であり、その後JVM が実行されるためです。

- > HttpServletを使用しているときに最初のinit()メソッドを使用することはまったく推奨されません。

- >問題は何だったのですか、最初にinit()を使うのはなぜですか?

最初のアプローチは:上記のサーブレットが配備されたときに

public class TestServlet extends HttpServlet 
    { 
     public void init(ServletConfig config) throws..... 
     { 
     config=getServletConfig(); 
     String paramName = config.getInitParameter("ParameterName"); 
     System.out.println("paramName"); 
     } 
    public void service(HttpServlet request ..........)throws ....... 
    { 
     System.out.println("we are in 2nd service method()"); 
    } 

} 

次のステップが実施されます。 a.Servletオブジェクトが作成され、スーパークラスのすべてのインスタンス変数がデフォルト値(null)で宣言されている場合、JVMはTestServletで使用されているように最初のinit()メソッドを実行しますが、GenericServletではgetServletConfigクライアントがTestServletの要求を送信したときにヌルに設定します.Null Pointer Execpetionに直面します。

第二のアプローチ

//Sample code 
    ServletConfig config; 
public void init(ServletConfig config){ 
    this.config=config; 
    String fileName = config.getInitParameter("ParameterName"); 
    System.out.println(config); 
} 

上記のコードは良好に見えるが、上記コードの問題は、冗長であり、冗長なコードを除去すべき継承ルールに従って。

第三のアプローチ:Sunは第二のinitを使用するようにお奨めしている上記resonsためので

//approach1 problem can be resolved by calling the super class init() so that config object 
//will returned which we can use in init() of our servlet. 
super.init(config); 
config=getServletConfig(); 

()私たちのサーブレットの.as私たちはその後、私たちのコードの一部として最初のinit()を提供していないの一環として、 JVMはGenericServletの最初のinit()メソッドを呼び出します。

0

最初のリクエストを送信するたびに、Webコンテナは常にinit(ServletConfig config)メソッドを呼び出します。設定目的を機能目的に保存してから、内部呼び出しinit()メソッドを呼び出すようにします。メソッドはあなた自身のアクティビティを初期化します。単にinit(servletConfig config)はWebコンテナの目的を意味し、init()メソッドはプログラマの目的のためのものです。そのようにGenericServletには2つのinit()メソッドがあります。

関連する問題