Tomcat 架构分析(二)
ClassLoader详解
前言:
上一节提到,Tomcat的五个子模块:
Jsper模块
、
Servlet和Jsp模块
、
Catalina模块
、
Connector模块
、
Resource模块
,本节是对lib包下的
详细讲解,以及Tomcat是如何加载类(
ClassLoader
)
1.简介
与许多服务器应用程序一样,Tomcat安装了各种类装入器(也就是实现java.lang.classloader的类),以允许容器的不同部分和在容器上运行的web应用程序访问不同的可用类和资源的存储库。
该机制用于提供Servlet规范中定义的功能。
在Java环境中,类装入器被安排在父-子树中。
通常,当一个类装入器被要求装入一个特定的类或资源时,它首先将请求委托给父类装入器,然后只在父类装入器(s)不能找到所请求的类或资源时才查找它自己的存储库。
请注意,web应用程序类加载器的模型与下面略有不同,但主要原则是相同的。
在启动Tomcat时,它会创建一组类装入器,这些装入器会被组织到下面的父-子关系中,其中父类装入器位于子类装入器之上:
2.类加载的定义
如上图所示,Tomcat在初始化时创建了以下类加载器:
1.Bootstrap
——
这个类装入器包含Java虚拟机提供的基本运行时类,以及从系统扩展目录(javahome/jre/lib/ext)中提供的JAR文件的任何类。
注意:有些jvm可能会将它作为一个以上的类装入器来实现,或者它可能不可见(作为一个类装入器)。
2.System ——
这个类装入器通常从CLASSPATH环境变量的内容中初始化。
对于Tomcat内部类和web应用程序,所有这些类都是可见的。
然而,标准的Tomcat启动脚本($catalinahome/bin/catalina.
sh或%catalinhome%bin catalina.bat)完全忽略CLASSPATH环境变量本身的内容,
而是从以下存储库构建系统类装入器:

本文详细探讨了Tomcat的架构,重点分析了ClassLoader的角色和工作原理。从$CATALINA_HOME/bin目录下的核心JAR文件开始,如bootstrap.jar、tomcat-juli.jar等,到各种关键组件如catalina.jar、jasper.jar和tomcat-jdbc.jar,解释了它们在Tomcat启动和运行中的作用。同时,提到了Tomcat的国际化选项、WebSocket实现以及类加载的层次结构,包括WEB-INF目录下应用的类和库。此外,还提供了作者的联系方式以供技术交流。
最低0.47元/天 解锁文章
953

被折叠的 条评论
为什么被折叠?



