По какой-то причине кажется, что Tomcat пытается поразить свой кеш компиляции, когда компиляция не удалась.
Например, если я создаю JSP, содержащий только Hello, <%=world%>!
, как и ожидалось, я получаю ошибку: org.apache.jasper.JasperException: Unable to compile class for JSP
. Последующие запросы, однако, чередуются между этим и org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to load class for JSP
.
Кроме того, если я создам JSP, содержащий Hello!
, это, конечно, отлично работает. Если я изменю, он содержит Hello, <%=name%>!
, ответ будет чередоваться между упомянутой ранее ошибкой компиляции и кешированным Hello!
.
В чем дело?
Наконец-то я нашел решение. Очевидно, JSP проверяются каждые interval
для изменений по соображениям производительности. Вместо этого можно настроить Tomcat для проверки каждого запроса.
В web.xml
, искать:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
и добавить:
<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>
Кредит на блог Альберта за то, что указал мне в правильном направлении.
РЕДАКТИРОВАТЬ: я также нашел эта ошибка, что, по-видимому, предполагает наличие некоторых ошибок со стороны Tomcat.