tomcat 体系结构详解
详细查看原文博客https://www.cnblogs.com/f-ck-need-u/p/8120008.html#1-web-
下面详细介绍tomcat内部组件的作用:
Tomcat是一个servlet容器,实现了对Servlet和JSP的支持,除此之外,tomcat还可以作为
一个web应用服务器。独立的Servlet容器是Tomcat的默认模式。管理和运行Servlet/JSP的
容器也称为WEB容器。
Tomcat服务器接受客户请求并做出响应的过程如下:
1)客户端(通常都是浏览器)访问Web服务器,发送HTTP请求。
2)Web服务器接收到请求后,传递给Servlet容器。
3)Servlet容器加载Servlet,产生Servlet实例后,向其传递表示请求和响应的对象。
4)Servlet实例使用请求对象得到客户端的请求信息,然后进行相应的处理。
5)Servlet实例将处理结果通过响应对象发送回客户端,容器负责确保响应正确送出,同时
将控制返回给Web服务器。
Servlet容器的作用:
负责处理客户请求,当客户请求来到时,Servlet容器获取请求,然后调用某个
Servlet,并把Servlet的执行结果返回给客户。
使用Servlet容器的原因:
通信支持:利用容器提供的方法,你能轻松的让servlet与web服务器对话,而不用自己建
立serversocket、监听某个端口、创建流等 等。容器知道自己与web服务器之间的协议,所
以你的servlet不用担心web服务器(如Apache)和你自己的web代码之间的API,只需要考
虑如何在servlet中实现业务逻辑(如处理一个订单)。
生命周期管理:servlet容器控制着servlet的生与死,它负责加载类、实例化和初始化
servlet,调用servlet方法,以及使servlet实例被垃圾回收,有了servlet容器,你不需要太多
的考虑资源管理。
多线程支持:容器会自动为它所接收的每个servlet请求创建一个新的java线程。针对用户
的请求,如果servlet已经运行完相应的http服务方法,这个线程就会结束。这并不是说你不
需要考虑线程安全性,其实你还会遇到同步问题,不过这样能使你少做很多工作。
声明方式实现安全:利用servlet容器,可以使用xml部署描述文件来配置和修改安全性,
而不必将其硬编码写到servlet类代码中。
JSP支持:servlet容器负责将jsp代码翻译为真正的java代码。
Tomcat的体系结构:
Tomcat服务器是由一系列可配置的组件构成的,其中核心组件是Catalina Servlet容器,
它是所有其他Tomcat组件的顶层容器。
<?xml version='1.0' encoding='utf8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF8"/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost">
<Context path="" docBase="dlmj" reloadable="true"/>
</Host>
</Engine>
</Service>
</Server>
(1) Server
Server表示整个的Catalina Servlet容器。Tomcat提供了Server接口的一个默认实现,这通
常不需要用户自己去实现。在Server容器中,可以包含一个或多个Service组件。
(2) Service
Service是存活在Server内部的中间组件,它将一个或多个连接器(Connector)组件绑定到
一个单独的引擎(Engine)上。在Server中,可以包含一个或多个Service组件。Service也
很少由用户定制,Tomcat提供了Service接口的默认实现,而这种实现既简单又能满足应
用。
(3) Connector
连接器(Connector)处理与客户端的通信,它负责接收客户请求,以及向客户返回响应结
果。在Tomcat中,有多个连接器可以使用。
(4) Engine
在Tomcat中,每个Service只能包含一个Servlet引擎(Engine)。引擎表示一个特定的
Service的请求处理流水线。作为一个Service可以有多个连接器,引擎从连接器接收和处理
所有的请求,将响应返回给适合的连接器,通过连接器传输给用户。用户允许通过实现
Engine接口提供自定义的引擎,但通常不需要这么做。
(5) Host
Host表示一个虚拟主机,一个引擎可以包含多个Host。用户通常不需要创建自定义的
Host,因为Tomcat给出的Host接口的实现(类StandardHost)提供了重要的附加功能。
(6) Context
一个Context表示了一个Web应用程序,运行在特定的虚拟主机中。什么是Web应用程序
呢?在Sun公司发布的Java Servlet规范中,对Web应用程序做出了如下的定义:“一个Web
应用程序是由一组Servlet、HTML页面、类,以及其他的资源组成的运行在Web服务器上的
完整的应用程序。它可以在多个供应商提供的实现了Servlet规范的Web容器中运行”。一个
Host可以包含多个Context(代表Web应用程序),每一个Context都有一个唯一的路径。用
户 通 常 不 需 要 创 建 自 定 义 的 Context , 因 为 Tomcat 给 出 的 Context 接 口 的 实 ( 类
StandardContext)提供了重要的附加功能。
凡是实现了Servlet规范的都可以成为Servlet容器
理解ServletContext:
servlet容器需要在应用项目启动时,给应用项目初始化一个ServletContext作为
公共环境容器存放公共信息。ServletContext中的信息都是由容器提供的。通常
的配置是web.xml,执行流程如下:
web.xml在<contextparam></contextparam>标签中声明应用范围内的初始化参数
1.启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点:
<listener></listener> 和 <contextparam></contextparam>
2.紧接着,容器创建一个ServletContext(上下文)。在该应用内全局共享
3.容器将<contextparam></contextparam>转化为键值对,并交给ServletContext
4. 容 器 创 建 <listener></listener> 中 的 类 实 例 ,即 创 建 监 听 .该 监 听 器 必 须 实 现 自
ServletContextListener接口
1、servlet容器启动,为应用创建一个“全局上下文环境”:ServletContext
2、容器调用web.xml中配置的ContextLoaderListener,初始化
WebApplicationContext上下文环境(即IOC容器),加载contextparam指定的
配置文件信息到IOC容器中。WebApplicationContext在ServletContext中以键值
对的形式保存
3、容器初始化web.xml中配置的servlet,为其初始化自己的上下文信息
servletContext,并加载其设置的配置信息到该上下文中。将
WebApplicationContext设置为它的父容器。
4、此后的所有servlet的初始化都按照3步中方式创建,初始化自己的上下文环
境,将WebApplicationContext设置为自己的父上下文环境。
当Spring在执行ApplicationContext的getBean时,如果在自己context中找不
到对应的bean,则会在父ApplicationContext中去找。这也解释了为什么我们可以
在DispatcherServlet中获取到由ContextLoaderListener对应的ApplicationContext
中的bean。
---------------------
作者:vampire_Violet
来源:CSDN
原文:https://blog.csdn.net/qq_32332777/article/details/82225222
版权声明:本文为博主原创文章,转载请附上博文链接!