为什么编译失败时Tomcat会尝试使用缓存?

为什么编译失败时Tomcat会尝试使用缓存?

由于某种原因,当编译失败时,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 方面存在一些错误行为。

相关内容