java中,常用的web服务器一般由tomcat,weblogic,jetty,undertwo等,但从用户使用广泛度来说,tomcat用户量相对比较大一些,当然这也基于它开源和免费的特点。

从软件架构的发展角度来看,软件架构大致经历了如下几个阶段(当然,我们这篇文章不是主讲架构的,因此只是简单提一下架构发展,至于具体的架构,会在后面的文章中陆续与大家分享架构系列):

那么从java web角度来说,架构大致经历了:

Sevlet架构=》SSH架构=》SSM架构=》分布式垂直架构=》SOA架构=》微服务架构

从当前企业使用的架构角度来说,企业使用SSM架构项目比较多,SSH基本别淘汰(大部分都是老项目维护),最近2年,也有一部分企业开始转向微服务架构了。

基于java spring生态来说,如今,大部分中小型企业都基本使用springboot,springboot本身集成了tomcat,jetty和undertwo容器,那么我们为什么要花时间来研究tomcat呢?

1.当前tomcat依然是主流java web容器,研究它,符合java 技术生态发展;

2.在java web项目调优中,如ssm项目中,在优化项目时,jvm和tomcat同样重要,都需要优化;

3.尽管springboot内置了tomcat容器,且配置了默认的tomcat参数,但当默认的tomcat参数满足不了项目优化要求时,就需要优化人员手动进行相关的参数优化,因此研究tomcat非常必要;

4.熟悉tomcat架构,是后续进行项目优化的基础,也是必备条件

基于如上原因但不限于如上原因,本篇文章将从tomcat架构角度分析tomca架构。本篇文件主要内容包括:简要分析tomcat架构和tomcat项目文件介绍,更深入的架构浅析,将在下篇文章中讲述。

一 Tomcat架构

通过tomcat官方发行,tomcat发展还是比较快的,目前已经更新到tomcat 10了 ,但当前大部分企业使用的tomcat为9或8版本。

通过阅读tomcat源码,tomcat简要架构可归结为如下(关于更详细的架构图和架构细节,将在详解tomcat架构(下篇)中分享)。

从上图中,可以得出:

1.tomcat重要主件:

Server主件:作为tomcat服务器主件

service主件:作为tomcat服务主件,即向外提供服务,由一个或多个Host组成

Connector主件:表示连接主件,外部访问tomcat时,通过该主键访问,其支持的比较重要的三个核心协议,http,https和ajp

Engine主件:tomcat引擎主件

Host主件:Tomcat主机主件

Context:tomcat项目主件,一个Context代表也给tomcat项目

2.tomcat支持的三大协议

http协议,ajp协议,https协议。

关于更复杂的架构细节,在下一篇文章中分享。

二  tomcat目录结构

bin:可执行文件,.sh结尾的表示linux可执行文件,.bat结尾的表示linux可执行文件

conf:配置文件

lib:tomcat相关jar包

temp:临时文件

webapps:存放项目

work:工作目录

三 Tomcat各目录结构详细介绍

(一)bin

bin目录存放可执行文件,简要结束常用命令:

这里主要解释如下通用的命令,其他命令就不一一介绍

startup.sh  程序项目命令文件

version.sh  查看tomcat版本相关信息命令文件

shutdown.sh  关闭程序命令

(二) conf

conf文件夹用来存放tomcat相关配置文件

1.catalina.policy

项目安全文件,用来防止欺骗代码或JSP执行带有像System.exit(0)这样的命令的可能影响容器的破坏性代码. 只有当Tomcat用-security命令行参数启动时这个文件才会被使用,即启动tomcat时,startup.sh  -security。

上图中,tomcat容器下部署两个项目,项目1和项目2。由于项目1中有代码System.exit(0),当访问该代码时,该代码会导致整个tomcat停止,从而也导致项目2停止。

为了解决因项目1存在欺骗代码或不安全代码导致损害Tomcat容器,从而影响其他项目正常运行的问题,启动tomcat容器时,加上-security参数就,即startup.sh  -security,如此即使项目1中有代码System.exit(0),也只会仅仅停止项目1,而不会影响Tomcat容器,然而起作用的配置文件就是catalina.policy文件。

