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");