craigmcc    01/03/17 21:32:13

  Modified:    catalina/src/share/org/apache/catalina/core
                        LocalStrings.properties StandardContext.java
                        StandardWrapper.java
               jasper/src/share/org/apache/jasper/compiler
                        TldLocationsCache.java
  Log:
  Enable the use of the special Jasper class loader even for <servlet>
  declarations that use a <jsp-file> element to define a JSP page, instead
  of a servlet class.
  
  Revision  Changes    Path
  1.24      +1 -0      
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/LocalStrings.properties
  
  Index: LocalStrings.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/LocalStrings.properties,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- LocalStrings.properties   2001/01/23 02:51:14     1.23
  +++ LocalStrings.properties   2001/03/18 05:32:12     1.24
  @@ -119,6 +119,7 @@
   standardWrapper.initException=Servlet.init() for servlet {0} threw exception
   standardWrapper.instantiate=Error instantiating servlet class {0}
   standardWrapper.isUnavailable=Servlet {0} is currently unavailable
  +standardWrapper.jasperLoader=Using Jasper classloader for servlet {0}
   standardWrapper.jspFile.format=JSP file {0} does not start with a '/' character
   standardWrapper.loadException=Servlet {0} threw load() exception
   standardWrapper.missingClass=Wrapper cannot find servlet class {0} or a class it 
