• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Tomcat中的几种类加载器介绍

java 搞代码 4年前 (2022-01-09) 64次浏览 已收录 0个评论

学习tomcat类加载器,首先得先看下JVM提供了几种类加载器,毕竟tomcat类加载器是依赖于JVM类加载器的。

JVM类加载器:引导类加载器(bootstrapclassloader)、扩展类加载器(extension classloader)、系统类加载器(又称应用类加载器,system classloader)。引导类加载器是扩展类加载器的父加载器,而扩展类加载器又是系统类加载器的父加载器。

(1) Bootstrap Classloader 是JVM 利用JNI的方式采用C语言实现的(即它并不是Java.lang.ClassLoader的子类)。负责加载%JAVA_HOME%\lib下的类库或者是由-Xbootclasspath选项或使用-D选项指定sun.boot.class.path系统属性指定的类。

(2) Extension ClassLoader 由sun.misc.Launcher$ExtClassLoader实现,负责加载%JAVA_HOME%\jre\lib\ext中的类库或者是由系统变量java.ext.dirs指定的类库。

(3) System ClassLoader 由sum.misc.Launcher$AppClassLoader实现,负责加载java应用涉及到的类。加载器可以通过ClassLoader.getSystemClassLoader()来获取

tomcat启动时,会创建几种类加载器:

1 Bootstrap 引导类加载器

加载JVM启动所需的类,以及标准扩展类,位于jre/lib/ext下。

2 System 系统类加载器

加载tomcat启动的类,比如bootstrap.jar,通常在catalina.bat或者catalina.sh中指定。位于CATALINA_HOME/bin下。

3 Common 通用类加载器

加载tomcat使用以及应用通用的一些类,位于CATALINA_HOME/lib下,比如servlet-api.jar

4 webapp 应用类加载器

每个应用在部署后,都会创建一个唯一的类加载器。该类加载器会加载位于 WEB-INF/lib下的jar文件中的classWEB-IN

本文来源gao!%daima.com搞$代*!码$网9

F/classes下的class文件

当应用需要到某个类时,则会按照下面的顺序进行类加载

1 使用bootstrap引导类加载器加载

2 使用system系统类加载器加载

3 使用应用类加载器在WEB-INF/classes中加载

4 使用应用类加载器在WEB-INF/lib中加载

5 使用common类加载器在CATALINA_HOME/lib中加载

还有一点要讲下的是java文件放在Eclipse中的src文件夹下会优先jar包中的class:

这是因为Eclipse中的src文件夹中的文件java以及webContent中的JSP都会在tomcat启动时,被编译成class文件放在 WEB-INF/class 中。而Eclipse外部引用的jar包,则相当于放在 WEB-INF/lib 中。因此肯定是 java文件或者JSP文件编译出的class优先加载

另外还需注意在 CATALINA_HOME/lib 以及 WEB-INF/lib 中放置了不同版本的jar包,此时就会导致某些情况下报加载不到类的错误。

还有如果多个应用使用同一jar包文件,当放置了多份,就可能导致 多个应用间 出现类加载不到的错误。

以上就是Tomcat中的几种类加载器介绍的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Tomcat中的几种类加载器介绍

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址