有点乱,基本上是看代码时的笔记。
StandardServer.init
StandardService.initialize
Http11Protocol.init
JIoEndpoint.init
connector.initialize()
JkCoyoteHandler.init
JkMain.init
这里的几个类基本都实现了Lifecycle接口,这个接口非常重要。
StandardServer.start()
StandardService.start()
StandardEngine.start() --StandardEngine[Catalina], it is Container
ContainerBase.start() : 分别start 其 children
StandardHost.start()
在HostConfig.deployDirectories(当然还有deployWARs)中读出若干目录,跟别deployDirectory各个,在这里为每个
应用例如examples,创建一个Context,这里是用默认的class loader的,即:
普通的context = (Context) Class.forName(contextClass).newInstance(); 并创建ContextConfig来监听其lifecycle的事件,并
使其成为StandardHost的child,
| 利用lifecycleEvent -->start HostConfig
child|
StandardContext.init()
StandardContext.start()
利用lifecycleEvent-->start ContextConfig, ContextConfig start的时候,重点有两个:
defaultWebConfig(); -- 解析conf/web.xml 及 conf\Catalina\localhost\web.xml.default文件
applicationWebConfig(); -- 解析应用下的web.xml
都是用Digester来解析web.xml(默认是此文件)的(Digester的解析,主要利用WebRuleSet这个类,这里的用法比较复杂,暂放在这里),从里面读到servlet的配置就将他作为一个child加到Context中。每个servlet用StandardWrapper来代理,看它的声明:
public class StandardWrapper extends ContainerBase implements ServletConfig, Wrapper, NotificationEmitter
每个servlet也是container,它的context是ApplicationContextFacade (implements ServletContext)
由于每个应用有一个Context,而每个Context的start方法中都进行了defaultWebConfig,而这里的conf/web.xml和web.xml.default是所有应用共同的,说明如果一个tomcat server在启动的时候,如果有多个应用,那么default web.xml是解析了多遍,而且在各个应用的Context中都有default web.xml 中配置的servlet(默认是default和jsp两个)实例。
每个Context会有一个loader,如果没有,就加一个WebappLoader,这里有classLoader(WebappClassLoader), 还有classLoader需要的路径和jar file,包括work目录lib目录中的jar files,
所以是每个Context有自己的class loader和domain的。
在Context的start中做了很多事情,包括listenner.start(),pipeline.start(),manager.start(), filterStart()
start listenner的时候,用Context中的class loader,另外可能需要处理Annotation。
在start filter的时候,如果是Tomcat自带的filter,就用当前的class loader,否则用Context中的class loader,也可能需要处理Annotation。
每个Context有个Realm,这个有待进一步了解。
参看server.xml的配置
<Server port="8005" shutdown="SHUTDOWN">
<Listener>
<GlobalNamingResource
<Resource name="UserDatabase" auth="Container"
</GlobalNamingResources>
<Service name="Catalina"> 处理
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"/>
</Engine>
</Service>
</Server>
在server.xml中默认是定义了两个Connector的,一个事在8080(protocol="HTTP/1.1"),一个是在8009(protocol="AJP/1.3")
Connector.start()
Http11Protocol.start()
JIoEndpoint.start(): new 了一个WorkerStack(Worker(Runable对象)数组) new 了一个thread,运行Acceptor对象,用来在后台监听TCP/IP连接请求,然后将
请求分配给一个合适的processor。
这时看线程有三个:
main
ContainerBackgroundProcessor[StandardEngine(Catalina)]
http-8080-Acceptor-0
分享到:
相关推荐
详细说明了tomcat启动过程中 加载资源的顺序
详细讲解Tomcat启动的过程,了解tomcat原理
之前tomcat启动老是报错,虽然不影响项目的启动运行,但是有强迫症的程序员会心里不爽: 如下: 问题分析 由于本机安装的jdk版本与tomcat中使用的jdk版本不一致导致的。 解决方法 后面我把原先tomcat启动环境用的...
除了介绍Tomcat的启动过程,这份文档还可以帮助读者更好地理解Tomcat的内部工作原理,从而更好地进行二次开发和定制化。此外,文档中还提供了一些实用的技巧和注意事项,帮助读者更快地掌握Tomcat的使用和调试方法。...
文档中描述了tomcat不能启动的个中问题,帮你解决tomcat配置过程中出现的问题.
SpringBoot-2.7.6内置Tomcat启动以及DispatcherServlet装配过程,源码跟踪调试流程图
使用默认配置的tomcat,另外虚拟目录也可这设置: <Context path="/test" docBase="webContent" reloadable="true"/> 因为默认情况下,tomcat启动过程中配置虚拟目录的时候会从 webapps目录下查找webContent应用....
1. Tomcat 启动过程分析。分析tomcat的启动过程 2. Tomcat Web容器功能分析。分析web容器的实现方法 3. Tomcat 其他配置说明。一些我们目前应用较少的Tomcat配置项说明
Tomcat初始化流程分析,Tomcat启动流程分析 Tomcat处理一次请求过程分析 servlet初始化流程
3-8Tomcat请求容器中的处理与启动过程源码实现(1).mp4
Web应用程序在Tomcat启动前就安装好 • 动态的; 使用Tomcat Manager这个Web应用程序或者操纵已经部署的Web应用程序 Tomcat Manager 是一款工具它提供基于以URL为基础的Web应用程序部署特性。也有一种工具被称为...
Tomcat启动流程分析 组件的生命周期管理 用Lifecycle管理启动、停止、关闭 Lifecycle接口预览 几个核心方法 Server中的init方法示例 为啥StandardServer没有init方法 LifecycleBase中的init与...
将tomcat加入到本地服务中去,设置tomcat的服务自动启动,这样在服务器上通过tomcat运行的项目,即使服务器重启,tomcat也可以自动重启,这样,项目也就不会宕机了。
Digester.doc Digester.doc Digester.doc Digester.doc
主要介绍了Spring Boot启动过程(四)之Spring Boot内嵌Tomcat启动的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
主要介绍了Spring Boot启动过程(五)之Springboot内嵌Tomcat对象的start的相关资料,需要的朋友可以参考下
tomcat 8.5 的启动过程文字描述和启动过程的时序图描述 1)A text description of the startup procedure 2)A UML sequence diagram of the startup procedure
3-8Tomcat请求容器中的处理与启动过程源码实现(2).mp4
Apache+Tomcat集群配置详解 把Apache安装为运行在80端口的Windows服务,... 本文仅为讲解配置过程,Apache和tomcat均工作在同一台机器上。实际部署时没有任何限制,Apache和单个tomcat可以分别部署在不同的服务器上。
大学生学习使用docker-初学者