tomcat 体系结构详解

mac2022-06-30  91

详细查看原文博客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='utf­8'?> <Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443" URIEncoding="UTF­8"/> <Engine name="Catalina" defaultHost="localhost"> <Host name="localhost"> <Context path="" docBase="dlmj" reloadable="true"/> </Host> </Engine> </Service> </Server>(1) ServerServer表示整个的Catalina Servlet容器。Tomcat提供了Server接口的一个默认实现,这通常不需要用户自己去实现。在Server容器中,可以包含一个或多个Service组件。(2) ServiceService是存活在Server内部的中间组件,它将一个或多个连接器(Connector)组件绑定到一个单独的引擎(Engine)上。在Server中,可以包含一个或多个Service组件。Service也很少由用户定制,Tomcat提供了Service接口的默认实现,而这种实现既简单又能满足应用。(3) Connector连接器(Connector)处理与客户端的通信,它负责接收客户请求,以及向客户返回响应结果。在Tomcat中,有多个连接器可以使用。(4) Engine在Tomcat中,每个Service只能包含一个Servlet引擎(Engine)。引擎表示一个特定的Service的请求处理流水线。作为一个Service可以有多个连接器,引擎从连接器接收和处理所有的请求,将响应返回给适合的连接器,通过连接器传输给用户。用户允许通过实现Engine接口提供自定义的引擎,但通常不需要这么做。(5) HostHost表示一个虚拟主机,一个引擎可以包含多个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在<context­param></context­param>标签中声明应用范围内的初始化参数 1.启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点:<listener></listener> 和 <context­param></context­param>2.紧接着,容器创建一个ServletContext(上下文)。在该应用内全局共享3.容器将<context­param></context­param>转化为键值对,并交给ServletContext4. 容 器 创 建 <listener></listener> 中 的 类 实 例 ,即 创 建 监 听 .该 监 听 器 必 须 实 现 自ServletContextListener接口

1、servlet容器启动,为应用创建一个“全局上下文环境”:ServletContext2、容器调用web.xml中配置的ContextLoaderListener,初始化WebApplicationContext上下文环境(即IOC容器),加载context­param指定的配置文件信息到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 来源: 原文:https://blog.csdn.net/qq_32332777/article/details/82225222 版权声明:本文为博主原创文章,转载请附上博文链接!

 

转载于:https://www.cnblogs.com/Shunia123/p/10642786.html

相关资源:Tomcat体系结构与插件配置教程图解
最新回复(0)