1、Tomcat的内部大体结构(内容来源网络)
Tomcat 介绍
Tomcat的主要功能

toncat作为一个web服务器,实现了两个核心的功能
http 服务器功能:进行socket 通信(基于TCP/IP),解析HTTP 报文
Servlet 容器功能:加载和管理Servlet ,由Servlet 具体负责处理Rqeusts 请求
以上两个功能对应着tomcat的两个核心组件,分别是连接器(Connector)和容器(Container),连接器负责对外交流(完成http服务器功能),容器负责内部处理(完成Servlet容器功能)

Server server 服务器的意思,代表着整个tomcat服务器,一个tomcat只有一个Servler,Server中包含一个Server 组件,用户提供具体服务。
Service 服务是server 内部的组件,一个Server可以包括多个Service。将若干个Connector 组件绑定到一个Container。
Connector 连接器,是service的核心组件之一,一个service 可以有多个Connector,主要连接客户端的请求,用于接受请求并将请求封装成request和response,然后交给Container进行处理,Container 处理完之后交个Connector返回给客户端。
Container 负责处理用户的Servlet 请求。
Connector 连接器
连接器主要完成以下三个核心功能
socket 通信,即网络编程
解析处理应用层协议,封装成一个Request对象。
将request 转换为ServletReqiest,将Response转换为ServletResponse
以上三个组件分别对应 EndPoint、Processor、Adapter来完成,Endpoint 负责提供请求字节流给Process,Porcess负责提供Tomcat 定义的request 对象来给Adapter,Adapter负责提供标准的ServletRequest 对象给Servlet 容器。

Container 容器
Container 组件成为Catalina,其是tomcat的核心,在Container 中,有四种容器,分别是Engine,Host,Context, wrapper,这四个容器成为套娃式的分层结构设计。

四种容器的作用:
Engine 表示整个Catalina的Servlet 引擎,用来管理多个虚拟站点,一个service最多只能有一个Engine,但是一个引擎可包含多个host。
Host 代表一个虚拟机,或者一个站点,可以给Tomcat 配置多个虚拟主机的地址,而一个虚拟主机可包含多个Context
Context 表示一个web应用程序,每一个context都有唯一的path,一个web应用可以包含多个wrapper
Wrapper 表示一个Servlet,负责管理整个Servlet的声明周期,包括装载,初始化,资源回收等。
tomcat9接收请求的核心类

org.apache.catalina.connector.CoyoteAdapter然后进入这个类
public void service(org.apache.coyote.Request req, org.apache.coyote.Response res)

原文链接:https://blog.csdn.net/wuwenshequ/article/details/141223346
2、零散的一些分析
1.web.xml内容
<servlet>
<servlet-name>PersonServlet</servlet-name>
<servlet-class>com.bqs.webtest.action.PersonServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>PersonServlet</servlet-name>
<!-- 当前web.xml中没有配置其他更加精准的,如xx.do的Servlet时,就会全部到这里来, 就算是内部的forward,如果填写的地址没有更精准的匹配的话,也会被拦截-->
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>WelComeServlet</servlet-name>
<servlet-class>com.bqs.webtest.action.WelComeServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>WelComeServlet</servlet-name>
<url-pattern>/welcome.do</url-pattern>
</servlet-mapping>
<!-- 这个欢迎的 优先级别要小于 person的url的拦截模式,基本的意思就是 如果全局找不到符合的请求资源响应的话 才用这个欢迎的,如果有的话就用 匹配的-->
<welcome-file-list>
<welcome-file>welcome.do</welcome-file>
</welcome-file-list>
3、结构分析
1、看下server对象


接下来看看service对象

看下连接器对象


下面看看Engine对象

在看下host


在看看每个应用的实体对象


1390

被折叠的 条评论
为什么被折叠?



