- 浏览: 132106 次
- 性别:
- 来自: ...
文章分类
最新评论
一直以来都是用tomcat做web服务器进行开发,很想知道其内部的一些原理和实现(虽然很多人说知道原理又不能当饭吃)。今天跟踪调试了源码的启动程序(关于源码的eclipse的导入以及ant的构建,网上有大把的资料,google一下就ok了),总算知道点大致的启动步骤,有些浅显的领悟分享一下:
org.apache.catalina.startup.Bootstrap作为启动入口,此类的main函数:
1.首先创建一个自身的实例(如果此类的实例变量:private static Bootstrap daemon为空的话);
2.然后调用init()方法,此方法的主要工作就是反射得到org.apache.catalina.startup.Catalina的实例,同时把classLoader通过Catalina的setParentClassLoader方法赋值。
3.接着调用load(args)方法,此方法反射调用Catalina的load(args),根据传递的参数设置部分属性值之后,会接着执行Catalina的load()方法。
在这个无参的方法里通过Digester组件(Jakarta Commons Digester是apache的一个解析处理xml的开源项目,开始我还以为巧合,因为struts的ActionServlet也是使用此组件解析,后来才知道tomcat的一个主力也是struts的创造者之一)解析conf/server.xml等xml文件,初始化一系列的参数。
4.接着Bootstrap的start()方法反射调用Catalina的start()方法,此方法通过调用xml解析处理后得到的server:org.apache.catalina.core.StandardServer的start()方法进入其所拥有的Lifecycle service:org.apache.catalina.core.StandardService的start()方法,接着调用Lifecycle Container:org.apache.catalina.core.StandardEngine的start()方法,初始化一堆东西之后到达旅途的终点,StandardEngine的父类:org.apache.catalina.core.ContainerBase的start(),这个方法是通过自身的threadStart()方法启动了一个容器线程:
thread = new Thread(new ContainerBackgroundProcessor(), threadName);
thread.setDaemon(true);
thread.start();
5.上面的繁文的简化大致是:Bootstrap(init,load,start)--> Catalina(start)--> StandardServer(start)--> StandardService(start)--> StandardEngine(start)--> ContainerBase(start, threadStart)
至此终于看到双击.bat或者执行.sh背后的一点点东西了(我是跟踪的6.0.20的源码,可能之前的版本的有所不同)。
org.apache.catalina.startup.Bootstrap作为启动入口,此类的main函数:
1.首先创建一个自身的实例(如果此类的实例变量:private static Bootstrap daemon为空的话);
2.然后调用init()方法,此方法的主要工作就是反射得到org.apache.catalina.startup.Catalina的实例,同时把classLoader通过Catalina的setParentClassLoader方法赋值。
3.接着调用load(args)方法,此方法反射调用Catalina的load(args),根据传递的参数设置部分属性值之后,会接着执行Catalina的load()方法。
在这个无参的方法里通过Digester组件(Jakarta Commons Digester是apache的一个解析处理xml的开源项目,开始我还以为巧合,因为struts的ActionServlet也是使用此组件解析,后来才知道tomcat的一个主力也是struts的创造者之一)解析conf/server.xml等xml文件,初始化一系列的参数。
4.接着Bootstrap的start()方法反射调用Catalina的start()方法,此方法通过调用xml解析处理后得到的server:org.apache.catalina.core.StandardServer的start()方法进入其所拥有的Lifecycle service:org.apache.catalina.core.StandardService的start()方法,接着调用Lifecycle Container:org.apache.catalina.core.StandardEngine的start()方法,初始化一堆东西之后到达旅途的终点,StandardEngine的父类:org.apache.catalina.core.ContainerBase的start(),这个方法是通过自身的threadStart()方法启动了一个容器线程:
thread = new Thread(new ContainerBackgroundProcessor(), threadName);
thread.setDaemon(true);
thread.start();
5.上面的繁文的简化大致是:Bootstrap(init,load,start)--> Catalina(start)--> StandardServer(start)--> StandardService(start)--> StandardEngine(start)--> ContainerBase(start, threadStart)
至此终于看到双击.bat或者执行.sh背后的一点点东西了(我是跟踪的6.0.20的源码,可能之前的版本的有所不同)。
发表评论
文章已被作者锁定,不允许评论。
-
一道位操作的趣味编程题
2010-03-14 10:50 2124看到一道很有意思的编程题:大厅里有64盏灯,每盏灯都编 ... -
一道字符串截取的编程题
2010-03-11 10:52 2321最近接触到一道字符串截取的编程题:编写一个截取字符串的 ... -
一道多线程趣味热身题
2010-02-28 18:01 1960保持对知识点或者技术的熟悉度对于程序员至关重要,要学会 ... -
疑似Google多线程面试题的Java实现
2010-02-24 17:39 4965来到一个完全陌生的地方,即将一切从新开始,内心兴奋又忐 ... -
Mina的线程池实现分析(2)
2010-02-10 17:31 4590分析了I/O事件的存储,下面看看多个Worker同时工 ... -
Mina的线程池实现分析(1)
2010-02-10 17:28 11633线程池是并发应用中,为了减少每个任务调用的开销增强性能 ... -
多线程基础总结十一--ConcurrentLinkedQueue
2010-02-03 17:52 12952ConcurrentLinkedQueue充分使用了a ... -
LinkedBlockingQueue应用--生产消费模型简单实现
2010-01-29 20:45 8213之前介绍时LinkedBlockingQueue提到了 ... -
多线程基础总结十--LinkedBlockingQueue
2010-01-28 14:33 15443随着多线程基础总结的增多,却明显的感觉知道的越来越少, ... -
号称放倒一片的一道J2SE基础题的个人理解
2010-01-23 14:07 2847近日无意中看到一道Java基础题,号称在接受测试的10 ... -
多线程基础总结九--Mina窥探(1)
2010-01-21 23:46 5455一直以来的多线程的基础总结都是脱离应用的,但是要说多线 ... -
多线程基础总结八--ReentrantReadWriteLock
2010-01-15 23:22 7559说到ReentrantReadWriteLock,首先 ... -
多线程基础总结七--ReentrantLock
2010-01-09 23:17 7731之前总结了部分无锁机制的多线程基础,理想的状态当然是利 ... -
关于atomic问题的一点理解
2009-12-30 16:42 2488之前看到一个帖子是关于atomic使用的,当时没有仔细 ... -
多线程基础总结六--synchronized(2)
2009-12-18 18:45 1913早在总结一时,我就尽量的把synchronized的重点 ... -
多线程基础总结五--atomic
2009-12-17 19:46 3596在简单介绍java.util.c ... -
多线程基础总结四--ThreadLocal
2009-12-16 19:48 2765说到ThreadLocal,首先 ... -
多线程基础总结三--volatile
2009-12-15 20:09 2585前面的两篇总结简 ... -
多线程基础总结二--Thread
2009-12-12 23:27 2713对于Thread来说 ... -
多线程基础总结一--synchronized(1)
2009-12-12 23:23 3118最近写关于并发的小应 ...
相关推荐
Apache Tomcat 6是一款广泛应用的开源Java Servlet容器,它实现了Java EE中的Servlet和JSP规范。这个源码包,"apache-tomcat-6.0.43-src",是Tomcat 6的官方源代码,非常适合开发者进行深入学习和自定义修改。以下是...
【标题】"Tomcat6的源码"涵盖了Java Web服务器Apache Tomcat的第六个主要版本的源代码。这个版本在2005年发布,它为开发者提供了深入了解Servlet和JSP容器工作原理的机会,同时也支持Java EE 5规范。Tomcat6是开源...
MyEclipse会通过源码编译并启动Tomcat,你可以在"Console"视图中观察启动日志,确认服务器是否成功运行。 在深入研究Tomcat源码时,理解其模块结构和主要组件是非常重要的。Tomcat的主要组件包括Catalina(核心...
《深入剖析Tomcat 6与7的源码》 Tomcat作为开源的Java Servlet容器,是许多Web开发者和系统管理员的首选。它以其轻量级、高效和易于配置的特性赢得了广泛赞誉。本文将深入探讨Tomcat 6和7的源码,揭示其内部工作...
《深入理解Tomcat6启动脚本》 在Java Web应用领域,Tomcat作为一个流行的开源Servlet容器,被广泛用于部署和管理Web应用程序。然而,要确保Tomcat顺利运行,正确理解和配置启动脚本至关重要。本文将详细解析Tomcat6...
《Tomcat6源码分析——深入理解Web服务器的运行机制》 Tomcat6作为Apache软件基金会的Jakarta项目的一部分,是一款广泛使用的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,为开发和部署...
《深入剖析Tomcat 6.0源码》 Tomcat,作为开源的Java Servlet容器,是许多Web开发者和系统管理员的首选。Tomcat 6.0版本是它的一个经典版本,提供了对Servlet 2.5和JSP 2.1规范的支持。本文将围绕Tomcat 6.0源码...
一、Tomcat7源码结构解析 Tomcat7的源代码结构清晰,主要包含以下几个核心模块: 1. catalina:这是Tomcat的核心模块,负责处理Servlet容器的主要功能,如Servlet和Context的生命周期管理,请求处理等。 2. ...
1. 下载Tomcat源码:可以从Apache官网获取Tomcat 6的源码包,例如这里我们使用的是apache-tomcat-6.0.44-study。 2. 导入源码项目:在Idea中选择“Open”打开源码目录,Idea会自动识别为Maven项目。 3. 配置Maven...
《深入剖析Tomcat6源码》 Tomcat6是一款经典的开源Java Servlet容器,它作为Apache软件基金会项目的一部分,被广泛用于部署Web应用程序。本篇将深入探讨Tomcat6的源码,揭示其内部运行机制,帮助开发者理解Web...
《深入剖析Tomcat7源码》 Tomcat7是一款广泛使用的开源Java Servlet容器,它实现了Java EE中的Servlet和JSP规范。源码分析是提升开发者对服务器内部运作机制理解的重要途径,尤其对于Tomcat这样的核心组件,源码的...
3-6Tomcat处理源码实现与异步Servlet源码实现(1).mp4
Apache Tomcat 8.5.23 源码分析 Apache Tomcat 是一个开源的、免费的Web服务器和Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,是开发和部署Java Web应用的重要平台。深入理解Tomcat的源码有助...
《深入解析Tomcat线程池源码》 Tomcat作为一款广泛应用的开源Servlet容器,其在性能优化上有着独到之处。...对于希望提升系统性能或对服务器优化感兴趣的开发者,Tomcat线程池源码是一个不可多得的学习资源。
《深入剖析Tomcat 7.0.42源码》 Tomcat,作为Apache软件基金会的一个开源项目,是Java Servlet和JavaServer Pages(JSP)技术的流行应用服务器,广泛应用于各类Web应用的部署和开发。7.0.42版本是Tomcat发展中的一...
本篇文章将重点围绕"MyEclipse下Tomcat_7.0.78源码,可以直接运行"这一主题,深入探讨如何在MyEclipse集成开发环境中配置并运行Tomcat 7.0.78的源码,以及如何通过这个项目进行源码学习。 首先,Tomcat 7.0.78是...
【标题】"Tomcat6 编译好的源码"指的是Apache Tomcat服务器的第六个主要版本的源代码,已经经过编译过程,可以直接用于开发或学习。Tomcat是一款开源的Java Servlet容器,它实现了Java EE的Web应用服务规范,如...
Tomcat是Apache软件基金会下的一个开源项目,是一个广泛使用的Java Servlet容器,实现了Servlet和JavaServer Pages(JSP)规范,使开发者能够构建和部署Web应用程序。这个资源包包含了Tomcat的源码、文档以及源码...
1. 在`/etc/init.d/`目录下创建一个名为`tomcat6`的脚本,包含启动、停止、重启等函数。 2. 配置脚本,确保其执行权限正确,并设置环境变量,如JAVA_HOME和CATALINA_HOME。 3. 使用`chkconfig`(对于Red Hat/CentOS...
tomcat 开机启动,dos窗口去掉,tomcat 开机启动,dos窗口去掉