Tomcat 一文带你了解tomcat体系结构

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目录结构


[root@www tomcat]# ll
total 92
drwxr-xr-x 2 root root  4096 Sep  7 10:43 bin
drwxr-xr-x 3 root root   198 Sep  7 10:45 conf
drwxr-xr-x 2 root root  4096 Sep  7 10:43 lib
-rw-r--r-- 1 root root 57011 Nov  9  2016 LICENSE
drwxr-xr-x 2 root root   240 Sep  8 10:29 logs
-rw-r--r-- 1 root root  1444 Nov  9  2016 NOTICE
-rw-r--r-- 1 root root  6741 Nov  9  2016 RELEASE-NOTES
-rw-r--r-- 1 root root 16195 Nov  9  2016 RUNNING.txt
drwxr-xr-x 2 root root    30 Sep  7 10:43 temp
drwxr-xr-x 7 root root    81 Nov  9  2016 webapps
drwxr-xr-x 3 root root    22 Sep  7 10:45 work

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

conf:配置文件

lib:tomcat相关jar包

temp:临时文件

webapps:存放项目

work:工作目录

 

Tomcat各目录结构详细介绍


(一)bin

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

[root@www bin]# ls
bootstrap.jar       commons-daemon.jar            daemon.sh         setclasspath.sh  startup.sh            tool-wrapper.sh
catalina.bat        commons-daemon-native.tar.gz  digest.bat        shutdown.bat     tomcat-juli.jar       version.bat
catalina.sh         configtest.bat                digest.sh         shutdown.sh      tomcat-native.tar.gz  version.sh
catalina-tasks.xml  configtest.sh                 setclasspath.bat  startup.bat      tool-wrapper.bat

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

startup.sh  程序项目命令文件

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

shutdown.sh  关闭程序命令

(二) conf

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

[root@www conf]# ll
total 216
drwxr-xr-x 3 root root     23 Sep  7 10:45 Catalina
-rw------- 1 root root  12767 Nov  9  2016 catalina.policy
-rw------- 1 root root   7125 Nov  9  2016 catalina.properties
-rw------- 1 root root   1577 Nov  9  2016 context.xml
-rw------- 1 root root   3387 Nov  9  2016 logging.properties
-rw------- 1 root root   6458 Nov  9  2016 server.xml
-rw------- 1 root root   2164 Nov  9  2016 tomcat-users.xml
-rw------- 1 root root   2634 Nov  9  2016 tomcat-users.xsd
-rw------- 1 root root 168378 Nov  9  2016 web.xml

1.catalina.policy

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

[root@www bin]# ./startup.sh -security
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/jdk1.8.0_131
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using Security Manager
Tomcat started.

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

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

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/108465336