Reputation: 735
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?
Upvotes: 8
Views: 28581
Reputation: 73
Just put the super init(config) at very first line of your overridden method
public void init(ServletConfig config) throws ServletException
Upvotes: 0
Reputation: 6657
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();
}
Upvotes: 2
Reputation: 3633
Because in :
public void init(ServletConfig config) throws ServletException
{
ServletContext sc = getServletContext();
}
you don't invoke super.init(ServletConfig)
. As a result, ServletConfig is not stored in the servlet instance, and subsequent calls to getServletConfig will return null.
Upvotes: 1
Reputation: 80593
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.
Upvotes: 20