For some reason, it appears Tomcat is trying to hit its compilation cache when compilation failed.
For example, if I create a JSP containing nothing but Hello, <%=world%>!
, predictably, I get an error: org.apache.jasper.JasperException: Unable to compile class for JSP
. Subsequent requests however alternate between this and org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to load class for JSP
.
Further, if I create a JSP containing Hello!
, it of course works just fine. If I modify it contain Hello, <%=name%>!
, the response alternates between the previously-mentioned compilation error, and the cached Hello!
.
What's going on?
I finally found a solution. Apparently, JSPs are checked every
interval
for changes for performance reasons. It is possible to configure Tomcat to check on every request instead.In
web.xml
, look for:and add:
Credit to albert's blog for pointing me in the right direction.
EDIT: I also found this bug, which seems to suggest that some buggy behaviour on the part of Tomcat is involved.