1.Servlet容器-应用服务器
server.xml读取:(运行协议+工作模式+设置线程池)
tomcat入口程序:主方法main方法->org.apache.catalina.startup.Bootstrap
createDigster()
通过Digster去解析xml,生成对应的对象服务
Server
org.apache.catalina.startup.Bootstrap
Engine ()
Host(虚拟主机节点)
定义域名,webapp部署根包名称,是否解压war包、是否自动部署。
其实就是主要负责定义主机的域名,匹配到了去找不同的context上下文。
默认会去找localhost。
虚拟主机
Context(应用上下文节点)
标识应用上下文
层级结构
servlet(食物)->wrapper(包装)->context(外层大袋子)->Host(皮包)->Engine(汽车)
其实上上面就是一个关系层次关系包装
当我们启动一个tomcat的服务的时候,jar包和claess文件是是以怎么样的顺序被加载进来的?
加载顺序:
1.$java_home/lib 目录下的java核心api
2.$java_home/lib/ext 目录下的java扩展jar包
3.java -classpath/-Djava.class.path所指的目录下的类与jar包
4.$CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载
5.$CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载
6.$CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载
7.我们的项目路径/WEB-INF/classes下的class文件
8.我们的项目路径/WEB-INF/lib下的jar文件
在同一个文件夹下,jar包是按顺序从上到下依次加载
由ClassLoader的双亲委托模式加载机制我们可以知道,假设两个包名和类名完全相同的class文件不再同一个jar包,如果一个class文件已经被加载java虚拟机里了,那么后面的相同的class文件就不会被加载了。
网友评论