我的項目面臨一些問題(可能是因為 Windows、防病毒軟件或兩者兼而有之)。發生的情況是以下錯誤:SEVERE: Exception Processing ErrorPage[errorCode=404, location=/404.jsp]org.apache.jasper.JasperException: org.apache.jasper.JasperException: Unable to compile class for JSP at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:565) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389) at org.apache.jasper.servlet.JspServlet._serviceJspFile(JspServlet.java:386) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:40001) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:472) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316) at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:395) at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:254) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:177) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)看起來 classFile.delete() 嘗試刪除的文件正在使用中。我們無法在防病毒軟件中添加例外......我發現 2006 年的一篇文章說“我的解決方法是修改 SmapUtil 類。如果第一次重命名失敗,它會等待 50 毫秒,然后重試(根據需要循環)。到目前為止,它總是在 50 毫秒后的第二次嘗試中起作用延遲?!蔽业膯栴}是,SmapUtil 類位于何處以及如何編輯刪除(和重命名)方法?我在任何地方都找不到此信息
2 回答

侃侃無極
TA貢獻2051條經驗 獲得超10個贊
我能夠通過更改 Tomcat 方法(刪除和重命名)來“修復”它
看起來無論它試圖刪除/重命名哪個文件,都被另一個進程(可能是防病毒程序)使用
所以我從 Tomcat 的 Github 克隆了源代碼,更改了類,瞧,它現在可以工作了。
該方法類似于:
if ( !classPath.delete(..) )
throw Exception...
然后我改變了類似的東西:
while ( !classPath.delete(..) && count < 10){
Thread.wait(50);
count++
}
if (count == 10)
Throw Exception

慕田峪4524236
TA貢獻1875條經驗 獲得超5個贊
確保您已配置 Tomcat 和 Jasper 以在生產環境中運行。
要解決您的特定問題,您可以將 Jasper 選項設置suppressSmap
為true
或預編譯 JSP 文件,或兩者兼而有之。
SMAP 為 Jasper 提供 JSR-045 支持;它創建從生成的字節碼到源 JSP 文件的映射以幫助調試。
添加回答
舉報
0/150
提交
取消