文章插图
一: 生命周期Tomcat 为了方便管理组件和容器的生命周期,定义了从创建、启动、到停止、销毁共 12 中状态,tomcat 生命周期管理了内部状态变化的规则控制,组件和容器只需实现相应的生命周期 方法即可完成各生命周期内的操作(initInternal、startInternal、stopInternal、 destroyInternal) 。
Tomcat 的生命周期管理引入了事件机制,在组件或容器的生命周期状态发生变化时会通 知事件监听器,监听器通过判断事件的类型来进行相应的操作 。事件监听器的添加可以在 server.xml 文件中进行配置 。
Tomcat 各类容器的配置过程就是通过添加 listener 的方式来进行的,从而达到配置逻辑与 容器的解耦 。
EngineConfig:主要打印start和stop事件的debug日志HostConfig:主要处理部署应用,解析应用 META-INF/context.xml 并创建应用的 ContextContextConfig:主要解析并合并 web.xml,扫描应用的各类 web 资源 (filter、servlet、listener)请求的处理流程容器的责任链模式:
请求被Connector组件接收,创建Request和Response对象 。Connector将Request和Response交给Container,先通过Engine的pipeline组件流经内部的每个Valve 。请求流转到Host的pipeline组件中,并且经过内部Valve的过滤 。请求流转到Context的pipeline组件中,并且经过内部的Valve的过滤 。请求流转到Wrapper的pipeline组件中,并且经过内部的Valve的过滤 。Wrapper内部的WrapperValve创建FilterChain实例,调用指定的Servlet实例处理请求 。返回结果2: 类加载机制 双亲委派模型:
Bootstrap ClassLoader :启动类加载器,负责加载 Java 的核心类,它不是 java.lang.ClassLoader 的子类,而是由 JVM自身实现,null c,c++实现的,加载jre/libExtension ClassLoader :扩展类加载器,扩展类加载器的加载路径是 JDK 目录下 jre/lib/ext。扩展加载器的 #getParent() 方法返回 null,实际上扩展类加载器的父类加载器是启动类加载器 。System ClassLoader :系统(应用)类加载器,它负责在 JVM 启动时加载来自 Java 命令的 -classpath 选项、java.class.path 系统属性或 CLASSPATH 环境变量所指定的 jar 包和类路径 。程序可以通过 #getSystemClassLoader() 来获取系统类加载器 。系统加载器的加载路径是程序运行的当前路径 。ClassLoader#loadClass(java.lang.String, boolean)
jvm如何确定一个class唯一性: 全类名(包名+类名)+ classLoader的id
类的加载过程:
类加载器:
Tomcat 拥有不同的自定义类加载器,以实现对各种资源库的控制 。Tomcat 主要用类加载器解决以下 4 个问题:
同一个 Web 服务器里,各个 Web 项目之间各自使用的 Java 类库要互相隔离 。同一个 Web 服务器里,各个 Web 项目之间可以提供共享的 Java 类库。为了使服务器不受 Web 项目的影响,应该使服务器的类库与应用程序的类库互相独立 。对于支持 JSP 的 Web 服务器,应该支持热插拔(HotSwap)功能。Tomcat提供了四组目录供用户存放第三方类库:
放置在/common目录中:类库可被Tomcat和所有的 Web应用程序共同使用 。放置在/server目录中:类库可被Tomcat使用,对所有的Web应用程序都不可见 。放置在/shared目录中:类库可被所有的Web应用程序共同使用,但对 Tomcat自己不可见 。放置在/WebApp/WEB-INF目录中:类库仅仅可以被此Web应用程序使用,对 Tomcat和其他Web应用程序都不可见 。Tomcat自定义了多个类加载器,CommonClassLoader、CatalinaClassLoader、SharedClassLoader和WebappClassLoader则是Tomcat自己定义的类加载器,它们分别加载/common/、/server/、/shared/和/WebApp/WEB-INF/中的Java类库 。其中WebApp类加载器和Jsp类加载器通常会存在多个实例,每一个Web应用程序对应一个WebApp类加载器,每一个JSP文件对应一个Jsp类加载器 。
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 服务器内存清理命令 Linux内存缓存清理命令。
- 10首有关儿童的古诗词鉴赏 儿童诗
- 拔牙后的棉花吃进去有没有关系
- 有关数字货币知识解读 数字货币的开源代码是什么意思
- 怎样确定恋爱关系?与这些现象有关
- 检测故障方式和解决方案 lol无法链接服务器是什么意思
- 抖音极速版金币溜走了怎么办
- 9个令人津津乐道的恐龙小故事 有关恐龙的小故事
- 脱发和脾胃有关吗
- 华为欧拉服务器操作系统 华为正式捐赠欧拉操作系统