Tomcat功能与架构分析解析

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet 类。如果找到,则执行该类,获得请求的响应,并返回。
默认实现: org.apache.catalina.core.StandardContext
15
Tomcat的核心类图
所有的容器对象,都继承LifeCycle,也即具有生命 周期的方法,init(),start(),stop(),destroy(),具有 LifecycleState属性(可以看一下这个属性的内容)
14
Tomcat总体框架结构分析
Context
一个Context对应于一个Web应用程序,一个Web应用程序由一个或者多个 Servlet组成。Context在创建的时候将根据配置文件
$CATALINA_HOME/conf/web.xml和$WebApp /Web-INF/web.xml载入Servlet类。
16
Tomcat总体框架结构分析—启动
catalina.bat中set MAINCLASS=org.apache.catalina.startup.Bootstrap
sd Tomcat启 动 Bootstrap Catalina Digester SetNextRule StandardServer StandardService StandardEngine StandardHost StandardContext ContextConfig Connector Http11Protocol MapperListener
startInternal()
初 始 化 Web App
start() init()
启 动 HTTP 服 务
start() init()
17
Tomcat组件启动流程图
18
启动过程都做了什么
1. 初始化目录
设置CatalinaHome、CatalinaBase,初始化System环境信息
2. 初始化类加载器(ClassLoader)
Engine必须配置在Service组件下。
处理引擎下可以配置多个虚拟主机(Virtual Host),每个虚拟主机都有一个域 名。当处理引擎获得一个请求时,它把该请求匹配到某个虚拟主机上,把请求交给
该虚拟主机来处理。处理引擎有一个默认虚拟主机,当请求无法匹配到任何一个虚
拟主机上时,交给默认虚拟主机来处理。
main() init() load()
parse(inputSource) end()
init() init() init() init() init()
start() start() start()
当 Context的 state 变 为 init时 , contextconfig作 为 观 察 者 , 将 会 被 init() 通 知 , ContextConfig.lifecycleEv ent方 法 会 触 发 。 start() init() 执 行 对 每 个 WebApp的 配 置 解 析
系统(System)类加载器:
系统类加载器是由 Sun 的 AppClassLoader(sun.misc.Launcher$AppClassLoader) 实现的。它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。开发者 可以直接使用系统类加载器。
4
类加载器的委托机制
1. 首先判断该类型是否已经被加载 2. 如果没有被加载,就委托给父类加载或者 委派给启动类加载器加载
11
Connector的工作原理
Coyote Http/1.1 Connector 在端口8080处侦听来自客户浏览器的http请求, Coyote JK2 Connector 在端口8009处侦听来自其它Web服务器(比如Apache)的 servlet/jsp代理请求。 当使用Coyote Http/1.1 Connector时,Tomcat作为独立的Web容器,同时扮 演Web服务器和Servlet容器的双重角色。当使用Coyote JK2 Connector时, Tomcat只扮演Servlet容器的角色,Web服务器则由Apache或者其他服务器来提供,
3. 如果存在父类加载器,就委派给父类加载 器加载
4. 如果不存在父类加载器,就检查是否是由 启动类加载器加载的类 5. 如果父类加载器和启动类加载器都不能完 成加载任务,才调用自身的加载功能
5
Tomcat中类加载器
Common类加载器负责加载TomcatHOME/common/class下 的.Class文件和common/lib中的jar包,这些类可以被Tomcat内 核和每个Web应用程序都可以看见, 如servlet.jar等 Catalina类加载器从server/classes和server/lib下加载 类,Catalina加载的类只对Tomcat服务器内核可见,对Web应用 程序不可见,对于运行Tomcat内核的线程,它的上下文类加载器 就是Catalina类加载器 Shared类加载器负责从share/classes和share/lib中加载类,它 加载的类只对所有Web应用程序有效,对Tomcat不可见. WebappX类加载器负责加载Web应用程序的/webINF/classes和lib目录下的类,只对当前Web应用程序有效, 对 于运行每个Web应用程序的线程,他们的上下文类加载器就是 它们各自的WebappX类加载器
初始化三个类加载器commonLoader、catalinaLoader、 sharedLoader;这是要从catalina.properties中读取配置,即jar包的配置。 3. 构建容器
对server、service、engine、host等容器对象进行实例化,开始这些
对象的生命周期。 4. 部署Web应用 扫描webapps、conf/Catalina/localhost目录,进行war包、应用程序 目录、contex配置文件的加载;
标准扩展(Extension)类加载器:
扩展类加载器是由 Sun 的 ExtClassLoader(sun.misc.Launcher$ExtClassLoader) 实现的。它负责将 < Java_Runtime_Home >/lib/ext 或者由系统变量 java.ext.dir 指定 位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。
3
Java类加载器
Java 缺省使用如下三种类型类装入器
启动(Bootstrap)类加载器:
引导类装入器是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib 下 面的类库加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直 接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。
应用组合设计模式把Server、Service、Engine、Host、Context这几级容器有效的整合
为有机体,协调完成JSP解析、编译、初始化以及响应客户端请求等这种任务。 3. Connector
容器接收Connector传递过来的客户端(浏览器或者web server)请求,并把响应
默认实现: org.apache.catalina.core.StandardEngine
13
Tomcat总体框架结构分析
Host
代表一个虚拟主机,每个虚拟主机和某个网络域名(Domain Name)相匹配。 每个虚拟主机下都可以部署(deploy)一个或者多个Web应用程序(Web
Application),每个Web应用程序对应于一个Context,有一个Context path。当虚
由于这些专有的Web服务器在处理静态资源的性能和效率上要比Tomcat提供的
Web服务器要好,所以经常将Tomcat和Apache配合使用。
12
百度文库
Tomcat总体框架结构分析
Engine
处理引擎(Engine)代表一个Service所属的请求处理机,它接受所有连接器传递 过来的客户端请求,将处理结果返回给连接器,由连接器将最终响应返回给客户端。
保密
Tomcat功能与架构设计分析
北京恒华伟业科技股份有限公司 2012年09月
目 录
1. Java类加载机制 2. Tomcat总体框架结构分析 4. Tomcat的物理结构
5. Tomcat典型功能与设计分析
6. 实用配置与常见问题
2
Java类加载机制
类加载是java 语言提供的最强大的机制之一。尽管类加载并不是热点话题, 但作为编程人员都应该了解其工作机制,明白怎样去配合其工作。 熟悉了类加载机制可以使我们节省很多时间,而不必浪费在调试 ClassNotFoundException等异常上,且为我们开发高扩展性的应用程序提供 了一些思路。 类加载的作用:
9
Tomcat总体框架结构分析
Service
Service是这样一个集合:它由一个或者多个Connector,以及一个共享的处理 引擎(Engine)组成。Engine负责处理所有Connector所获得的客户请求。
默认实现: org.apache.catalina.core.StandardService
默认实现:org.apache.catalina.core.StandardServer
Listener
所有server.xml中的监听器都实现了LifecycleListener接口。当server中的各种组件
在start、stop等事件发生时触发相应的操作。
如: JasperListener用来在所有web应用程序启动前初始化jasper(JSP编译)。
19
Tomcat嵌入
早期版本中,如Tomcat5中,提供了Embedded类用于在 java应用中嵌入。在新版本的Tomcat中,Embedded已经 不建议使用。
Tomcat7中,提供了专门的Embedded版本。 当然,我们可以直接构建Catalina对象实现Tomcat的嵌入
应用;也可以参考或者直接改造Bootstrap类实现嵌入。
1. 加载Java应用程序所需的字节码文件(*.class、*.jar);
2. 提供一种在运行时动态、灵活地定位资源(代码和数据)的方式; 3. 允许在运行时利用多种不同资源创建应用程序,并提供命名空间机制, 使同一资源的多个版本在虚拟机上共存; 4. 可与安全体系结构集成; 5. 提供在运行时组装应用程序所需的服务。
20
Tomcat容器的结构
21
容器的工作原理
1. ClassLoaer Tomcat 通过WebappClassLoader加载web应用程序,通过WebappClassLoader 确保各个应用相互独立,运行期间互不干扰。 2. 容器生命周期 应用LifeCycle生命周期接口定义各级容器的初始化、启动、停止、销毁等动作,并
拟主机获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该 Context来处理。匹配的方法是“最长匹配”,一个path=""的Context将成为该虚拟
主机的默认Context。所有无法和其它Context的路径名匹配的请求都将最终和该默
认Context匹配。
默认实现: org.apache.catalina.core.StandardHost
6
目 录
1. Java类加载机制 2. Tomcat总体框架结构分析 4. Tomcat的物理结构
5. Tomcat典型功能与设计分析
6. 实用配置与常见问题
7
Tomcat总体框架结构分析
Tocmat的各种组件通过相互作用,形成一个完善的有机体。
8
Tomcat总体框架结构分析
Server
Server代表整个Catalina servlet容器。在server.xml配置文件中必须是顶层元素 且唯一,给它配置的属性代表整个容器的属性。
10
Tomcat总体框架结构分析
Connector
一个连接器(Connector)将在某个指定端口上侦听客户请求,并将获得的请求交 给Engine来处理,从Engine处获得响应结果,并返回给客户端。
Tomcat有两个典型的连接器,一个直接侦听来自客户端浏览器的http请求,一个
侦听来自其它Web服务器的请求。
相关文档
最新文档