depends on
  
  
  
  1.43      +60 -4     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java
  
  Index: StandardContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- StandardContext.java      2001/03/13 06:48:08     1.42
  +++ StandardContext.java      2001/03/18 05:32:12     1.43
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java,v
 1.42 2001/03/13 06:48:08 remm Exp $
  - * $Revision: 1.42 $
  - * $Date: 2001/03/13 06:48:08 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardContext.java,v
 1.43 2001/03/18 05:32:12 craigmcc Exp $
  + * $Revision: 1.43 $
  + * $Date: 2001/03/18 05:32:12 $
    *
    * ====================================================================
    *
  @@ -69,6 +69,7 @@
   import java.io.IOException;
   import java.util.ArrayList;
   import java.util.HashMap;
  +import java.net.URL;
   import java.util.Iterator;
   import java.util.TreeMap;
   import java.util.Hashtable;
  @@ -125,6 +126,7 @@
   import org.apache.catalina.deploy.ResourceParams;
   import org.apache.catalina.deploy.SecurityCollection;
   import org.apache.catalina.deploy.SecurityConstraint;
  +import org.apache.catalina.loader.StandardClassLoader;
   import org.apache.catalina.loader.StandardLoader;
   import org.apache.catalina.session.StandardManager;
   import org.apache.catalina.util.CharsetMapper;
  @@ -138,7 +140,7 @@
    *
    * @author Craig R. McClanahan
    * @author Remy Maucherat
  - * @version $Revision: 1.42 $ $Date: 2001/03/13 06:48:08 $
  + * @version $Revision: 1.43 $ $Date: 2001/03/18 05:32:12 $
    */
   
   public class StandardContext
  @@ -301,6 +303,14 @@
   
   
       /**
  +     * The special class loader created for Jasper in order to isolate
  +     * its use of an XML parser from the libraries made visible to
  +     * web applications.
  +     */
  +    private ClassLoader jasperLoader = null;
  +
  +
  +    /**
        * The login configuration descriptor for this web application.
        */
       private LoginConfig loginConfig = null;
  @@ -724,6 +734,7 @@
       public synchronized void setLoader(Loader loader) {
   
        super.setLoader(loader);
  +        jasperLoader = null;
   
       }
   
  @@ -1003,6 +1014,51 @@
        support.firePropertyChange("charsetMapperClass",
                                   oldCharsetMapperClass,
                                   this.charsetMapperClass);
  +
  +    }
  +
  +
  +    /**
  +     * Return the special class loader for Jasper for this web application,
  +     * creating one if required.
  +     */
  +    public synchronized ClassLoader getJasperLoader() {
  +
  +        // Return the existing class loader (if any)
  +        if (jasperLoader != null) {
  +            return (jasperLoader);
  +        }
  +
  +        // Can we set up the corresponding Jasper class loader?
  +        if (loader == null) {
  +            return (null);
  +        }
  +        ClassLoader classLoader = loader.getClassLoader();
  +        if (classLoader == null) {
  +            return (null);
  +        }
  +
  +        // Set up the Jasper class loader
  +        StandardClassLoader newLoader = new StandardClassLoader(classLoader);
  +        File directory = new File(System.getProperty("catalina.home"),
  +                                  "jasper");
  +        if (directory.exists() && directory.canRead() &&
  +            directory.isDirectory()) {
  +            String filenames[] = directory.list();
  +            for (int i = 0; i < filenames.length; i++) {
  +                if (!filenames[i].endsWith(".jar"))
  +                    continue;
  +                File file = new File(directory, filenames[i]);
  +                try {
  +                    URL url = new URL("file", null, file.getCanonicalPath());
  +                    newLoader.addRepository(url.toString());
  +                } catch (IOException e) {
  +                    throw new IllegalArgumentException(e.toString());
  +                }
  +            }
  +        }
  +        jasperLoader = newLoader;
  +        return (jasperLoader);
   
       }
   
  
  
  
  1.16      +8 -60     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java
  
  Index: StandardWrapper.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- StandardWrapper.java      2001/03/17 19:46:41     1.15
  +++ StandardWrapper.java      2001/03/18 05:32:12     1.16
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
 1.15 2001/03/17 19:46:41 craigmcc Exp $
  - * $Revision: 1.15 $
  - * $Date: 2001/03/17 19:46:41 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/core/StandardWrapper.java,v
 1.16 2001/03/18 05:32:12 craigmcc Exp $
  + * $Revision: 1.16 $
  + * $Date: 2001/03/18 05:32:12 $
    *
    * ====================================================================
    *
  @@ -104,7 +104,7 @@
    * make them efficient are counter-productive.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.15 $ $Date: 2001/03/17 19:46:41 $
  + * @version $Revision: 1.16 $ $Date: 2001/03/18 05:32:12 $
    */
   
   public final class StandardWrapper
  @@ -718,6 +718,8 @@
                (sm.getString("standardWrapper.missingLoader", getName()));
        }
        ClassLoader classLoader = loader.getClassLoader();
  +
  +        // Special case class loader for a Catalina internal servlet
        if (isContainerServlet(actualClass)) {
            classLoader = this.getClass().getClassLoader();
            log(sm.getString
  @@ -726,17 +728,8 @@
   
           // Special case class loader for the Jasper JSP servlet
           if (actualClass.equals(Constants.JSP_SERVLET_CLASS)) {
  -            if (jasperLoader == null) {
  -                jasperLoader = createJasperLoader(classLoader);
  -             // Preload below class to prevent defineClassInPackage
  -             // SecurityManager AccessControlException
  -             try {
  -                    jasperLoader.loadClass(
  -                        "org.apache.jasper.runtime.ServletResponseWrapperInclude");
  -             } catch(ClassNotFoundException e) {
  -             }
  -         }
  -            classLoader = jasperLoader;
  +            classLoader = ((StandardContext) getParent()).getJasperLoader();
  +            log(sm.getString("standardWrapper.jasperLoader", getName()));
           }
   
        // Load the specified servlet class from the appropriate class loader
  @@ -1001,51 +994,6 @@
       protected void addDefaultMapper(String mapperClass) {
   
        ;       // No need for a default Mapper on a Wrapper
  -
  -    }
  -
  -
  -    /**
  -     * Create and return a custom class loader for the Jasper JSP servlet
  -     * that picks up the relevant classes from the "jasper" subdirectory
  -     * underneath "catalina.home".
  -     *
  -     * @param classLoader The web app class loader to be our parent
  -     *
  -     * @exception IllegalArgumentException if an error occurs building a
  -     *  URL for one of the repository JAR files
  -     */
  -    protected ClassLoader createJasperLoader(ClassLoader classLoader) {
  -
  -        // Create a new class loader with the webapp class loader as parent
  -        StandardClassLoader jasperLoader =
  -            new StandardClassLoader(classLoader);
  -
  -        // Accumulate the list of repositories to be added for this loader
  -        File directory = new File(System.getProperty("catalina.home"),
  -                                  "jasper");
  -        if (!directory.exists() || !directory.canRead() ||
  -            !directory.isDirectory())
  -            return (jasperLoader);
  -        String filenames[] = directory.list();
  -        for (int i = 0; i < filenames.length; i++) {
  -            if (!filenames[i].endsWith(".jar"))
  -                continue;
  -            File file = new File(directory, filenames[i]);
  -            try {
  -                URL url = new URL("file", null, file.getCanonicalPath());
  -                jasperLoader.addRepository(url.toString());
  -            } catch (IOException e) {
  -                throw new IllegalArgumentException(e.toString());
  -            }
  -        }
  -
  -        // Return the configured class loader
  -        if (debug >= 1) {
  -            log("Created Jasper Class Loader");
  -            log(jasperLoader.toString());
  -        }
  -        return (jasperLoader);
   
       }
   
  
  
  
  1.7       +2 -1      
jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TldLocationsCache.java
  
  Index: TldLocationsCache.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TldLocationsCache.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- TldLocationsCache.java    2001/02/18 02:18:14     1.6
  +++ TldLocationsCache.java    2001/03/18 05:32:13     1.7
  @@ -156,7 +156,8 @@
   
           // Parse the web application deployment descriptor
           ClassLoader cl =
  -            (ClassLoader) ctxt.getAttribute(Constants.SERVLET_CLASS_LOADER);
  +            // (ClassLoader) ctxt.getAttribute(Constants.SERVLET_CLASS_LOADER);
  +            this.getClass().getClassLoader();
           ParserUtils pu = ParserUtils.createParserUtils(cl);
           TreeNode webtld = pu.parseXMLDocument(WEB_XML, is);
           Iterator taglibs = webtld.findChildren("taglib");
  
  
  

Reply via email to