1

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?

etheros
  • 294
  • 1
  • 8

1 Answers1

0

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:

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>

and add:

    <init-param>
        <param-name>development</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>modificationTestInterval</param-name>
        <param-value>0</param-value>
    </init-param>

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.

etheros
  • 294
  • 1
  • 8