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 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协议。
关于更复杂的架构细节,在下一篇文章中分享。
bin:可执行文件,.sh结尾的表示linux可执行文件,.bat结尾的表示linux可执行文件
conf:配置文件
lib:tomcat相关jar包
temp:临时文件
webapps:存放项目
work:工作目录
bin目录存放可执行文件,简要结束常用命令:
这里主要解释如下通用的命令,其他命令就不一一介绍
startup.sh 程序项目命令文件
version.sh 查看tomcat版本相关信息命令文件
shutdown.sh 关闭程序命令
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://www.cdsy.xyz/computer/servers/Tomcat/230517/cd43685.html
tomcat-users.xsd 为tomcat-users.xml描述和约束文件
8.web.xml
tomcat全局配置文件。
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
该文件夹表示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://www.cdsy.xyz/computer/servers/Tomcat/230517/cd43685.html
3.tomcat部署程序的四种方式
4.详解tomcat架构(上篇)
5.详解tomcat架构(下篇)
6.详解JVM优化相关参数
7.详解jvm优化工具:jconsole和jvisualvm
8.使用idea解读tomcat源码
9.解决idea下乱码问题:https://www.cdsy.xyz/computer/soft/develop/230513/cd43573.html
10.优化tomcat