Tomcat功能与架构分析
默认实现:org.apache.catalina.core.StandardServer
Listener
所有server.xml中的监听器都实现了LifecycleListener接口。当server中的各种组件 在start、stop等事件发生时触发相应的操作。 如: JasperListener用来在所有web应用程序启动前初始化jasper(JSP编译)。
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类加载器
9
Tomcat总体框架结构分析
Service
Service是这样一个集合:它由一个或者多个Connector,以及一个共享的处理 引擎(Engine)组成。Engine负责处理所有Connector所获得的客户请求。
默认实现: org.apache.catalina.core.StandardService
类加载的作用: 1. 加载Java应用程序所需的字节码文件(*.class、*.jar); 2. 提供一种在运行时动态、灵活地定位资源(代码和数据)的方式; 3. 允许在运行时利用多种不同资源创建应用程序,并提供命名空间机制,
使同一资源的多个版本在虚拟机上共存; 4. 可与安全体系结构集成; 5. 提供在运行时组装应用程序所需的服务。
保密
Tomcat功能与架构设计分析
北京恒华伟业科技股份有限公司 2012年09月
目录
1. Java类加载机制 2. Tomcat总体框架结构分析 4. Tomcat的物理结构 5. Tomcat典型功能与设计分析 6. 实用配置与常见问题
2
Java类加载机制
类加载是java 语言提供的最强大的机制之一。尽管类加载并不是热点话题, 但作为编程人员都应该了解其工作机制,明白怎样去配合其工作。 熟悉了类加载机制可以使我们节省很多时间,而不必浪费在调试 ClassNotFoundException等异常上,且为我们开发高扩展性的应用程序提供 了一些思路。
标准扩展(Extension)类加载器:
扩展类加载器是由 Sun 的 ExtClassLoader(uncher$ExtClassLoader) 实现的。它负责将 < Java_Runtime_Home >/lib/ext 或者由系统变量 java.ext.dir 指定 位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。
3
Java类加载器
Java 缺省使用如下三种类型类装入器
启动(Bootstrap)类加载器:
引导类装入器是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib 下 面的类库加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直 接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。
系统(System)类加载器:
系统类加载器是由 Sun 的 AppClassLoader(uncher$AppClassLoader) 实现的。它负责将系统类路径(CLASSPATH)中指定的类库加载到内存中。开发者 可以直接使用系统类加载器。
4
类加载器的委托机制
1. 首先判断该类型是否已经被加载 2. 如果没有被加载,就委托给父类加载或者 委派给启动类加载器加载 3. 如果存在父类加载器,就委派给父类加载 器加载 4. 如果不存在父类加载器,就检查是否是由 启动类加载器加载的类 5. 如果父类加载器和启动类加载器都不能完 成加载任务,才. 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服务器的请求。
演Web服务器和Servlet容器的双重角色。当使用Coyote JK2 Connector时,
Tomcat只扮演Servlet容器的角色,Web服务器则由Apache或者其他服务器来提供,
11
Connector的工作原理
Coyote Http/1.1 Connector 在端口8080处侦听来自客户浏览器的http请求,
Coyote JK2 Connector 在端口8009处侦听来自其它Web服务器(比如Apache)的
servlet/jsp代理请求。
当使用Coyote Http/1.1 Connector时,Tomcat作为独立的Web容器,同时扮