Tomcat启动过程(一):从BootStrap到EndPonit
2016-03-13 14:07
609 查看
Tomcat版本tomcat6.0.44
观察catalina.sh文件,启动入口:org.apache.catalina.startup.Bootstrap,
该类main方法执行下面三个方法
-------------------------------------------------
init() load() start()
得到Catalina实例 | |
| |
| |
| |
| |
catalina.java | |
-----------------------↓---------------------↓-------------
load() start() Catalina的load()方法:
| | a、调用initDirs和initNaming()做tmp路径和命名的初始化。
| | b、调用 createStartDigester();生成Digester对象。Digester类负责进行配置文件的解析。
| | c、加载配置文件(server.xml),获取输入流InputStream对象
| | d、利用Digester解析配置文件输入流,解析之后,获取配置的root节点表示对象,也就是Server对象。
| | e、对上一步生成的server对象进行初始化,调用initialize()启动
standServer.java | |
-----------------------↓---------------------↓-------------
initialize() start() Server遍历下属的多个Service,调用每一个server的initialize()/start()
| |
| |
| |
| |
standService.java | |
-----------------------↓---------------------↓-------------
initialize() start()
| |
| |
| |
| |
connector.java | |
-----------------------↓---------------------↓-------------
initialize() container.start()------>容器Engine.start(),先不关注
| executor.start()------->线程池执行器初始化,该线程做什么用?
| connector.start()------>遍历所有的下属connector,并分别start(),重点分析
| |
| | Connector的initialize()方法:
| | a、protocolHander.setAdapter(new CoyoteAdapter(this))
| | b、调用protocolHander的init()方法
| |
| |
Http11NioProtocol.java |
-----------------------↓---------------------↓-------------
init() start()
| | HTTP1ApiProtocol的init()方法:
| | a、ep.sethander(Http11ConnectionHandler)
| | b、调用ep的init
NioEndpoint.java | |
-----------------------↓---------------------↓-------------
init() start()
观察catalina.sh文件,启动入口:org.apache.catalina.startup.Bootstrap,
该类main方法执行下面三个方法
-------------------------------------------------
init() load() start()
得到Catalina实例 | |
| |
| |
| |
| |
catalina.java | |
-----------------------↓---------------------↓-------------
load() start() Catalina的load()方法:
| | a、调用initDirs和initNaming()做tmp路径和命名的初始化。
| | b、调用 createStartDigester();生成Digester对象。Digester类负责进行配置文件的解析。
| | c、加载配置文件(server.xml),获取输入流InputStream对象
| | d、利用Digester解析配置文件输入流,解析之后,获取配置的root节点表示对象,也就是Server对象。
| | e、对上一步生成的server对象进行初始化,调用initialize()启动
standServer.java | |
-----------------------↓---------------------↓-------------
initialize() start() Server遍历下属的多个Service,调用每一个server的initialize()/start()
| |
| |
| |
| |
standService.java | |
-----------------------↓---------------------↓-------------
initialize() start()
| |
| |
| |
| |
connector.java | |
-----------------------↓---------------------↓-------------
initialize() container.start()------>容器Engine.start(),先不关注
| executor.start()------->线程池执行器初始化,该线程做什么用?
| connector.start()------>遍历所有的下属connector,并分别start(),重点分析
| |
| | Connector的initialize()方法:
| | a、protocolHander.setAdapter(new CoyoteAdapter(this))
| | b、调用protocolHander的init()方法
| |
| |
Http11NioProtocol.java |
-----------------------↓---------------------↓-------------
init() start()
| | HTTP1ApiProtocol的init()方法:
| | a、ep.sethander(Http11ConnectionHandler)
| | b、调用ep的init
NioEndpoint.java | |
-----------------------↓---------------------↓-------------
init() start()
NioEndpoint.init() { ServerSocketChannel serverSock = ServerSocketChannel.open(); //server通道初始化 serverSock.socket().bind(addr,backlog); //绑定地址,开始进行监听accecpt事件 NioSelectorPool selectorPool.open();//选择器池初始化 …… } NioEndpoint.start() { //初始化处理线程池,该线程用来处理数据请求 executor = new ThreadPoolExecutor(getMinSpareThreads(), getMaxThreads(), 60, TimeUnit.SECONDS,taskqueue, tf); //初始化poller后台线程组 for() { Thread pollerThread = new Thread(pollers[i], getName() + "-ClientPoller-"+i); pollerThread.start(); } //初始化acceptor后台线程组 for() { Thread acceptorThread = new Thread(new Acceptor(), getName() + "-Acceptor-" + i); acceptorThread.start(); } …… }
相关文章推荐
- Tomcat 6 --- JNDI详解
- Tomcat下的JAAS实例
- Myeclipse中启动tomcat 端口被占用问题
- Linux下jvm与tomcat的安全与优化
- IT忍者神龟之在Tomcat配置JNDI数据源的三种方式
- Tomcat数据源
- Eclipse配置tomcat发布路径的问题
- 使用hibernate3的项目从tomcat7转到weblogic时,遇到了ClassNotFoundException: org.hibernate.hql.internal.ast.HqlToke
- war包部署到tomcat
- Ubuntu中如何将Tomcat端口改为80
- MyEclipse下配置Tomcat7
- tomcat的端口修改后在eclipse中自动恢复
- tomcat war包解压规则
- tomcat如何利用自带工具查看tomcat信息
- CentOS 安装 Tomcat
- Tomcat发布Maven项目遇到的种种异常
- jfinal 发布到tomcat使用共享目录中的jar问题
- 解决Struts2.3.2配合Tomcat8出现could't clear cache问题
- linux下搭建tomcat服务
- tomcat配置 —— 各个目录的作用