当前位置:首页 » 编程软件 » 编译tomcat源码

编译tomcat源码

发布时间: 2023-01-06 23:49:00

Ⅰ Tomcat源码解析-组件之StandardServer

StandardServer是tomcat容器的最高层的组件,职责如下:
实现Tomcat一键启动关闭,管理全局 JDNI资源,管理子组件,阻塞tomcat主线程。

StandardServer子组件

Bootstarp作为tomcat启动类,JVM会调用main函数完成tomcat启动。在其内部流程如下:

核心方法功能

Tomcat使用Digester解析server.xml,Digester是一款用于将xml转换为Java对象的事件驱动型工具,是对SAX的高层次的封装。相对于SAX可以为xml中每一个标签设置对应的解析规则。详见 Tomcat相关技术-Digester(二)

这里通过解析server.xml实例化StandardServer,并设置server.xml文件中定义的属性初始化。

server.xml配置

<Server>标签用来表示当前StandardServer组件

StandardServer构造函数

将<server>标签属性映射到StandardServer对象属性中

<GlobalNamingResources>标签中定义了全局JNDI资源,

<Listener>标签中定义StandardServer组件中需要的LifecycleListener监听器。<Server>标签内可以设置多个<Listener>。

Server中定义的Listener

添加LifecycleListener监听器

<Service>标签中定义StandardServer组件中子组件Service。<Server>标签内可以设置多个<Service>。

添加Service子组件

StandardServer作为tomcat最上层的组件,和其他所有组件一样都实现了Lifecycle 接口。

Tomcat 定义一个基类LifecycleBase 来实现 Lifecycle 接口,把一些公共的逻辑放到基类中去,比如生命状态的转变与维护、生命事件的触发以及监听器的添加和删除等,而子类就负责实现自己的初始化、启动和停止等模板方法。为了避免跟基类中的方法同名,我们把具体子类的实现方法改个名字,在后面加上 Internal,叫 initInternal、startInternal 等。

其他模板方法

详见 Tomcat架构设计-组件生命周期

StandardServer组件初始化的核心是调用所有Service子组件初始化方法init。

详细流程如下:

启动start的核心是调用所有Service子组件初始化方法start。

详细流程如下:

启动stop的核心是调用所有Service子组件初始化方法stop。

详细流程如下:

销毁destroy的核心是调用所有Service子组件初始化方法destroy。

1 调用所有Service子组件启动方法destroy

2 销毁JND全局资源

3 jmx bean注销MBeanFactory

4 jmx bean注销StringCache

5 调用LifecycleMBeanBase.destroyInternal 将当前组件对象从jmx 注销

在这样的设计中,在父组件的 init 方法里需要创建子组件并调用子组件的 init 方法。同样,在父组件的 start 方法里也需要调用子组件的 start 方法。只要调用最顶层组件StandardServer的 init 和 start 方法,整个 Tomcat 就被启动起来了。只要调用最顶层组件StandardServer的 destroy 和 stop 方法,整个 Tomcat 就被关闭。

添加已在解析server.xml初始化设置调用

阻塞tomcat主线程,只要stopAwait不为true, tomcat主线程在此无限循环.监听到客户端发起SHUTDOWN命令后退出

Ⅱ 如何将tomcat7.0源码导入eclipse

1.Tomcat源码下载

这个里下载tomcat-6.0.33源码。

2.ant安装,用于编译tomcat的源码。

ant下载解压后将其bin添加到系统环境path中。

3.IDE——选用Eclipse3.7。

Ⅲ 怎么将tomcat源码导入eclipse

1. 去apache官网下载对应的tomcat版本源码(我这里下载的是9.0.0.M9) http://tomcat.apache.org/download-90.cgi
2. 解压后的源码是没法作为工程直接导入eclipse的。需要使用ant进行编译,所以这里需要去ant官网下载ant对应版本。http://ant.apache.org/bindownload.cgi

Ⅳ tomcat的classloader的源码解析

相关源码如下:
common,catalina,shared三个classloader没有违背双亲加载原则

WebappClassLoader违背了双亲委派机制 因为重写了loadclass

在context启动的时候其会启动一个webappLoader
而webappLoader会创建一个WebappClassLoader,设置一个source(对应咱们webapps下面的一个项目)
设置delegate=false 代表不需要遵循双亲委派机制,然后启动WebappClassLoader,
然后这个context的加载的会使用自己的context里面含有的WebappClassLoader去加载bean

当webapps下面有多个项目就建立多个standardContext
每个standardContext 设有一个对应的webappLoader和webappClassLoader

Ⅳ tomcat怎么编译jsp文件

一、jsp执行过程图解

用户访问jsp页面时,jsp的处理过程如下图所示:从图中可以看出,Tomcat的核心组建是connector和container,container就是容器。容器就是负责管理控制servlet的应用程序。图中的jasper就是解析jsp的jsp引擎。Tomcat既是servlet容器又是web服务器,也是jsp引擎。

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:593
制作脚本网站 发布:2025-10-20 08:17:34 浏览:888
python中的init方法 发布:2025-10-20 08:17:33 浏览:581
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:765
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:684
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1012
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:255
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:113
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:806
python股票数据获取 发布:2025-10-20 07:39:44 浏览:712