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

共享/类和war文件下的Jave类-在tomcat中加载的优先级

方谦
2023-03-14

有没有人对下面的场景有很好的理解?

类可以在tomcat中的不同位置部署。它可以是简单的。类或打包在一个jar文件中。我在这里列出了这些选项:

apache-tomcat-6.0.35\shared\类
apache-tomcat-6.0.35\shared\lib
apache-tomcat-6.0.35\lib
apache-tomcat-6.0.35\webapps\示例\web-inf\类
apache-tomcat-6.0.35\webapps\示例\web-inf\lib

如果同一个类部署在所有这些位置(类文件夹层次结构中的.class或打包在一个jar文件中并复制到*\lib\hierarchy),那么Tomcat的类加载器将使用什么规则来标识它最终将使用的类?

共有1个答案

秦天宇
2023-03-14

做了更多的研究后我找到了答案:

因此,从html" target="_blank">web应用程序的角度来看,类或资源加载将按以下顺序显示在以下存储库中:

JVM的引导程序类
系统类加载器类(如上文所述)
/WEB-INF/web应用程序的类
/WEB-INF/lib/*.jar
普通类加载器类(如上文所述)

“Common class Loader”搜索的位置由$CATALINA_BASE/CONF/CATALINA.properties中的Common.Loader属性定义。这是我们启用/定义共享位置的地方;shared.loader=${catalina.base}/shared/类,${catalina.base}/shared/lib/*.jar

而上面的顺序解释了其中的逻辑。

 类似资料:
  • 我试图覆盖JAX-WS web服务的Apache CXF实现。根据JAX-WS=当安装Apache CXF时,它“窃取”默认的JDK JAX-WS实现,如何解决?,我正在尝试创建/覆盖提供程序实现。 有了这个配置,我们就有了javax。xml。ws。spi。至少在两个JAR中提供程序:/tomcat/lib/cxf rt frontend jaxws-*。jar和我们自己的jar/tomcat/w

  • 问题内容: 我在以下情况下有一个关于保证的问题(请注意,问题不是 “如何以其他方式做到这一点?” ,实际上是关于以下情况下的类加载顺序)更好地了解类加载的工作原理)。 这是一个假设的场景…一个 .war 文件具有以下(部分)目录结构: 两个 Bunny.class 文件均已导入,并引用了 acme.jar中的 其他类。 __ Bunny.class 在 WEB-INF /班/ … 是具有相同的名称

  • 我试图通过运行“grailsdevwar”命令并将war手动部署到Tomcat容器中,在测试环境中部署grails应用程序。该应用程序没有运行,我看到几个错误日志,如下所示: ./logs/catalina.out:2014-01-13 09:18:53,415 [主] 错误上下文。GrailsContextLoader - 初始化应用程序时出错:创建名为“instanceTagLibraryAp

  • 它抛出以下错误:

  • 问题内容: 请查看下面的修改 我正在尝试创建一个 JShell实例 ,该 实例 使我可以访问它,并让我与创建它的 JVM中的 对象进行交互。这对于在编译时可用的类很好,但对于 动态 加载的类却失败了。 另外,与交换可以得到相同的结果,但是我不理解两个类之间的区别。 如何使 运行时 加载的类可用于此 JShell实例 ? 编辑:此问题的第一部分已解决,下面是更新的源代码,以演示问题的第二部分 如果

  • 当我在服务器上部署war文件时,它并没有加载css和js文件,但是当我使用spring boot运行相同的代码时,它工作得很好。下面是加载js和css文件的目录结构和配置。有谁能告诉我问题是什么吗?仅使用基于java的项目配置。在部署项目之前,我已经参考了文档中的8.1.1,并使用了与下面相同的pom文件配置。 配置文件- pom.xml文件