Tomcat
為什麼編譯失敗時Tomcat會嘗試使用記憶體?
出於某種原因,當編譯失敗時,Tomcat 似乎正在嘗試訪問其編譯記憶體。
例如,如果我創建一個只包含 的 JSP
Hello, <%=world%>!
,可以預見的是,我會收到一個錯誤:org.apache.jasper.JasperException: Unable to compile class for JSP
. 然而,隨後的請求在 this 和org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to load class for JSP
.此外,如果我創建一個包含 的 JSP
Hello!
,它當然可以正常工作。如果我修改它包含Hello, <%=name%>!
,則響應會在前面提到的編譯錯誤和記憶體的Hello!
.這是怎麼回事?
我終於找到了解決方案。
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>
感謝阿爾伯特的部落格為我指明了正確的方向。
編輯:我還發現了這個錯誤,這似乎表明涉及到 Tomcat 的一些錯誤行為。