【问题标题】:500 Servlet error when running Spring-Boot Web App on Apache Tomcat - Unable to delete class file在 Apache Tomcat 上运行 Spring-Boot Web App 时出现 500 Servlet 错误 - 无法删除类文件
【发布时间】:2020-12-27 06:58:43
【问题描述】:

我一直在使用 spring-boot 开发 Web 应用程序,但在使用 apache tomcat (9.0.36) 部署时突然遇到可能的权限问题。代码都没有改变,但是 Jasper 突然无法编译我的 JSP 类文件。好像是在尝试删除tomcat部署目录下的class文件,但是失败了。

我不确定是什么原因造成的,但是当通过 MyEclipse Tomcat 运行它以及使用带有 Maven 的 spring-boot:run 命令的嵌入式 Tomcat 服务器时都会发生这种情况。以下是错误示例:

Fri Sep 04 11:04:00 EDT 2020
There was an unexpected error (type=Internal Server Error, status=500).
Unable to delete class file

堆栈跟踪:

2020-09-08 16:37:26.192 ERROR 21236 --- [nio-8080-exec-1] o.a.c.c.C.[.[localhost].[/].[jsp]        : Servlet.service() for servlet [jsp] in context with path [] threw exception [org.apache.jasper.JasperException: Unable to compile class for JSP] with root cause

java.io.IOException: Unable to delete class file [C:\Users\ek040e\Documents\Work\apache-tomcat-9.0.36\work\Catalina\localhost\ROOT\org\apache\jsp\index_jsp.class]
    at org.apache.jasper.compiler.SmapUtil$SDEInstaller.install(SmapUtil.java:180) ~[jasper.jar:9.0.36]
    at org.apache.jasper.compiler.SmapUtil.installSmap(SmapUtil.java:142) ~[jasper.jar:9.0.36]
    at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:543) ~[jasper.jar:9.0.36]
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:392) ~[jasper.jar:9.0.36]
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:362) ~[jasper.jar:9.0.36]
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:346) ~[jasper.jar:9.0.36]
    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605) ~[jasper.jar:9.0.36]
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400) ~[jasper.jar:9.0.36]
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385) ~[jasper.jar:9.0.36]
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329) ~[jasper.jar:9.0.36]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[servlet-api.jar:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:9.0.36]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.36]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.36]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.36]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.36]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[catalina.jar:9.0.36]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [catalina.jar:9.0.36]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [catalina.jar:9.0.36]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [catalina.jar:9.0.36]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [catalina.jar:9.0.36]
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) [catalina.jar:9.0.36]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [catalina.jar:9.0.36]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [catalina.jar:9.0.36]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) [tomcat-coyote.jar:9.0.36]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-coyote.jar:9.0.36]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-coyote.jar:9.0.36]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) [tomcat-coyote.jar:9.0.36]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:9.0.36]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_112]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_112]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:9.0.36]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_112]

【问题讨论】:

  • 可能是 windows - 您是否在其他地方打开了 .jsp 文件?还要确保其他进程不使用此路径 C:\Users\ek040e\Documents\Work\apache-tomcat-9.0.36\work\Catalina\localhost\ROOT\org\apache\jsp\
  • 我使用 Windows 进程资源管理器进行了检查,运行应用程序时没有使用关联的 Tomcat 工作目录的进程。

标签: java spring spring-boot jsp tomcat


【解决方案1】:

这样的事情发生在本地盒子上。它可能是您的防病毒软件或计算机上的某些其他进程或 IDE 中的并行线程。我不会担心它,直到它开始发生在一个刺激盒上。有时你只需要对整个事情进行核对并重新开始,尤其是在使用 eclipse 时。只要一切通过 maven 和命令行正常运行,我就不会太担心。

【讨论】:

  • 是的,它目前在 Prod 中没有发生,但它确实阻碍了开发,而且我无法做任何 WebDriver 硒测试......这很奇怪,因为我会得到错误,但大多数时间,刷新页面摆脱它,页面加载正常。
猜你喜欢
  • 2015-12-04
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多