当前位置: 首页 > 知识库问答 >
问题:

tomcat中的ClassNotFoundException用于servlet代码中的内部类

颛孙建业
2023-03-14

我们有一个Web应用程序,它的实例在同一个tomcat(V6.0.14)实例下被多次部署。假设war文件名为“app.war”,然后部署“app1.war”、“app2.war”等。

java.lang.NoClassDefFoundError: com/xxx/APISocketServer$ClientRequestHandler
    at com.xxx.APISocketServer$APISocketServerThread.run(APISocketServer.java:143)
Caused by: java.lang.ClassNotFoundException: com.xxx.APISocketServer$ClientRequestHandler
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
    ... 1 more

如何继续调试此问题?

共有1个答案

鲁炳
2023-03-14

在进一步的调查中,打开文件描述符的限制(1024)被发现是罪魁祸首。每个应用程序实例都需要其类加载器(WebAppClassLoader)打开的Jar文件的副本。如果来自Jar文件的类在90秒内没有被访问,则类加载器将关闭文件。如果在短时间内访问多个应用程序实例,OpenJars函数将失败,导致类无法加载。

如果WebAppClassLoader在更高的日志级别记录打开JAR文件时的失败,那么错误就会更早发现。错误记录在调试级别。为WebAppClassLoader启用调试级别有助于解决问题。

 类似资料:
  • 在这个问题之后,自Java EE 6以来,web.xml部署文件是可选的。我目前正在使用Java EE 7,Eclipse(kepler)和apache-tomcat-7.0.47 win x64。我在Eclipse中创建了一个动态Web项目和一个服务器项目。两个项目都有部署文件(web.xml,上下文.xml)。 在web项目中编辑web.xml并在服务器上下文中运行servlet后,当尝试访问

  • 问题内容: 我在Ubuntu 13.04上的码头上运行servlet时遇到问题。使用安装服务器,并开始使用。该应用程序需要该类,但出现类未找到错误。这是堆栈跟踪: 到目前为止,我有: 1)检查了用于启动码头的命令以使用ps查找类路径: 2)检查应包含缺少类的jar: 有人可以建议我下一步该怎么做吗?谢谢。 问题答案: 将放入您的webapp的 从stacktrace中可以看到,您正在尝试从Web应

  • 我开始在eclipse中使用servlet开发java web应用程序,并在本地主机上用tomcat服务器测试它。我已经在tomcat中部署了应用程序,但是当我尝试在浏览器中加载目标url时,我得到了以下堆栈跟踪: ImageServlet类非常清楚地位于我的eclipse工作区的myproject/src/test文件夹中,其中myproject是eclipse项目的名称,test是包。 web

  • 我正在使用linux的Windows子系统,到目前为止,最好的文本编辑器体验是VS Code-内部人员和他们的WSL远程插件。然而,尽管反复努力,我只在复制功能方面取得了部分成功,在我的WSL(zsh)终端中,我可以键入或来打开代码中的目录。我确实有一个功能可以使用,在代码内部人员中打开WSL目录,但它不通过WSL接口,所以我使用的是powershell/windows环境,我想要所有的linux

  • 我在Eclipse Mars版本中测试了tomcat v8。我创建了一个动态Web项目,并创建了一个servlet。然而,当我访问HelloWorld servlet时,该网页显示错误404。请问怎么修 HelloWorld Servlet

  • 问题内容: 我正在Linux Ubuntu Natty Narwhal中运行带有Tomcat 7.0.12的Eclipse Helios Service Release 1。 我一直很高兴地重新部署我的Web应用程序,直到它毫无理由地停止工作为止。显示以下异常: 在“ 服务器” 选项卡中,“本地主机上的Tomcat v7.0服务器[已启动,已同步] 我的项目显示为Tomcat v7.0 Serve