![为什么编译失败时Tomcat会尝试使用缓存?](https://linux22.com/image/506032/%E4%B8%BA%E4%BB%80%E4%B9%88%E7%BC%96%E8%AF%91%E5%A4%B1%E8%B4%A5%E6%97%B6Tomcat%E4%BC%9A%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%E7%BC%93%E5%AD%98%EF%BC%9F.png)
由于某种原因,当编译失败时,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!
。
这是怎么回事?
答案1
我终于找到了解决方案。显然,interval
出于性能原因,每次都会检查 JSP 是否有变化。可以配置 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>
归功于albert 的博客为我指明了正确的方向。
编辑:我还发现这个错误,这似乎表明 Tomcat 方面存在一些错误行为。