2012-11-30 14 views
6

I init außer Kraft zu setzen versuche (ServletConfig config) method.My Code ist:Java Servlets Aufschalten init (ServletConfig config)

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

diese Nullpointer gibt.

Wenn ich es als zu ändern:

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

Dies funktioniert gut. Ich weiß, dass wir init() -Methode überschreiben sollten und nicht init (ServletConfig config), sondern
Kann mir jemand richtigen Grund, warum dies passiert?

+1

Wo haben Sie das gefunden? Wir sollten 'init()' Methode überschreiben und nicht 'init (ServletConfig config)' *? –

+0

Ich sage nicht, dass wir init (ServletConfig config) -Methode nicht überschreiben können, aber ich lese, dass init() -Methode intern von init (ServletConfig config) -Methode aufgerufen wird, also sollten wir init() -Methode überschreiben. –

+0

Es sieht so aus, als ob Sie bereits Ihre Antwort haben. Was brauchst du noch? –

Antwort

19

Vergleichen Sie die Dokumentation für 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). 

Und das für init() mit der Dokumentation vergleichen:

 
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(). 

Wenn init(ServletConfig) überschreiben, das erste, was zu nennen getan werden muss, ist:

super.init(config); 

Wenn Sie d o dieser Aufruf dann direkt zu getServletContext() in Ihrer Methode führt nicht mehr zu einer NPE.

+0

bedeutet nach dem Aufruf - super.init (config) ;, Servlet wird den Verweis auf Servletcontext erhalten? –

+0

@RiteshKaushik ja, das ist was es bedeutet. –

1

Denn:

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

Sie nicht super.init(ServletConfig) aufrufen. Daher wird ServletConfig nicht in der Servlet-Instanz gespeichert, und nachfolgende Aufrufe von getServletConfig geben null zurück.

2

Dies geschieht, weil Sie falsche Methode Mechanismus überschrieben werden Wenn Sie

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

Statt init(ServletConfig) vorran, einfach außer Kraft setzen, die unter Methode überschrieben und es wird von GenericServlet.init(ServletConfig config)

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

Setzen Sie einfach aufgerufen werden Die Super-Init (Config) in der ersten Zeile Ihrer überschriebenen Methode

public void init(ServletConfig config) throws ServletException 
Verwandte Themen