tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Craig R. McClanahan" <>
Subject Re: Servlet ClassLoader
Date Fri, 02 Feb 2001 19:09:04 GMT

Marc Saegesser wrote:

> > -----Original Message-----
> > From: Craig R. McClanahan []
> >* Java asked the webapp class loader to find the
> >  controller servlet class
> >* The webapp class loader did not find the class
> >  so it delegated to the shared class loader
> >* The shared class loader (which reads from $CATALINA_HOME/lib
> >  in Tomcat 4.0 -- the corresponding loader in Tomcat 3.2 reads
> >  from the system classpath) and finds your class
> >
> > Now, when your controller servlet calls Class.forName(), it
> > starts from its
> > *own* class loader, and looks either there, or upwards.  Of
> > course, if your
> > components are under WEB-INF/classes or WEB-INF/lib, they are not
> > visible ...
> The Java2 class loading model is for a loader to "delegate first" to it's
> parent loader.  Only if the parent loader (that also delegates first to it's
> parent) can't find the class will the original loader try to load it.
> The description above shows the webapp loader attempting to load the class
> first and only delegating if that fails.  Is this really the case?

Sorry ... I should have been more explicit here.

You're right about the normal delegation model for Java2.  However, the Servlet
2.3 Spec (Proposed Final Draft) gives a servlet container the option to "look
before delegating" -- see Section 9.6.2.  Tomcat 4.0 does this.

The intention of this language is that you can have version X of a library
installed as a shared resource, and version Y of the library available in
WEB-INF/lib.  In the 2.3 model, Y will override X.  In the standard delegation
model (i.e. Tomcat 3.2) you'd get the classes from X no matter what you did.


View raw message