Tomcat服务器本质
- Tomcat是运行在JVM中的一个进程。通过处理scoket通信 (Socket) 来运行。
- Web项目的本质,是一大堆的资源文件和方法。Web项目没有入口方法(main方法),意味着Web项目中的方法不会自动运行起来。
- Web项目部署进Tomcat的webapp中,那就是希望Tomcat去调用写好的方法去为客户端返回需要的资源和数据。
- Tomcat一定有一个main方法。Tomcat可以运行起来,并调用写好的方法。
- 对于Tomcat而言,它并不知道我们会有什么样的方法,这些都只是在项目被部署进webapp下后才确定的,由此分析,必然用到了Java的反射来实现类的动态加载、实例化、获取方法、调用方法。但是我们部署到Tomcat的中的Web项目必须是按照规定好的接口来进行编写,以便进行调用。
Tomcat体系架构
- Service组件
Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理。各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。 - Connector组件
Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自于客户端的请求。一个引擎可以有一个或多个连接器,以适应多种请求方式。 - Engine组件
Engine是Servlet处理器的一个实例,即servlet引擎 - Host组件
位于Engine容器中,用于接收请求并进行相应处理的主机或虚拟主机 - Context组件
Context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个Web应用程序
Tomcat 处理一个HTTP请求的过程
- 用户在浏览器中输入网址localhost:8080/test/index.jsp,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1 Connector获得;
- Connector把该请求交给它所在的Service的Engine(Container)来处理,并等待Engine的回应;
- Engine获得请求localhost/test/index.jsp,匹配所有的虚拟主机Host;
- Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机),名为localhost的Host获得请求/test/index.jsp,匹配它所拥有的所有Context。Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为“ ”的Context去处理);
- path=“/test”的Context获得请求/index.jsp,在它的mapping table中寻找出对应的Servlet。Context匹配到URL Pattern为*.jsp的Servlet,对应于JspServlet类;
- 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet()或doPost(),执行业务逻辑、数据存储等;
- Context把执行完之后的HttpServletResponse对象返回给Host;
- Host把HttpServletResponse对象返回给Engine;
- Engine把HttpServletResponse对象返回Connector;
- Connector把HttpServletResponse对象返回给客户Browser
参考(https://www.cnblogs.com/small-boy/p/8042860.html)