You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Jon Crater <jm...@hotmail.com> on 2001/08/06 19:15:55 UTC

servlet.getServletContext() always null...why?

i have a base action class in which i declare a variable of type 
ServletContext:

public abstract class BaseAction extends Action
{
   protected ServletContext ctx = servlet.getServletContext();
   ...
}

yet i always get a NullPointerException on this line when struts tries to 
instantiate a subclass of this base class.  why?

2001-08-06 01:13:55 - path="/bc" :action: Error creating Action instance for 
path '/Login', class name 'com.gs.bc.action.LoginAction' - 
java.lang.NullPointerException
	at com.gs.bc.action.BaseAction.<init>(BaseAction.java:15)
	at com.gs.bc.action.LoginAction.<init>(LoginAction.java:16)
	at java.lang.Class.newInstance0(Native Method)
	at java.lang.Class.newInstance(Class.java:237)
	at 
org.apache.struts.action.ActionServlet.processActionCreate(ActionServlet.java:1631)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1576)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:509)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405)
	at org.apache.tomcat.core.Handler.service(Handler.java:287)
	at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
	at 
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)
	at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
	at 
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213)
	at 
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
	at 
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501)
	at java.lang.Thread.run(Thread.java:484)


_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp


Re: servlet.getServletContext() always null...why?

Posted by "Craig R. McClanahan" <cr...@apache.org>.

On Mon, 6 Aug 2001, Jon Crater wrote:

> i have a base action class in which i declare a variable of type 
> ServletContext:
> 
> public abstract class BaseAction extends Action
> {
>    protected ServletContext ctx = servlet.getServletContext();
>    ...
> }
> 
> yet i always get a NullPointerException on this line when struts tries to 
> instantiate a subclass of this base class.  why?
> 

Because instance variable initialization expressions like this are
executed (effectively) when the constructor is called -- so Struts has not
yet had time to initialize the "servlet" property.

I suggest you override setServlet() instead:

    protected ServletContext ctx = null;

    public void setServlet(ActionServlet servlet) {
      super(servlet);
      if (servlet != null)
        ctx = servlet.getServletContext();
      else
        ctx = null;
    }


Craig