
对于测试人员来讲,使用tomcat部署web应用,设置tomcat内存大小、线程池以及运行模式是比较基础的技能,因为工作中会经常使用。但是我们是否思考过tomcat的架构以各个及核心组件的运行方式呢?本篇文章就来解决这些问题!相信通过对本文的学习,大家会对tomcat有一个整体性的认识!
Tomcat架构概述
在tomcat中,要理解其架构设计,可以参考下面的图,该图是从《Apahce tomcat高级配置》一书中截取的。

server:即服务器,每个tomcat程序启动后,就是一个server。
service:这是一种抽象的服务,它把连接器和处理引擎结合在一起。一个Service可以包含多个Connector,但是只能包含一个Engine;其中Connector的作用是从客户端接收请求,Engine的作用是处理接收进来的请求。
connector:用于处理连接和并发,通常包括两种方式HTTP和AJP。HTTP是用于网页地址栏http这种访问方式;AJP一般用于搭配Apache服务器Connector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。
engine:处理引擎,所有的请求都是通过处理引擎处理的。Engine组件在Service组件中有且只有一个;Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。
host:虚拟主机,用于进行请求的映射处理。Host的作用是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。
realm:用于配置安全管理角色,通常读取tomcat-uesrs.xml进行验证。
context:上下文,对应于web应用。
Tomcat请求过程
请求过程如下图:

首先请求发送给服务器。
服务器使用相应的服务进行处理。
通过不同的连接器请求后发送给处理引擎。
处理引擎通过对虚拟主机的分析,发送给相应的虚拟主机。
虚拟主机使用相应的应用进行相应。
核心组件的关联
Server在最顶层,代表整个Tomcat容器;一个Server中可以有一个或多个Service。
Service包括Connector和Engine,Service把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;Connector接收请求,Engine处理请求。
Engine、Host和Context都是容器, Engine包含Host,Host包含Context。每个Host表Engine中的一个虚拟主机;每个Context代表在特定Host上运行的一个Web应用。
请求如何处理
简单总结以下三点:
根据协议和端口号选定Service和Engine;
根据域名或IP地址选定Host;
根据URI选定Context/Web应用;
例如:
http://localhost:8080/app/index.html
首先通过协议和端口号(http和8080)选定Service;然后通过主机名(localhost)选定Host;然后通过uri(/app/index.html)选定Web应用。
重要的配置文件
\conf 目录下
server.xml:
Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的一个组件;通过对xml文件中元素的配置,可以实现对Tomcat中各个组件的控制。
tomcat-users.xml:
关于用户登录、管理员账号密码的配置都在这个文件中。
web.xml文件
Web应用程序描述文件,都是关于是Web应用程序的配置文件。
context.xml
在tomcat 5.5以后,在/conf/context.xml中进行独立的配置。因为server.xml是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而context.xml文件则不然,tomcat服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器。
网友评论