Author: markt
Date: Wed Nov 27 20:33:31 2013
New Revision: 1546185
URL: http://svn.apache.org/r1546185
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55807
The JSP compiler used a last modified time of -1 for TLDs in JARs expanded in
to WEB-INF/classes (IDEs often do this expansion) when creating the dependency
list for JSPs that used that TLD. This meant JSPs using that TLD were
recompiled on every access.
Added:
tomcat/tc7.0.x/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/bug55807.tld
- copied, changed from r1546176,
tomcat/trunk/test/webapp/WEB-INF/classes/META-INF/bug55807.tld
tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug55807.jsp
- copied, changed from r1546176,
tomcat/trunk/test/webapp/bug5nnnn/bug55807.jsp
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/jasper/JspCompilationContext.java
tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestCompiler.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1546172
Modified: tomcat/tc7.0.x/trunk/java/org/apache/jasper/JspCompilationContext.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/jasper/JspCompilationContext.java?rev=1546185&r1=1546184&r2=1546185&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/jasper/JspCompilationContext.java
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/jasper/JspCompilationContext.java Wed
Nov 27 20:33:31 2013
@@ -22,6 +22,8 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.JarURLConnection;
import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLConnection;
@@ -432,6 +434,15 @@ public class JspCompilationContext {
public Long getLastModified(String resource) {
long result = -1;
+ if (resource.startsWith("file:/")) {
+ File f;
+ try {
+ f = new File(new URI(resource));
+ } catch (URISyntaxException e) {
+ return Long.valueOf(-1);
+ }
+ return Long.valueOf(f.lastModified());
+ }
URLConnection uc = null;
try {
URL jspUrl = getResource(resource);
Modified: tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestCompiler.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestCompiler.java?rev=1546185&r1=1546184&r2=1546185&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestCompiler.java
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/jasper/compiler/TestCompiler.java Wed
Nov 27 20:33:31 2013
@@ -25,11 +25,14 @@ import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import org.junit.Assert;
import org.junit.Test;
+import org.apache.catalina.Context;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.startup.TomcatBaseTest;
import org.apache.tomcat.util.buf.ByteChunk;
+import org.apache.tomcat.util.scan.StandardJarScanner;
public class TestCompiler extends TomcatBaseTest {
@@ -220,6 +223,39 @@ public class TestCompiler extends Tomcat
// it fails
}
+ @Test
+ public void testBug55807() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ File appDir = new File("test/webapp-3.0");
+ Context context = tomcat.addWebapp(null, "/test",
appDir.getAbsolutePath());
+ ((StandardJarScanner)
context.getJarScanner()).setScanAllDirectories(true);
+ tomcat.start();
+
+ ByteChunk res = new ByteChunk();
+ Map<String,List<String>> headers = new HashMap<String,List<String>>();
+
+ getUrl("http://localhost:" + getPort() + "/test/bug5nnnn/bug55807.jsp",
+ res, headers);
+
+ // Check request completed
+ String result = res.toString();
+ assertEcho(result, "OK");
+
+ // Check the dependencies count
+ Assert.assertTrue(result.contains("<p>DependenciesCount: 1</p>"));
+
+ // Check the right timestamp was used in the dependency
+ File tld = new
File("test/webapp-3.0/WEB-INF/classes/META-INF/bug55807.tld");
+ String expected = "/WEB-INF/classes/META-INF/bug55807.tld : " +
+ tld.lastModified() + "</p>";
+ Assert.assertTrue(result.contains(expected));
+
+
+ // Check content type
+
Assert.assertTrue(headers.get("Content-Type").get(0).startsWith("text/html"));
+ }
+
/** Assertion for text printed by tags:echo */
private static void assertEcho(String result, String expected) {
assertTrue(result, result.indexOf("<p>" + expected + "</p>") > 0);
Copied:
tomcat/tc7.0.x/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/bug55807.tld
(from r1546176, tomcat/trunk/test/webapp/WEB-INF/classes/META-INF/bug55807.tld)
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/bug55807.tld?p2=tomcat/tc7.0.x/trunk/test/webapp-3.0/WEB-INF/classes/META-INF/bug55807.tld&p1=tomcat/trunk/test/webapp/WEB-INF/classes/META-INF/bug55807.tld&r1=1546176&r2=1546185&rev=1546185&view=diff
==============================================================================
(empty)
Copied: tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug55807.jsp (from
r1546176, tomcat/trunk/test/webapp/bug5nnnn/bug55807.jsp)
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug55807.jsp?p2=tomcat/tc7.0.x/trunk/test/webapp-3.0/bug5nnnn/bug55807.jsp&p1=tomcat/trunk/test/webapp/bug5nnnn/bug55807.jsp&r1=1546176&r2=1546185&rev=1546185&view=diff
==============================================================================
(empty)
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1546185&r1=1546184&r2=1546185&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Wed Nov 27 20:33:31 2013
@@ -222,6 +222,17 @@
</add>
</changelog>
</subsection>
+ <subsection name="Jasper">
+ <changelog>
+ <fix>
+ <bug>55807</bug>: The JSP compiler used a last modified time of -1 for
+ TLDs in JARs expanded in to WEB-INF/classes (IDEs often do this
+ expansion) when creating the dependency list for JSPs that used that
+ TLD. This meant JSPs using that TLD were recompiled on every access.
+ (markt)
+ </fix>
+ </changelog>
+ </subsection>
<subsection name="Cluster">
<changelog>
<add>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]