2.catalina.properties

配置tomcat启动相关信息文件

3.context.xml

监视并加载资源文件,当监视的文件发生发生变化时,自动加载

4.jaspic-providers.xml 和 jaspic-providers.xsd

这两个文件不常用

5.logging.properties

该文件为tomcat日志文件,包括配置tomcat输出格式,日志级别等

6.server.xml

tomcat核心架构主件文件,在下一一篇文章中重点从架构角度分析。

7.tomcat-users.xml和tomcat-users.xsd

tomcat用户文件,如配置远程登陆账号,参考我的另外一篇博文

https://blog.csdn.net/u010228798/article/details/104822043

tomcat-users.xsd 为tomcat-users.xml描述和约束文件

8.web.xml

tomcat全局配置文件。

(三) lib

lib文件夹主要用来存放tomcat依赖jar包,如下为tomcat 10的lib文件夹下的相关jar包。

每个jar包功能,这里就不讲解了,这里主要分析ecj-4.13.jar,这个jar包起到将.java编译成.class字节码作用。

假设要编译MyTest.java,那么jdk会执行两步:

第一步:将MyTest.java编译成MyTest.class

javac  MyTest.java

第二步:执行MyTest.class

java MyTest.class

那么,使用ecj-4.13.jar如执行MyTest.java呢?

java -jar ecj-4.13.jar MyTest.java

(四)logs

该文件夹表示tomcat日志文件,大致包括如下六类文件:

catalina.date.log,catalina.out,host-manager.date.log,localhost.date.log.localhost_access_log.date.txt和manager.date.log

catalina.date.log(如catalina.2020-03-17.log):

表示tomcat启动文件,需要注意的是,该文件只有在重启tomcat情况下,才会产生。

manager.date.log(如manager.2020-03-17.log):

表示访问webapps下manager项目日志,如访问 ip:8080/manager/html

host-manager.date.log(如host-manager.2020-03-17.log):

表示访问webapps下host-manager项目日志,如访问 ip:8080/host-manager/html

localhost.date.log(如localhost.2020-03-17.log):

(?)表示tomcat在启动时,自身访问服务,这个日志只记录tomcat访问日志,而非业务项目日志

localhost_access_log.date.txt(如localhost_access_log.2020-03-17.txt)

表示访问tomcat所有项目的日志记录,如下表示访问项目localhost,host-manager.html,manager.html和test/index.html四个项目日志记录

catalina.out:

表示catalina.date.log日志汇总,如2020.3.7和2020.3.8两天分别启动了tomcat,则会阐述如下两个日志:

catalina.2020-03-17.log和catalina.2020-03-18.log

那么,catalina.out内容就是catalina.2020-03-17.log加catalina.2020-03-17.log日志内容

四  本系列文章

1.基于linux和windows部署tomcat

2.配置tomcat远程访问:https://blog.csdn.net/u010228798/article/details/104822043

3.tomcat部署程序的四种方式

4.详解tomcat架构(上篇)

5.详解tomcat架构(下篇)

6.详解JVM优化相关参数

7.详解jvm优化工具:jconsole和jvisualvm

8.使用idea解读tomcat源码

9.解决idea下乱码问题:https://blog.csdn.net/u010228798/article/details/93355667

10.优化tomcat

五  版权区

感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。

从入门到架构群:820424。

极少部分文章利用读书、参考、引用、抄袭、复制和粘贴等多种方式整合而成的,大部分为原创。

如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:2098469527@qq.com。

demo访问地址:http://106.14.139.196/SaleManage/Index ,本套源码49元,需要购买请咨询:2098469527

可以转载该博客,但必须著名博客来源

