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 2002/08/21 01:35:31 UTC
cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler Compiler.java ParserController.java TagFileProcessor.java TagLibraryInfoImpl.java
luehe 2002/08/20 16:35:31
Modified: jasper2/src/share/org/apache/jasper
JspCompilationContext.java
jasper2/src/share/org/apache/jasper/servlet
JspServletWrapper.java
jasper2/src/share/org/apache/jasper/compiler Compiler.java
ParserController.java TagFileProcessor.java
TagLibraryInfoImpl.java
Log:
Added support for tag files packaged in JARs.
Revision Changes Path
1.17 +27 -8 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspCompilationContext.java
Index: JspCompilationContext.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspCompilationContext.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- JspCompilationContext.java 20 Aug 2002 19:30:29 -0000 1.16
+++ JspCompilationContext.java 20 Aug 2002 23:35:30 -0000 1.17
@@ -63,7 +63,7 @@
import java.io.*;
import java.net.*;
-import java.util.Set;
+import java.util.*;
import javax.servlet.ServletContext;
import javax.servlet.jsp.tagext.TagInfo;
@@ -89,6 +89,9 @@
*/
public class JspCompilationContext {
+ private Hashtable tagFileJars;
+ private boolean isPackagedTagFile;
+
protected String servletClassName;
protected String jspUri;
private boolean isErrPage;
@@ -148,6 +151,8 @@
baseURI += '/';
}
this.rctxt=rctxt;
+
+ this.tagFileJars = new Hashtable();
}
public JspCompilationContext(String tagfile,
@@ -155,12 +160,16 @@
Options options,
ServletContext context,
JspServletWrapper jsw,
- JspRuntimeContext rctxt) {
+ JspRuntimeContext rctxt,
+ Hashtable tagFileJars) {
this(tagfile, false, options, context, jsw, rctxt);
this.isTagFile = true;
this.tagInfo = tagInfo;
- return;
+ this.tagFileJars = tagFileJars;
+ if (tagFileJars != null && tagFileJars.get(tagfile) != null) {
+ isPackagedTagFile = true;
+ }
}
/* ==================== Methods to override ==================== */
@@ -268,7 +277,17 @@
}
return path;
}
-
+
+ /**
+ * Returns the tag-file-to-JAR-file mapping for tag files packaged in JARs.
+ *
+ * The mapping uses the tag file name as the key, and the JAR file
+ * containing the tag file as the value.
+ */
+ public Hashtable getTagFileJars() {
+ return tagFileJars;
+ }
+
/* ==================== Common implementation ==================== */
/**
@@ -521,7 +540,7 @@
public void compile() throws JasperException, FileNotFoundException {
createCompiler();
- if (jspCompiler.isOutDated()) {
+ if (isPackagedTagFile || jspCompiler.isOutDated()) {
try {
jspCompiler.compile();
reload = true;
1.13 +7 -5 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServletWrapper.java
Index: JspServletWrapper.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServletWrapper.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- JspServletWrapper.java 6 Aug 2002 00:11:36 -0000 1.12
+++ JspServletWrapper.java 20 Aug 2002 23:35:30 -0000 1.13
@@ -72,6 +72,7 @@
import java.io.IOException;
import java.io.FileNotFoundException;
+import java.util.Hashtable;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.MalformedURLException;
@@ -134,14 +135,15 @@
*/
public JspServletWrapper(ServletContext servletContext, Options options,
String tagFilePath, TagInfo tagInfo,
- JspRuntimeContext rctxt)
+ JspRuntimeContext rctxt, Hashtable tagFileJars)
throws JasperException {
this.config = null; // not used
this.options = options;
this.jspUri = tagFilePath;
ctxt = new JspCompilationContext(jspUri, tagInfo, options,
- servletContext, this, rctxt);
+ servletContext, this, rctxt,
+ tagFileJars);
// Store tag file .java and .class files in standard location
// (/tagfiles/org/apache/jsp/), regardless of the original tag file
1.30 +1 -1 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java
Index: Compiler.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- Compiler.java 20 Aug 2002 19:35:24 -0000 1.29
+++ Compiler.java 20 Aug 2002 23:35:30 -0000 1.30
@@ -193,7 +193,7 @@
* Compile the jsp file from the current engine context
*/
public void generateJava()
- throws FileNotFoundException, JasperException, Exception
+ throws Exception
{
long t1=System.currentTimeMillis();
// Setup page info area
1.13 +25 -12 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java
Index: ParserController.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- ParserController.java 20 Aug 2002 15:50:22 -0000 1.12
+++ ParserController.java 20 Aug 2002 23:35:30 -0000 1.13
@@ -56,6 +56,8 @@
import java.io.*;
import java.util.*;
+import java.util.zip.*;
+import java.util.jar.*;
import javax.servlet.jsp.tagext.*;
import org.xml.sax.InputSource;
import org.xml.sax.Attributes;
@@ -154,7 +156,7 @@
* @param inFileName The name of the JSP file to be parsed.
*/
public Node.Nodes parse(String inFileName)
- throws FileNotFoundException, JasperException {
+ throws FileNotFoundException, JasperException, IOException {
return parse(inFileName, null);
}
@@ -166,15 +168,18 @@
* @param parent The node for the 'include' directive.
*/
public Node.Nodes parse(String inFileName, Node parent)
- throws FileNotFoundException, JasperException {
+ throws FileNotFoundException, JasperException, IOException {
Node.Nodes parsedPage = null;
- String absFileName = resolveFileName(inFileName);
String encoding = topFileEncoding;
InputStreamReader reader = null;
+ String absFileName = resolveFileName(inFileName);
+
+ JarFile jarFile = (JarFile) ctxt.getTagFileJars().get(inFileName);
+
try {
// Figure out what type of JSP document we are dealing with
- reader = getReader(absFileName, encoding);
+ reader = getReader(absFileName, encoding, jarFile);
figureOutJspDocument(absFileName, encoding, reader);
if (newEncoding != null)
encoding = newEncoding;
@@ -193,7 +198,7 @@
// dispatch to the proper parser
- reader = getReader(absFileName, encoding);
+ reader = getReader(absFileName, encoding, jarFile);
if (isXml) {
parsedPage = JspDocumentParser.parse(this, absFileName,
reader, parent,
@@ -332,17 +337,25 @@
return fileName;
}
- private InputStreamReader getReader(String file, String encoding)
- throws FileNotFoundException, JasperException
- {
+ private InputStreamReader getReader(String file, String encoding,
+ JarFile jarFile)
+ throws FileNotFoundException, JasperException, IOException {
+
InputStream in;
InputStreamReader reader;
+ if (jarFile != null) {
+ ZipEntry jarEntry =
+ jarFile.getEntry(file.substring(1, file.length()));
+ in = jarFile.getInputStream(jarEntry);
+ } else {
+ in = ctxt.getResourceAsStream(file);
+ }
+ if (in == null) {
+ throw new FileNotFoundException(file);
+ }
+
try {
- in = ctxt.getResourceAsStream(file);
- if (in == null) {
- throw new FileNotFoundException(file);
- }
return new InputStreamReader(in, encoding);
} catch (UnsupportedEncodingException ex) {
throw new JasperException(
1.15 +8 -4 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java
Index: TagFileProcessor.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- TagFileProcessor.java 20 Aug 2002 15:50:22 -0000 1.14
+++ TagFileProcessor.java 20 Aug 2002 23:35:30 -0000 1.15
@@ -63,7 +63,7 @@
package org.apache.jasper.compiler;
import java.util.*;
-import java.io.FileNotFoundException;
+import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.jsp.tagext.*;
@@ -317,6 +317,9 @@
} catch (FileNotFoundException e) {
pc.getCompiler().getErrorDispatcher().jspError(
"jsp.error.file.not.found", tagfile);
+ } catch (IOException e) {
+ pc.getCompiler().getErrorDispatcher().jspError(
+ "jsp.error.file.not.found", tagfile);
}
TagFileVisitor tagFileVisitor = new TagFileVisitor(pc.getCompiler(),
@@ -344,7 +347,8 @@
ctxt.getOptions(),
tagFilePath,
tagInfo,
- ctxt.getRuntimeContext());
+ ctxt.getRuntimeContext(),
+ ctxt.getTagFileJars());
}
}
}
1.12 +13 -8 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java
Index: TagLibraryInfoImpl.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- TagLibraryInfoImpl.java 19 Aug 2002 16:54:16 -0000 1.11
+++ TagLibraryInfoImpl.java 20 Aug 2002 23:35:30 -0000 1.12
@@ -192,7 +192,7 @@
err.jspError("jsp.error.file.not.found", location[0]);
}
// Now parse the tld.
- parseTLD(ctxt, location[0], in);
+ parseTLD(ctxt, location[0], in, null);
} else {
// Location points to a jar file
// tag library in jar file
@@ -214,7 +214,7 @@
jarFile = conn.getJarFile();
jarEntry = jarFile.getEntry(location[1]);
stream = jarFile.getInputStream(jarEntry);
- parseTLD(ctxt, location[0], stream);
+ parseTLD(ctxt, location[0], stream, jarFile);
// FIXME @@@
// -- it seems that the JarURLConnection class caches JarFile
// objects for particular URLs, and there is no way to get
@@ -248,7 +248,7 @@
}
private void parseTLD(JspCompilationContext ctxt,
- String uri, InputStream in)
+ String uri, InputStream in, JarFile jarFile)
throws JasperException
{
Vector tagVector = new Vector();
@@ -286,7 +286,8 @@
else if ("tag".equals(tname))
tagVector.addElement(createTagInfo(element));
else if ("tag-file".equals(tname))
- tagFileVector.addElement(createTagFileInfo(element, uri));
+ tagFileVector.addElement(createTagFileInfo(element, uri,
+ jarFile));
else if ("function".equals(tname)) // JSP2.0
functionVector.addElement(createFunctionInfo(element));
else if ("display-name".equals(tname) || // Ignored elements
@@ -429,7 +430,8 @@
*
* @return TagInfo correspoding to tag file directives
*/
- private TagFileInfo createTagFileInfo(TreeNode elem, String uri)
+ private TagFileInfo createTagFileInfo(TreeNode elem, String uri,
+ JarFile jarFile)
throws JasperException {
String name = null;
@@ -455,6 +457,9 @@
if (!path.startsWith("/")) {
// relative to uri of TLD file
path = uri.substring(0, uri.lastIndexOf("/") + 1) + path;
+ } else if (path.startsWith("/META-INF/tags")) {
+ // Tag file packaged in JAR
+ ctxt.getTagFileJars().put(path, jarFile);
}
TagInfo tagInfo = TagFileProcessor.parseTagFile(parserController,
name, path,
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>