没有命名上下文绑定到此 class 加载程序

No naming context bound to this class loader

我在 Eclipse 中创建了一个动态 Web 项目。当我尝试在 Eclipse 中的本地 Tomcat 上 运行 它时,我们收到错误:

No naming context bound to this class loader

我尝试了一切:运行在另一个 Tomcat 版本、另一个 Eclipe 版本上安装应用程序,...

有人可以帮我解决这个问题吗?由于没有调试功能,目前这是进一步开发的障碍。

完整的错误日志是:

WARNING: Failed to retrieve JNDI naming context for container [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/PCT_TO_CPQ]] so no cleanup was performed for that container
javax.naming.NamingException: No naming context bound to this class loader
    at org.apache.naming.ContextBindings.getClassLoader(ContextBindings.java:268)
    at org.apache.catalina.deploy.NamingResourcesImpl.cleanUp(NamingResourcesImpl.java:993)
    at org.apache.catalina.deploy.NamingResourcesImpl.stopInternal(NamingResourcesImpl.java:976)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:226)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5492)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:226)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:264)
    at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:856)
    at org.apache.catalina.core.ContainerBase.destroyInternal(ContainerBase.java:1038)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:297)
    at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:856)
    at org.apache.catalina.core.ContainerBase.destroyInternal(ContainerBase.java:1038)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:297)
    at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:585)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:297)
    at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:883)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:297)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:685)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:353)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:493)

1.Try 删除服务器并重新添加。

2.Clean 项目。

您必须确保..您的动态 Web 模块版本正确。

转到:

  1. 右键单击项目
  2. 点击构建路径
  3. select 项目概况
  4. select 具有正确版本的动态 Web 模块(复选框)

在我的 tomcat 配置中,我有两个模块:我想要 运行 的实际模型和我不小心添加的另一个。第二个模型指的是在我的工作区中“关闭”的项目,这导致了我的问题。

尝试:

  • 在 Eclipse 的“服务器”选项卡下双击您的服务器
  • 在打开的 window 上转到左下角的“模块”
  • 删除不需要的模块
  • 保存

最终清理您的服务器并重新启动

在我的例子中,我有两个具有相同 urlPattern 的 restcontroller...比如:

@WebServlet(urlPatterns = { "/ws/user/login", "/ws/user/logout" })

在两个不同的控制器中。这导致了上述错误消息。

如果开发人员能够实现更少混乱的错误消息,这些实用程序和框架会更好! Spring 并且它的许多模块都充满了这些误导性错误。这让初学者很难上手。

在我的例子中,在 servlet 页面上我在 @WebServlet("/ServletName") 与 class 名称不同。

Class 名称是 CreatePage,但我忘记在 @WebServlet("/ServletName") 中更改相同的名称。

应该更改以匹配 class 名称:@WebServlet("/CreatePage")