Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。
顶级组件:Server
服务类:Service
连接器:http, https, ajp(apache jserv protocol)
容器类:Engine, Host, Context
被嵌套的组件:valve, logger, realm, loader, manager
集群类组件:listener, ...
从上图中看到,在Connector接收到一次连接并转化成HttpServletRequest请求对象后,请求传递如下:
Connector–>Engine的Pipeline的ValveA中–>Engine Valve–>Host Pipeline的Error Report Valve和Host Value–>Context Valve–>Wrapper Valve中,在这里会经过一个过滤器链(Filter Chain)–>Servlet中。
Servlet处理完成后一步步返回,最后Connector拿到response。
Tomca的两大组件:Connecter和Container
Connecter组件
一个Connecter将在某个指定的端口上侦听客户请求,接收浏览器的发过来的 tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理Engine(Container中的一部分),从Engine出获得响应并返回客户。
Tomcat中有两个经典的Connector,一个直接侦听来自Browser的HTTP请求,另外一个来自其他的WebServer请求。Cotote HTTP/1.1 Connector在端口8080处侦听来自客户Browser的HTTP请求,Coyote JK2 Connector在端口8009处侦听其他Web Server的Servlet/JSP请求。
Connector 最重要的功能就是接收连接请求然后分配线程让 Container 来处理这个请求,所以这必然是多线程的,多线程的处理是 Connector 设计的核心。
Container组件
Container是容器的父接口,该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。这四个组件是负责关系,存在包含关系。通常一个Servlet class对应一个Wrapper,如果有多个Servlet定义多个Wrapper,如果有多个Wrapper就要定义一个更高的Container,如Context。
Context 还可以定义在父容器 Host 中,Host 不是必须的,但是要运行 war 程序,就必须要 Host,因为 war 中必有 web.xml 文件,这个文件的解析就需要 Host 了,如果要有多个 Host 就要定义一个 top 容器 Engine 了。而 Engine 没有父容器了,一个 Engine 代表一个完整的 Servlet 引擎。
Engine 容器
Engine 容器比较简单,它只定义了一些基本的关联关系
Host 容器
Host 是 Engine 的字容器,一个 Host 在 Engine 中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能够区分它们。它的子容器通常是 Context,它除了关联子容器外,还有就是保存一个主机应该有的信息。
Context 容器
Context 代表 Servlet 的 Context,它具备了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 可以没有 Engine 和 Host。Context 最重要的功能就是管理它里面的 Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的,还有一点就是 Context 如何才能找到正确的 Servlet 来执行它呢? Tomcat5 以前是通过一个 Mapper 类来管理的,Tomcat5 以后这个功能被移到了 request 中,在前面的时序图中就可以发现获取子容器都是通过 request 来分配的。
Wrapper 容器
Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了,所以调用它的 addChild 将会报错。
Wrapper 的实现类是 StandardWrapper,StandardWrapper 还实现了拥有一个 Servlet 初始化信息的 ServletConfig,由此看出 StandardWrapper 将直接和 Servlet 的各种信息打交道。
- TOMCAT有两个典型的Connector,一个直接侦听来自browser的http请求,一个侦听来自其它WebServer的请求
- Coyote Http/1.1 Connector 在端口8080处侦听来自客户browser的http请求
- Coyote JK2 Connector 在端口8009处侦听来自其它WebServer(Apache)的servlet/jsp代理请求
- Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名
- 当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理
- Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理
- 代表一个Virtual Host,虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配
- 每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个Web App对应于一个Context,有一个Context path
- 当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理
- 匹配的方法是“最长匹配”,所以一个path==”"的Context将成为该Host的默认Context
- 所有无法和其它Context的路径名匹配的请求都将最终和该默认Context匹配
- 一个Context对应于一个Web Application,一个Web Application由一个或者多个Servlet组成
- Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml和$WEBAPP_HOME/WEB-INF/web.xml载入Servlet类
- 当Context获得请求时,将在自己的映射表(mapping table)中寻找相匹配的Servlet类
- 如果找到,则执行该类,获得请求的回应,并返回
Tomcat Server处理一个HTTP请求的过程
1、用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得。
2、Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应。
3、Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host。
4、Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有的Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理)。
5、path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL PATTERN为*.jsp的Servlet,对应于JspServlet类。
6、构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost().执行业务逻辑、数据存储等程序。
7、Context把执行完之后的HttpServletResponse对象返回给Host。
8、Host把HttpServletResponse对象返回给Engine。
9、Engine把HttpServletResponse对象返回Connector。
10、Connector把HttpServletResponse对象返回给客户Browser。
相关推荐
Tomcat的体系结构,基本配置,server.xml
Apache Tomcat 是一款非常著名的开源 Servlet/JSP 容器。 Apache Tomcat 是一款非常著名的开源 Servlet/...让我们先来浏览一下 Tomcat 体系结构中的六个主要概念: Server Service Engine Host Connector Context
Tomcat是一款广泛使用的开源Java Servlet...通过以上介绍,你应该对Tomcat的体系结构和插件配置有了清晰的理解。了解这些基础概念和操作方法对于管理和维护Tomcat服务器至关重要,有助于提升开发和部署Web应用的效率。
Tomcat是Apache Jakarta项目的...在开发和运行Web应用时,了解Tomcat的体系结构和工作原理是十分必要的,因为这有助于开发者优化配置和提升应用的性能。随着Web应用的日益复杂,掌握Tomcat的深入知识也越来越受到重视。
本文档详细介绍了图书馆管理系统的软件体系结构及其关键技术,包括系统功能、技术背景、开发工具以及系统设计等内容。 #### 二、系统功能 图书馆管理系统的核心功能包括但不限于: - **图书查询**:允许用户通过...
**Tomcat体系结构** Tomcat的体系结构基于Java EE的Servlet规范,主要由以下几个部分组成: 1. **Catalina**:核心组件,负责Servlet容器的主要功能。 2. **Jasper**:JSP编译器,将JSP页面转换为Servlet。 3. **Apr...
在本文中,我们将深入探讨与"apache-tomcat-7.0.59-x64.rar"相关的知识,包括Tomcat的版本、体系结构、安装与配置、管理及性能优化。 首先,"apache-tomcat-7.0.59"是Apache Tomcat服务器的一个特定版本,发布于...
本压缩包包含了不同版本的Tomcat,从Tomcat 6到Tomcat 8,涵盖了多种体系结构,包括32位和64位,旨在满足不同环境和需求。 1. **Tomcat 6**: 发布于2005年,是基于Servlet 2.5和JSP 2.1规范的。此版本引入了更好的...
Java学习体系结构是一个全面的指南,旨在帮助初学者掌握Java编程技能,并逐步深入到JavaEE应用开发。以下是对各个知识点的详细说明: 1. **JavaSE基础**:这是学习Java的第一步,包括JDK的安装,编写HelloWorld程序...
【Tomcat体系结构】 Tomcat的体系结构基于Java的多层架构设计,主要包括Catalina(核心Servlet容器)、Jasper(JSP引擎)、 Coyote(HTTP/1.1协议处理)和Juli(日志系统)等组件。每个组件都有明确的职责,协同...
Tomcat的容器体系结构是其设计的核心,包括`ContainerBase`、`Host`、`Context`、`Wrapper`等。每个容器都有自己的生命周期,可以包含其他容器,形成了一个树状结构。 七、会话管理 Tomcat支持多种会话管理策略,如...
4. **Linux x64系统**:x64指的是基于64位AMD或Intel处理器的计算机体系结构。这个版本的Tomcat是为64位Linux系统编译的,这意味着它能充分利用64位系统的内存管理和计算能力。 5. **安装与配置**:在Linux x64环境...
在本文中,我们将深入探讨Apache Tomcat的相关知识点,包括其功能、体系结构、配置、部署以及与Java Web开发的关联。 1. **Apache Tomcat的功能**: - Java Servlet容器:Tomcat主要任务是解析HTTP请求并调用Java ...
学习和掌握Tomcat 6.0.20,对于Java Web开发者来说,不仅可以提供一个运行环境,也是深入理解Java EE体系结构和技术栈的重要步骤。同时,尽管Tomcat 6已不再维护,但其基本原理和操作与当前版本有许多共通之处,对...
Tomcat的容器体系结构包括多个层次,如Engine(引擎)、Host(主机)、Context(上下文)和Wrapper(Servlet包装器)。每个层次都负责管理一部分Web应用的生命周期,理解这些容器的关系对于配置多应用或多域名环境至...
本资料主要围绕J2EE的体系结构设计展开,旨在帮助开发者理解和掌握在企业环境中如何有效地利用J2EE进行系统设计。 J2EE体系结构基于分层设计原则,通常包括以下几个关键层次: 1. **表现层(Presentation Layer)*...
- **Tomcat 的架构**:详细讲解了Tomcat的体系结构,包括它的核心组件和服务如何协作以支持Web应用程序的运行。 - **Servlet 2.5 规范的实现**:深入探讨了Servlet 2.5规范的关键特性和Tomcat是如何实现这些特性的,...
4. JMX在tomcat中的应用:Java Management Extensions (JMX) 是一种为应用程序、设备、系统等植入管理功能的体系结构。Tomcat使用JMX来暴露其内部状态和管理信息,允许管理员通过各种JMX客户端来监控和配置运行中的...