zoukankan      html  css  js  c++  java
  • 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='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) 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在<context­param></context­param>标签中声明应用范围内的初始化参数
    1.启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点:
    <listener></listener> 和 <context­param></context­param>
    2.紧接着,容器创建一个ServletContext(上下文)。在该应用内全局共享
    3.容器将<context­param></context­param>转化为键值对,并交给ServletContext
    4. 容 器 创 建 <listener></listener> 中 的 类 实 例 ,即 创 建 监 听 .该 监 听 器 必 须 实 现 自
    ServletContextListener接口

    1、servlet容器启动,为应用创建一个“全局上下文环境”:ServletContext
    2、容器调用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
    来源:CSDN
    原文:https://blog.csdn.net/qq_32332777/article/details/82225222
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    你人生中的那口井挖了没有?
    Stream接口
    console (控制台)
    assert.fail()
    assert.strictEqual()
    assert.equal()
    assert.ifError()
    assert.ok()
    nodejs assert 模块
    闭包
  • 原文地址:https://www.cnblogs.com/Shunia123/p/10642786.html
Copyright © 2011-2022 走看看