zoukankan      html  css  js  c++  java
  • 【Tomcat】Tomcat 原理架构(一)

    Tomcat是什么

      开源的 Java Web 应用服务器,实现了 Java EE(Java Platform Enterprise Edition)的部 分技术规范,比如 Java Servlet、Java Server Page、JSTL、Java WebSocket。Java EE 是 Sun 公 司为企业级应用推出的标准平台,定义了一系列用于企业级开发的技术规范,除了上述的之外,还有 EJB、Java Mail、JPA、JTA、JMS 等,而这些都依赖具体容器的实现。

    Tomcat目录

      |---bin: 存放启动和关闭tomcat脚本
      |---conf: 存放不同的配置文件(server.xml和web.xml);
      |---doc: 存放Tomcat文档;
      |---lib/japser/common: 存放Tomcat运行需要的库文件(JARS);
      |---logs: 存放Tomcat执行时的LOG文件;
      |---src: 存放Tomcat的源代码;
      |---webapps: Tomcat的主要Web发布目录(包括应用程序示例);
      |---work: 存放jsp编译后产生的class文件;

    Tomcat配置文件

      server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;

      web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;

      tomcat-user.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户  指定角色等将通过编辑此文件实现;

      catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力;

      catalina.properties:Tomcat内部package的定义及访问相关控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置;

      logging.properties: Tomcat6通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组  件级别以及日志文件的存在位置等;

      context.xml:所有host的默认配置信息;

    Tomcat 组成

      结构图如下

        

      Server:指的就是整个 Tomcat 服 务器,包含多组服务,负责管理和 启动各个 Service,同时监听 8005 端口发过来的 shutdown 命令,用 于关闭整个容器 ;

      Service:Tomcat 封装的、对外提 供完整的、基于组件的 web 服务, 包含 Connectors、Container 两个 核心组件,以及多个功能组件,各 个 Service 之间是独立的,但是共享 同一 JVM 的资源 ;

      Connector:Tomcat 与外部世界的连接器,监听固定端口接收外部请求,传递给 Container,并 将 Container 处理的结果返回给外部;

      Container:Catalina,Servlet 容器,内部有多层容器组成,用于管理 Servlet 生命周期,调用 servlet 相关方法。

      Loader:封装了 Java ClassLoader,用于 Container 加载类文件; Realm:Tomcat 中为 web 应用程序提供访问认证和角色管理的机制;

      JMX:Java SE 中定义技术规范,是一个为应用程序、设备、系统等植入管理功能的框架,通过 JMX 可以远程监控 Tomcat 的运行状态;

      Jasper:Tomcat 的 Jsp 解析引擎,用于将 Jsp 转换成 Java 文件,并编译成 class 文件。 Session:负责管理和创建 session,以及 Session 的持久化(可自定义),支持 session 的集
    群。

      Pipeline:在容器中充当管道的作用,管道中可以设置各种 valve(阀门),请求和响应在经由管 道中各个阀门处理,提供了一种灵活可配置的处理请求和响应的机制。

      Naming:命名服务,JNDI, Java 命名和目录接口,是一组在 Java 应用中访问命名和目录服务的 API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象,目录服务也是一种命名 服务,对象不但有名称,还有属性。Tomcat 中可以使用 JNDI 定义数据源、配置信息,用于开发 与部署的分离。

      

      Server结构图

        

      

      Server标签设置的端口号为8005,shutdown=”SHUTDOWN” ,表示在8005端口监听“SHUTDOWN”命令,如果接收到了就会关闭Tomcat。一个Server有一个Service,当然还可以进行配置,一个Service有多个,Service左边的内容都属于Container的,Service下边是Connector。

    请求处理流程

      

      

      描述:

      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。






     
  • 相关阅读:
    动态查找>红黑树(RedBlack Tree)
    JSF>表格设置行的颜色
    获取某一天之前或者之后多少天的日期
    java基础>jdbc数据库操作
    java基础>Exception
    数据结构>优先队列(堆)
    java基础>I/O
    java基础>线程 生产者消费者问题
    java基础>泛型
    动态规划>可靠性设计
  • 原文地址:https://www.cnblogs.com/h--d/p/11376880.html
Copyright © 2011-2022 走看看