You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by lu...@apache.org on 2003/09/23 03:19:53 UTC
cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler TldLocationsCache.java
luehe 2003/09/22 18:19:53
Modified: jasper2/src/share/org/apache/jasper/compiler
TldLocationsCache.java
Log:
Avoid scanning the JARs under WEB-INF/lib twice
Revision Changes Path
1.21 +18 -39 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TldLocationsCache.java
Index: TldLocationsCache.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TldLocationsCache.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- TldLocationsCache.java 2 Sep 2003 21:39:59 -0000 1.20
+++ TldLocationsCache.java 23 Sep 2003 01:19:52 -0000 1.21
@@ -203,9 +203,8 @@
if (initialized) return;
try {
processWebDotXml();
- processJars();
+ scanJars();
processTldsInFileSystem("/WEB-INF/");
- processTldsInGlobalJars();
initialized = true;
} catch (Exception ex) {
throw new JasperException(Localizer.getMessage("jsp.error.internal.tldinit",
@@ -265,39 +264,15 @@
}
/**
- * Processes any JAR files contained in this web application's
- * WEB-INF/lib directory.
- */
- private void processJars() throws Exception {
-
- Set libSet = ctxt.getResourcePaths("/WEB-INF/lib");
- if (libSet != null) {
- Iterator it = libSet.iterator();
- while (it.hasNext()) {
- String resourcePath = (String) it.next();
- if (resourcePath.endsWith(JAR_FILE_SUFFIX)) {
- URL url = ctxt.getResource(resourcePath);
- if (url == null)
- return;
- URL jarURL = new URL("jar:" + url.toString() + "!/");
- processTldsInJar((JarURLConnection) jarURL.openConnection(),
- false);
- }
- }
- }
- }
-
- /**
- * Parses any TLD files located in the META-INF directory (or any
- * subdirectory of it) of the JAR file at the given resource path, and adds
- * an implicit map entry to the taglib map for any TLD that has a <uri>
- * element.
+ * Scans the given JarURLConnection for TLD files located in META-INF
+ * (or a subdirectory of it), adding an implicit map entry to the taglib
+ * map for any TLD that has a <uri> element.
*
- * @param conn The JarURLConnection to the JAR file containing the TLDs
+ * @param conn The JarURLConnection to the JAR file to scan
* @param ignore true if any exceptions raised when processing the given
* JAR should be ignored, false otherwise
*/
- private void processTldsInJar(JarURLConnection conn, boolean ignore)
+ private void scanJar(JarURLConnection conn, boolean ignore)
throws JasperException {
JarFile jarFile = null;
@@ -421,16 +396,20 @@
}
/*
- * Processes any TLDs in all JAR files accessible to all parent
- * classloaders of the web application's classloader.
+ * Scans all JARs accessible to the webapp's classloader and its
+ * parent classloaders for TLDs.
+ *
+ * The list of JARs always includes the JARs under WEB-INF/lib, as well as
+ * all shared JARs in the classloader delegation chain of the webapp's
+ * classloader.
*
- * This is a Tomcat-specific extension to the TLD search order defined in
- * the JSP spec, which will allow tag libraries packaged as JAR
+ * The latter constitutes a Tomcat-specific extension to the TLD search
+ * order defined in the JSP spec. It allows tag libraries packaged as JAR
* files to be shared by web applications by simply dropping them in a
* location that all web applications have access to (e.g.,
* <CATALINA_HOME>/common/lib).
*/
- private void processTldsInGlobalJars() throws Exception {
+ private void scanJars() throws Exception {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
while (loader != null) {
@@ -439,14 +418,14 @@
for (int i=0; i<urls.length; i++) {
URLConnection conn = urls[i].openConnection();
if (conn instanceof JarURLConnection) {
- processTldsInJar((JarURLConnection) conn, true);
+ scanJar((JarURLConnection) conn, true);
} else {
String urlStr = urls[i].toString();
if (urlStr.startsWith(FILE_PROTOCOL)
&& urlStr.endsWith(JAR_FILE_SUFFIX)) {
URL jarURL = new URL("jar:" + urlStr + "!/");
- processTldsInJar((JarURLConnection)
- jarURL.openConnection(), true);
+ scanJar((JarURLConnection) jarURL.openConnection(),
+ true);
}
}
}