- Tomcat各个模块介绍
-
bin:用来存放和服务相关的脚本,比如启动tomcat、关闭tomcat等
-
conf:存放例如web.xml的配置文件
-
logs:存放tomcat运行所需要的库文件
-
webapps:web项目部署的根目录
-
work:存放jsp编译后的class文件
-
Tomcat系统结构简介
(1)server:server可以看作是Tomcat最顶层的构成元素,提供一个接口让其他程序能够访问到server中的service集合,同时也负责维护其包含的service的生命周期。
(2)service:是server的下一个集合,多个connector和一个container就构成了一个service
(3)connector:connector的作用是监听客户端请求,并将请求交给与他相连接的container处理,然后将处理的结果返回客户端,connector种类有很多,例如Coyote Http/1.1 Connector 在端口8080处侦听来自客户browser的http请求等
(4)container:可以看作是容器,像Host、Engine、Context都是继承自container,所以都可以看作是容器 a. Engine
-Engine下可以配置多个虚拟Host,每个主机也都有一个域名 -当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给Host来处理 -Engine有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将其交给默认的Host处理。b. Host
-代表一个Virtual Host,虚拟主机,每个虚拟主机和某个网络域名相匹配 -每一个Host可以部署多个webapp,每个webapp对应一个context -当Host获得一个请求的时候,将把该请求匹配到某个Context上,然后把该请求交给Context处理 -所有Context无法匹配的情况下,将最终和默认的Context想匹配c. Context
-一个Context对应于一个Web App,每个Web App是由一个或者多个servlet组成的 -当一个Web App被初始化的时候,它将用自己的ClassLoader对象载入“部署配置文件web.xml”中定义的每个servlet类 -它首先载入在$CATALINA_HOME/conf/web.xml中部署的servlet类 -然后载入在自己的Web App根目录下的WEB-INF/web.xml中部署的servlet类 -web.xml文件有两部分:servlet类定义和servlet映射定义 -每个被载入的servlet类都有一个名字,且被填入该Context的映射表(mapping table)中,和某种URL PATTERN对应 -当该Context获得请求时,将查询mapping table,找到被请求的servlet,并执行以获得请求回应 -分析一下所有的Context共享的web.xml文件,在其中定义的servlet被所有的Web App载入(3) 举例说明
我们将通过一个例子来说明Tomcat处理一个http请求的过程 假设来自客户端的请求为
http://localhost:8080/test/test_index.jsp
请求被发送到本机的8080端口你,由那里一直侦听的connector获得。
connector将请求交个其service所有的container处理
Engine获得localhost:8080/test/test_index.jsp,匹配其虚拟主机localhost
Host localhost获得/test/test_index.jsp,匹配其Context为test,
path为/test的context获得请求/test_index.jsp,并寻找对应的servlet
Context找到对应的servlet类
构造req和resp对象,调用servlet的doGet方法或者doPost方法
最后把执行的resp对象依次返还给Host、Engine、Connector、browser。