Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Servlets Overriding init(ServletConfig config)

I am trying to override init(ServletConfig config) method.My code is:

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

this is giving NullPointerException .

If i modify it as:

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

This works fine. I know that we should override init() method and not init(ServletConfig config) but
Can anybody give me proper reason as why this is happening?

like image 514
Ritesh Kaushik Avatar asked Nov 30 '12 04:11

Ritesh Kaushik


People also ask

Can we override Init method in servlet?

init(ServletConfig) or simply override the init() method that takes no arguments. This your servlet's ServletConfig enables be saved locally and later returned by calls to your servlet's getServletConfig() method. This method enables other servlet methods to access the variable.

Why is public void init ServletConfig config is invoked?

public void init(ServletConfig config) initializes the servlet. It is the life cycle method of servlet and invoked by the web container only once.

What is use of init () method in servlet?

init. void init(ServletConfig config) throws ServletException. Called by the servlet container to indicate to a servlet that the servlet is being placed into service. The servlet container calls the init method exactly once after instantiating the servlet.

What are the methods that you may override when implementing a servlet?

Override the service() method for generic servlets or the doGet() or doPost() methods for HTTP servlets to perform tasks needed to answer the request.


2 Answers

Compare the documentation for 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).

And compare that with the documentation for 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().

When overriding init(ServletConfig), the first thing that must be done is to call:

super.init(config);

If you do this then calling directly to getServletContext() in your method will no longer result in an NPE.

like image 99
Perception Avatar answered Oct 25 '22 22:10

Perception


This happens because you are overriding wrong method mechanism If you overriding

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

Instead of overriding init(ServletConfig), simply override the below method and it will be called by GenericServlet.init(ServletConfig config)

 public void init() throws ServletException {
 ServletContext sc = getServletContext(); 
}
like image 42
Bhavik Ambani Avatar answered Oct 25 '22 22:10

Bhavik Ambani