Tomcat
参考https://www.cnblogs.com/jeacebolgs/p/6580428.html
https://www.cnblogs.com/zhouyuqin/p/5143121.html
https://blog.csdn.net/xlgen157387/article/details/79006434
说实话 tomcat 用了这么久其实都没好好去了解一下它
去官网下载后解压的目录结构如下:
web应用的基本机构目录
tomcat 的配置文件 (conf) 构成:
server.xml:主配置文件;
web.xml:每个 webapp 只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的 webapps 提供默认部署相关的配置;
context.xml:每个 webapp 都可以专用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的 webapps 提供默认配置;
tomcat-users.xml:用户认证的账号和密码文件;
catalina.policy:当使用-security 选项启动 tomcat 时,用于为 tomcat 设置安全策略,一般不使用;
catalina.properties:Java 属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;
logging.properties:日志系统相关的配置;
server.xml配置结构
<Server>
<Service>
<Connector>
<Engine>
<Host>
<Context/>
<Context/>
...
</Host>
<Host>
...
</Host>
...
</Engine>
</Connector>
</Service>
</Server>
1、Server 元素:代表整个 Servlet 容器组件,是Tomcat的顶层元素。在 Server 元素中可以包含一个或者多个 Service 元素。
2、Service元素:包含一个 Engine 元素,以及一个或多个 Connector 元素,这些Connector 原先共享一个 Engine 元素。
3、Connector 元素:代表和客户程序时间交互的组件,负责接收客户请求,以及想客户返回响应结果。
4、Engine 元素:每个 Service 只能有一个 Engine 元素。 Engine 元素处理在同一个 Service 中所有 Contector 元素接收到的客户请求。
5、 Host 元素:在一个 Engine 元素中可以包含多个 Host 元素。每个 Host 元素定义了一个虚拟主机,他可以包含一个或多个 Web 应用。
6、 Context 元素:使用最频繁的元素。每个 Context 元素代表了运行在虚拟主机上的单个Web应用。在一个
处理一个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。