As an experiment, I placed a file in the webapp dir of a servlet (not in
WEB-INF but in the directory above it) and attempted to read it using
getResource().  What I found was that I could not locate the resource unless
I used getServletContext().getResource().

Reading through the Classloading How-To, I am confused why this works.  The
how-to says that from the perspective of the webapp, loading takes place in
this order:

    * Bootstrap classes of your JVM
    * System class loader classses (described above)
    * /WEB-INF/classes of your web application
    * /WEB-INF/lib/*.jar of your web application
    * $CATALINA_HOME/common/classes
    * $CATALINA_HOME/common/endorsed/*.jar
    * $CATALINA_HOME/common/lib/*.jar
    * $CATALINA_BASE/shared/classes
    * $CATALINA_BASE/shared/lib/*.jar

But, what is the order for getServletContext() ?

To try to figure this out, I ran another experiment:

        ClassLoader c1 = this.getClass().getClassLoader();
        log(" this's classloader is " + c1.getClass().getName());

        ClassLoader c2 = getServletContext().getClass().getClassLoader();
        log(" servlet context's  classloader is " + c2.getClass().getName());

Results:

        this's classloader is org.apache.catalina.loader.WebappClassLoader
        servlet context's  classloader is
org.apache.catalina.loader.StandardClassLoader

The HowTo says the following classloaders exist:

    * Bootstrap
    * System
    * Common
    * Catalina
    * Shared
    * WebappX

How is that some instance of StandarClassLoader able to access the webapp
root?



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to