Java Servlets Overriding init(ServletConfig config)

init, java, servlets

Solution

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.

Problem

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?

Original source