2012-11-30 16 views
6

をオーバーライド私は、initを上書きするmethod.Myコードを(のServletConfig設定)をしようとしています:Javaサーブレットのinit(のServletConfig設定)

public void init(ServletConfig config) throws ServletException { 
    ServletContext sc = getServletContext(); // ----- NullPointerException 
} 

これは、NullPointerExceptionが与えています。

として私はそれを変更する場合:これは正常に動作します

public void init(ServletConfig config) throws ServletException { 
    ServletContext sc = config.getServletContext(); // ----- works fine 
} 

。 私はinit()メソッドではなく、init(ServletConfig config)ではなく、
をオーバーライドする必要があることを知っています。

+1

* init()メソッドではなく、init(ServletConfig config)*ではなく、どこからオーバーライドすべきか分かっていますか? –

+0

init(ServletConfig config)メソッドをオーバーライドできないと言っているわけではありませんが、init()メソッドはinit(ServletConfig config)メソッドから内部的に呼び出されるので、init()メソッドをオーバーライドする必要があります。 –

+0

あなたは既にあなたの答えがあるようです。ほかに何が必要ですか? –

答えて

19

init(ServletConfig)のドキュメントの比較:

 
public void init(ServletConfig config)throws ServletException 
Called by the servlet container to indicate to a servlet that the servlet 
is being placed into service. 

See Servlet#init. This implementation stores the ServletConfig object 
it receives from the servlet container for later use. When overriding 
this form of the method, call super.init(config). 

そしてinit()のドキュメントとその比較:

 
public void init() throws ServletException 
A convenience method which can be overridden so that there's no need to 
call super.init(config). 

Instead of overriding init(ServletConfig), simply override this method 
and it will be called by GenericServlet.init(ServletConfig config). The 
ServletConfig object can still be retrieved via getServletConfig(). 

init(ServletConfig)をオーバーライドする場合は、行う必要がありますまず最初に呼び出すことです。

super.init(config); 

oこれでメソッド内で直接getServletContext()を呼び出すと、もはやNPEが発生しなくなります。

+0

は、 - super.init(config);を呼び出した後のことを意味します; servletはservletcontextへの参照を取得しますか? –

+0

@RiteshKaushikはい、そうです。 –

1

ために:

public void init(ServletConfig config) throws ServletException 
{ 
    ServletContext sc = getServletContext(); 
} 

あなたはsuper.init(ServletConfig)を呼び出しません。その結果、ServletConfigはサーブレットインスタンスに格納されず、その後のgetServletConfigの呼び出しはnullを返します。

2

あなたがinit(ServletConfig)をオーバーライドする代わりに

 public void init(ServletConfig config) throws ServletException { 
     super.init(config); 
      ServletContext sc = getServletContext(); 
    } 

をオーバーライドした場合、間違った方法メカニズム をオーバーライドし、単純に以下のメソッドをオーバーライドして、それがちょうど置くGenericServlet.init(ServletConfig config)

public void init() throws ServletException { 
ServletContext sc = getServletContext(); 
} 
0

によって呼び出されますされているためですオーバーライドされたメソッドの最初の行にあるスーパーinit(config)

public void init(ServletConfig config) throws ServletException 
関連する問題