【tomcat系列】详解tomcat架构(上篇)的更多相关文章

  1. 【Tomcat】详解tomcat的连接数与线程池

    前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). Connector的主要功能,是接收连接请求,创建Req ...

  2. [svc]tomcat配置文件详解

    Tomcat系列之服务器的安装与配置以及各组件详解 tomcat 配置文件详解 tomcat安全管理规范

  3. 详解Tomcat系列(一)-从源码分析Tomcat的启动

    在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来. 由于篇幅的原因, 很难把Tomcat所有的知 ...

  4. tomcat配置文件详解

    Tomcat系列之服务器的安装与配置以及各组件详解   tomcat 配置文件详解

  5. 详解tomcat的连接数与线程池

    前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). 在前面的文章 详解Tomcat配置文件server.xm ...

  6. 详解Tomcat的连接数和线程池

    转: https://www.cnblogs.com/kismetv/p/7806063.html#t11 前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须 ...

  7. TOMCAT原理详解及请求过程(转载)

    转自https://www.cnblogs.com/hggen/p/6264475.html TOMCAT原理详解及请求过程 Tomcat: Tomcat是一个JSP/Servlet容器.其作为Ser ...

  8. 详解 Tomcat 的连接数与线程池

      前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). 在前面的文章 详解Tomcat配置文件server. ...

  9. 详解tomcat连接数和线程数

    前言 在使用tomcat时,经常会遇到连接数.线程数之类的配置问题,要真正理解这些概念,必须先了解Tomcat的连接器(Connector). 在前面的文章 详解Tomcat配置文件server.xm ...

随机推荐

  1. HDU-2511-汉诺塔 X

    首先我们来求第m次移动的盘子号数,先列出当m比较小可以直接观察的前几项 m : 1.2.3.4.5.6.7.8.9.10 id : 1.2.1.3.1.2.1.4.1.2 很容易联想到树状数组的low ...

  2. 用ES6和fetch封装网络请求

    导读: fetch: 这个方法是ES2017中新增的特性,这个特性出来后给人一种传统ajax已死的感觉,其实它的作用是替代浏览器原生的XMLHttpRequest异步请求,我们在日常的开发中,基本不会 ...

  3. 敏捷开发方法(一) Scrum

    Scrum团队:由产品负责人.开发团队和Scrum Master组成. 是跨职能的自组织团队 自组织团队自己选择如何最好地完成工作,而不是由团队外的人指导 跨职能团队拥有完成工作所需要的全部技能,不需 ...

  4. 初等数论-Base-1(筛法求素数,欧拉函数,欧几里得算法)

    前言 初等数论在OI中应用的基础部分,同机房的AuSquare和zhou2003君早就写完了,一直划水偷懒的Hk-pls表示很方,这才开始了这篇博客. \(P.S.\)可能会分部分发表. Base-1 ...

  5. Java Servlet和Java Filter简介

    一:简介servlet 1.什么是Servlet? Servlet可以通过多种方式进行描述,具体取决于上下文: (1)Servlet是一种用于创建web应用程序的技术 (2)Servlet是一个API ...

  6. 通过ELK快速搭建集中化日志平台

    ELK就是ElasticSearch + LogStash + Kibana 1.准备工作 ELK下载:https://www.elastic.co/downloads/ jdk version:1. ...

  7. 学习HEXO的历程

    前言: 简介 开始搭建 命令 API测试 逛github相关的帖子时,发现了hexo.正好想要做一个个人的博客,用来记录自己的各类感悟,所以花一些时间学习学习,以后博客可以放github,省得去注册c ...

  8. 微软发布MS MARCO数据集,提高计算机阅读理解能力

    ​ MARCO数据集,提高计算机阅读理解能力" title="微软发布MS MARCO数据集,提高计算机阅读理解能力"> ​ 本文译自:Microsoft data ...

  9. 漫谈国内外Android生态:华为发布的 HMS 服务,对 Mate30 系列无法搭载 Google GMS 的补偿有多大(原创)

    如果既用过iPhone,也用过国际版Android,还用过国内的安卓,(并且这三种都用了半年以上),就能体会到GMS多重要.可以说,iOS的体验大幅度领先于国内的安卓,一多半的原因是国内安卓没有GMS ...

  10. Java入门教程十二(集合与泛型)

    在 Java 中数组的长度是不可修改的.然而在实际应用的很多情况下,无法确定数据数量.这些数据不适合使用数组来保存,这时候就需要使用集合. Java 的集合就像一个容器,用来存储 Java 类的对象. ...