Tomcat6
是最新版本的
web
容器,其支持最新版本的
servlet2.5
和
jsp2.1
。而且
Tomcat6
架构也是经过重新设计优化过的,所以我们有必要分析一下它的架构过程。显然,这是一个通过阅读
Tomcat
的源代码及相关文档,演绎架构的过程。或许有人会说,这不是放马后炮吗?!!但我觉得这是自我进步的一个必经步骤,先模仿之,然后才能超越之,毕竟我本凡人。
Tomcat
的架构总的来说是分层次的、可插拔的组件架构。分层次是指构成
Tomcat
的组件不是同一级别的,上层组件可以包含子组件,各个组件有其功能范围,当一个组件停止服务时,不会影响上层组件的服务。可插拔是指对于组件的添加和删除并不影响服务器的运行。那么为了达到可插拔的组件架构,分层次的组件架构必成为基础。
对于任何服务器,即使最简单的实现,从面向对象设计(
OOD
)的角度来说,我们都有必要将“服务器”这个概念抽象出来,为什么呢?因为只有有了这个概念,才能谈服务器的实例,服务器的功能等等其它概念,此之谓“皮之不存,毛将焉附”。赶巧(
其实是我的想法恰好撞上人家的想法
),
Tomcat
也将“服务器”抽象为
java
接口
org.apache.catalina.Server
,显然
Server
应该就是最最顶层的组件了。
有了
Server
这个抽象,很自然的,我们希望它能够提供对
servlet
和
jsp
支持的功能。但是我们发现这个概念太大了,我们还需再细化。所以别急,我们还有一些事情要解决。服务器要提供服务就必须能够启动,当然也应该能够停止吧,也就是说服务器应该是有生命的,在启动时初始化必要的资源,而在停止时将其其销毁掉。好吧,我们把这个也抽象出来,叫做生命周期接口,
tomcat
实现为
org.apache.catalina.Lifecycle.
如上所述我们知道
Lifecycle
需要完成的工作了。
public
void
start
()
throws
LifecycleException;
public
void
stop()
throws
LifecycleException;
|
接下来我们分析服务器如何来处理客户端的请求,一般的我们会在浏览器中输入如下格式的请求,
http://192.168.8.221:8080/explorer/loginInit.do
。对于服务器来说,要想处理这个请求,就必须监听指定的端口
8080
,当有
TCP
的请求包来时,建立
Socket
连接,分析并解析之,然后给客户端返回响应。在这个过程中,我们发现,其实包含了俩个功能点,即监听并接受请求和处理请求。那么我们能否将这俩个功能给抽象出来呢?
Tomcat
告诉我们,可以。是的,
Tomcat
将“监听并接收请求”抽象为
org.apache.catalina.connector.Connector
类,负责接受请求;将“处理请求”抽象为“容器”
org.apache.catalina.Container
,负责处理
Connector
传递过来的请求。
Ok,
到此,我们分析构建的简单服务器模型出来了,
Server
由
Connector
组件和
Container
组件结合提供
web
服务。
图
2
有了这个模型后,要实现一个简单的
Server
已经很简单了,但是在实现
Container
时,我们还是要做很多事情,如当来请求,我们怎么知道该请求对应得虚拟主机,以及请求的那个应用,应该交给那个
servlet
对象来处理?这样看来,
Container
还是太大了,需要细化。根据
Servlet
规范,我们知道,
servlet
属于某个应用,且有上下文环境,
Container
要根据应用上下文环境初始化
servlet
,然后根据
servlet
映射调用
servlet
的
service
方法。在这里“应用上下文环境”的概念很重要,
Tomcat
将其抽象为
org.apache.catalina.Context
,
Context
继承了
Container
接口。对于虚拟主机,
Tomcat
将其抽象为
org.apache.catalina.Host
,
Host
继承了
Container
接口。
好了,有了这些概念,我们再回顾一下请求的处理过程:浏览器发出请求,
Connector
接受请求,将请求交由
Container
处理,
Container
查找请求对应的
Host
并将请求传递给它,
Host
拿到请求后查找相应的应用上下文环境,准备
servlet
环境并调用
service
方法。
现在,我们的服务器模型变成了如图
3
所示了。
图
3
但是在
Tomcat
的实现体系中还有一个
Engine
的接口,
Engine
也继承了
Container
接口,那么这个接口什么用呢?设计
Engine
的目的有俩个目的,一,当希望使用拦截器查看(过滤或预处理)每个请求时,
Engine
是个很好的拦截点。二,当希望多个虚拟
Host
共享一个
Http
的
Connector
时,
Engine
是个很好的门面。所以,
Engine
接口是作为顶级
Container
组件来设计的,其作用相当于一个
Container
的门面。有了
Engine
,请求的处理过程变为:浏览器发出请求,
Connector
接受请求,将请求交由
Container
(这里是
Engine
)处理,
Container
(
Engine
来担当)查找请求对应的
Host
并将请求传递给它,
Host
拿到请求后查找相应的应用上下文环境,准备
servlet
环境并调用
service
方法。再看看服务器的模型,如图
4.
图
4
到目前,我们碰到的组件类型有
Connector
和
Container
,其实,这也就是
Tomcat
的核心组件。如图
4
,一组
Connector
和一个
Container
有机的组合在一起构成
Server
,就可以提供服务了,对于
Tomcat
来说,主要是提供
Servlet
服务,那么也就是说
Tomcat
服务器也可以提供其它服务了?是的,
Tomcat
将“一组
Connector
和一个
Container
有机的组合”抽象为“服务”接口
org.apache.catalina.Service
,然而,这些服务实例彼此独立,仅仅共享
JVM
的基础设施,如系统类路径。
进一步的,我们得到了服务器的框架模型,如图
5.
图
5
由图
5
,我们知道,对于
Tomcat
服务器来说,除了
Server
代表它自己以外,其它组件都是功能组件,都有其职责范围。
Service
为最顶层的组件,可以添加
Connector
和
Container
组件。
Engine
是
Container
的最顶层组件,可以添加
Host
组件,但不能添加父组件。
Host
组件的父组件是
Engine
,
Host
下面包含有
Context
组件。
接下来看看标准的
Tomcat
体系结构,如图
6.
图
6
比较图
5
和图
6.
我们发现,还有很多辅助组件没有抽象出来。当然,随着需求的一步步加深,我的分析也会一步步深入,这些个组件也会慢慢浮出水面。
分享到:
相关推荐
在本文中,我们将深入探讨如何搭建一个基于MyEclipse 6.5、Flex 3、Tomcat 6.0和ds-console.war的开发环境。这个环境主要用于开发和部署使用Flex前端与Java后端交互的应用程序,特别是通过LCDS(LiveCycle Data ...
《深入理解Tomcat 6.0 -- 9.0及源码分析》 Tomcat,作为Apache软件基金会的开源项目,是Java Servlet和JavaServer Pages(JSP)的开源Web应用服务器,也是世界上最受欢迎的轻量级应用服务器之一。本文将深入探讨...
安装Apache Tomcat 6.0通常包括解压下载的`apache-tomcat-6.0.33`压缩包,设置环境变量如`CATALINA_HOME`,以及配置`conf/server.xml`文件以定义端口、虚拟主机和应用上下文路径。 **部署Web应用** Web应用程序通常...
配置Tomcat 6.0的步骤如下: 1. 从Tomcat官网下载安装包。 2. 运行安装程序,同意许可协议。 3. 选择安装类型(推荐Normal或Custom),设置安装路径。 4. 配置Tomcat的基本设置,指定JDK路径。 5. 完成安装后,可以...
《Tomcat 合集包详解:从6.0到9.0的历史演进与关键特性》 Apache Tomcat,作为一款开源的Java Servlet容器,深受广大开发者喜爱。它以其轻量级、高效能的特点,成为了运行Java Web应用程序的首选平台。本合集包包含...
在本文中,我们将深入探讨如何配置一个基于Java Web的开发环境,特别是针对Tomcat 6.0、MyEclipse 8.5和JDK 1.6的详细步骤。这些工具是开发Java Web应用程序的基础,理解它们的安装和配置对于任何Java开发者来说都是...
tomcat6.0 配log4j日志的必须... | |--------tomcat-juli-adapters.jar | |--------log4j.jar | |--------log4j.properites | |----bin |--------tomcat-juli.jar 最后把log4j.properties里的配置写好就可以了。
Tomcat 6.0是Apache软件...通过深入学习Tomcat 6.0的源码,开发者可以提升对Web服务架构的理解,这对于设计和构建高性能、高可用性的Java Web应用具有重要意义。同时,也可以帮助开发者更好地应对问题诊断和性能调优。
【标题】"Tomcat6.0——压缩包下载"涉及的是Apache Tomcat 6.0版本的安装和使用,这是一个开源的Java Servlet容器,广泛应用于Web应用的部署和开发。Tomcat6.0是该软件的一个重要里程碑,因为它在当时的Java EE 5...
通过对Tomcat 6.0源代码的学习,开发者不仅可以提升对Servlet和JSP规范的理解,还能掌握服务器内部工作原理,为日常的Web开发带来更深入的认识,提升问题排查和性能优化的能力。同时,这也将有助于向更高级的Tomcat...
1. **架构概述**:Tomcat主要由Catalina、Jasper、 Coyote和Commons组件构成。Catalina处理Servlet和JSP的生命周期管理,Jasper负责JSP编译,Coyote处理HTTP连接,而Commons提供了通用工具类。 2. **目录结构**: ...
标签反映了主题内容,即与Tomcat6.0的安装和配置相关的知识,对于学习和了解如何在不同操作系统上安装和运行这个特定版本的Tomcat用户来说非常有价值。 【压缩包子文件的文件名称列表】:TOMCAT6.0的安装版 这个...
通常,对于大多数用户,预编译的二进制版本(例如,`apache-tomcat-6.0.x.zip`或`.tar.gz`)就足够了。 2. **解压与环境变量配置** 解压缩下载的Tomcat包到你选择的目录。然后,为了能在命令行中使用`catalina`...
在【压缩包子文件的文件名称列表】中的"apache-tomcat-6.0.20.exe"是Tomcat 6.0.20的安装程序,用户可以通过这个可执行文件在Windows系统上安装和配置Tomcat服务器。安装过程中,用户可以选择安装路径,配置端口号,...
《深入理解Tomcat6.0:免费开源的JSP服务器》 Tomcat6.0,作为Apache软件基金会的旗下面向Java的Web应用服务器,以其免费开源的特性,深受开发者们的喜爱。它不仅是一个小巧而高效的JSP服务器,还包含了完整的HTTP...
3. **安全管理**:使用tomcat-users.xml配置文件,可以设置角色和用户,实现基于角色的访问控制。 4. **日志管理**:通过conf/logging.properties或自定义Log4j配置,可以调整服务器的日志输出。 5. **连接器优化**...
Apache Tomcat 6.0 是一个广泛使用的开源软件,它是一个符合Java Servlet和JavaServer Pages (JSP) 规范的应用服务器,主要用来部署和运行Java Web应用程序。这个版本是Tomcat系列的6.0版,它在当时的发布中提供了...
Tomcat 6.0是Apache软件基金会开发的一款开源的Java Servlet容器,它是基于Java的Web应用程序部署平台。这个通用版本意味着它适用于各种操作系统,并且包含了广泛支持的各种功能和配置选项,使得开发者和系统管理员...
这个文件"apache-tomcat-6.0.18-deployer"是Tomcat 6.0.18版本的部署工具,它提供了自动化部署Web应用程序的功能。部署工具可以帮助开发者和系统管理员将WAR文件(Web应用程序的归档格式)快速上传到Tomcat服务器,...