总结tomcat的核心组件以及根目录结构

总结tomcat的核心组件以及根目录结构

1 tomcat的目录结构

目录说明
bin服务启动、停止等相关程序和文件
conf配置文件目录
lib库目录
logs日志文件目录
temp临时文件目录
webapps应用程序,应用部署目录
workjsp编译后的结果文件,建议提前预热访问
[root@centos7 tomcat]#pwd
/usr/local/tomcat
[root@centos7 tomcat]#tree -L 1 -d
.
├── bin
├── conf
├── lib
├── logs
├── temp
├── webapps
└── work

7 directories

1.1 bin目录

用于存放 Tomcat的启动、停止等相关程序文件和Shell脚本

目录及文件说明
bin/startup.sh用于在 Linux下启动 Tomcat
bin/startup.bat用于在 Windows下启动 Tomcat
bin/shutdown.sh用于在 Linux下停止 Tomcat
bin/shutdown.bat用于在 Windows下停止 Tomcat
bin/catalina.sh用于在 Linux下启动和关闭 Tomcat
bin/version.sh用于在 Linux下查看 Tomcat版本信息
[root@centos7 tomcat]#ll  bin/
total 880
-rw-r----- 1 tomcat tomcat  36192 Apr  1 00:05 bootstrap.jar
-rw-r----- 1 tomcat tomcat  16840 Apr  1 00:05 catalina.bat
-rwxr-x--- 1 tomcat tomcat  25294 Apr  1 00:05 catalina.sh
-rw-r----- 1 tomcat tomcat   1664 Apr  1 00:05 catalina-tasks.xml
-rw-r----- 1 tomcat tomcat   2123 Apr  1 00:05 ciphers.bat
-rwxr-x--- 1 tomcat tomcat   1997 Apr  1 00:05 ciphers.sh
-rw-r----- 1 tomcat tomcat  25308 Apr  1 00:05 commons-daemon.jar
-rw-r----- 1 tomcat tomcat 210038 Apr  1 00:05 commons-daemon-native.tar.gz
-rw-r----- 1 tomcat tomcat   2040 Apr  1 00:05 configtest.bat
-rwxr-x--- 1 tomcat tomcat   1922 Apr  1 00:05 configtest.sh
-rwxr-x--- 1 tomcat tomcat   9100 Apr  1 00:05 daemon.sh
-rw-r----- 1 tomcat tomcat   2091 Apr  1 00:05 digest.bat
-rwxr-x--- 1 tomcat tomcat   1965 Apr  1 00:05 digest.sh
-rw-r----- 1 tomcat tomcat   3460 Apr  1 00:05 setclasspath.bat
-rwxr-x--- 1 tomcat tomcat   3708 Apr  1 00:05 setclasspath.sh
-rw-r----- 1 tomcat tomcat   2020 Apr  1 00:05 shutdown.bat
-rwxr-x--- 1 tomcat tomcat   1902 Apr  1 00:05 shutdown.sh
-rw-r----- 1 tomcat tomcat   2022 Apr  1 00:05 startup.bat
-rwxr-x--- 1 tomcat tomcat   1904 Apr  1 00:05 startup.sh
-rw-r----- 1 tomcat tomcat  51379 Apr  1 00:05 tomcat-juli.jar
-rw-r----- 1 tomcat tomcat 429747 Apr  1 00:05 tomcat-native.tar.gz
-rw-r----- 1 tomcat tomcat   4574 Apr  1 00:05 tool-wrapper.bat
-rwxr-x--- 1 tomcat tomcat   5540 Apr  1 00:05 tool-wrapper.sh
-rw-r----- 1 tomcat tomcat   2026 Apr  1 00:05 version.bat
-rwxr-x--- 1 tomcat tomcat   1908 Apr  1 00:05 version.sh

1.2 conf目录

用于存放 Tomcat的相关配置文件

注意:配置文件大小写敏感

目录及文件说明
conf/server.xml主配置文件,用于配置 Tomcat的链接器、监听端口、处理请求的虚拟主机等
conf/web.xml每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件
conf/context.xml用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件
conf/tomcat-users.xml用户认证的账号和密码文件
conf/catalina.policy当使用security选项启动tomcat时,用于为tomcat设置安全策略
conf/catalina.propertiesTomcat 环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数
conf/logging.propertiesTomcat 日志系统相关的配置,可以修改日志级别和日志路径等
conf/Catalina/用于存储针对每个虚拟机的 Context 配置
[root@centos7 tomcat]#ll  conf/
total 232
drwxr-x--- 3 tomcat tomcat   4096 Apr 22 20:16 Catalina
-rw------- 1 tomcat tomcat  12954 Apr  1 00:05 catalina.policy
-rw------- 1 tomcat tomcat   7707 Apr  1 00:05 catalina.properties
-rw------- 1 tomcat tomcat   1338 Apr  1 00:05 context.xml
-rw------- 1 tomcat tomcat   1149 Apr  1 00:05 jaspic-providers.xml
-rw------- 1 tomcat tomcat   2313 Apr  1 00:05 jaspic-providers.xsd
-rw------- 1 tomcat tomcat   3916 Apr  1 00:05 logging.properties
-rw------- 1 tomcat tomcat   7580 Apr  1 00:05 server.xml
-rw-r--r-- 1 tomcat tomcat     25 Apr 22 20:16 tomcat.conf
-rw------- 1 tomcat tomcat   2756 Apr  1 00:05 tomcat-users.xml
-rw------- 1 tomcat tomcat   2558 Apr  1 00:05 tomcat-users.xsd
-rw------- 1 tomcat tomcat 171879 Apr  1 00:05 web.xml

1.3 lib目录

Tomcat服务器依赖库目录,包含 Tomcat服务器运行环境依赖 jar包

[root@centos7 tomcat]#ll  lib/
total 8740
-rw-r----- 1 tomcat tomcat   12356 Apr  1 00:05 annotations-api.jar
-rw-r----- 1 tomcat tomcat   54059 Apr  1 00:05 catalina-ant.jar
-rw-r----- 1 tomcat tomcat  120997 Apr  1 00:05 catalina-ha.jar
-rw-r----- 1 tomcat tomcat 1721764 Apr  1 00:05 catalina.jar
-rw-r----- 1 tomcat tomcat   77625 Apr  1 00:05 catalina-storeconfig.jar
-rw-r----- 1 tomcat tomcat  294101 Apr  1 00:05 catalina-tribes.jar
-rw-r----- 1 tomcat tomcat 2450404 Apr  1 00:05 ecj-4.6.3.jar
-rw-r----- 1 tomcat tomcat   89441 Apr  1 00:05 el-api.jar
-rw-r----- 1 tomcat tomcat  170106 Apr  1 00:05 jasper-el.jar
-rw-r----- 1 tomcat tomcat  602651 Apr  1 00:05 jasper.jar
-rw-r----- 1 tomcat tomcat   26799 Apr  1 00:05 jaspic-api.jar
-rw-r----- 1 tomcat tomcat   61742 Apr  1 00:05 jsp-api.jar
-rw-r----- 1 tomcat tomcat  249335 Apr  1 00:05 servlet-api.jar
-rw-r----- 1 tomcat tomcat   10648 Apr  1 00:05 tomcat-api.jar
-rw-r----- 1 tomcat tomcat  883924 Apr  1 00:05 tomcat-coyote.jar
-rw-r----- 1 tomcat tomcat  285968 Apr  1 00:05 tomcat-dbcp.jar
-rw-r----- 1 tomcat tomcat   75372 Apr  1 00:05 tomcat-i18n-de.jar
-rw-r----- 1 tomcat tomcat  106263 Apr  1 00:05 tomcat-i18n-es.jar
-rw-r----- 1 tomcat tomcat  159755 Apr  1 00:05 tomcat-i18n-fr.jar
-rw-r----- 1 tomcat tomcat  180465 Apr  1 00:05 tomcat-i18n-ja.jar
-rw-r----- 1 tomcat tomcat  179224 Apr  1 00:05 tomcat-i18n-ko.jar
-rw-r----- 1 tomcat tomcat   48430 Apr  1 00:05 tomcat-i18n-ru.jar
-rw-r----- 1 tomcat tomcat  164122 Apr  1 00:05 tomcat-i18n-zh-CN.jar
-rw-r----- 1 tomcat tomcat  149103 Apr  1 00:05 tomcat-jdbc.jar
-rw-r----- 1 tomcat tomcat   34823 Apr  1 00:05 tomcat-jni.jar
-rw-r----- 1 tomcat tomcat  185499 Apr  1 00:05 tomcat-util.jar
-rw-r----- 1 tomcat tomcat  214053 Apr  1 00:05 tomcat-util-scan.jar
-rw-r----- 1 tomcat tomcat  238006 Apr  1 00:05 tomcat-websocket.jar
-rw-r----- 1 tomcat tomcat   38449 Apr  1 00:05 websocket-api.jar

1.4 logs目录

Tomcat默认的日志存放路径

目录及文件说明
logs/catalina.outTomcat服务日志
logs/host-manager.日期.loghost manager管理日志,对应webapps/host-manager/
logs/localhost.日期.log默认主机日志
logs/localhost_access_log.日期.txt默认主机访问日志
logs/manager.日期.logmanager 管理日志,对应webapps/manager/
[root@centos7 tomcat]#ll  logs/
total 52
-rw-r----- 1 tomcat tomcat 12238 Apr 22 22:17 catalina.2022-04-22.log
-rw-r----- 1 tomcat tomcat  6008 Apr 23 09:07 catalina.2022-04-23.log
-rw-r----- 1 tomcat tomcat 18246 Apr 23 09:07 catalina.out
-rw-r----- 1 tomcat tomcat     0 Apr 22 20:16 host-manager.2022-04-22.log
-rw-r----- 1 tomcat tomcat     0 Apr 23 09:07 host-manager.2022-04-23.log
-rw-r----- 1 tomcat tomcat   917 Apr 22 22:17 localhost.2022-04-22.log
-rw-r----- 1 tomcat tomcat   459 Apr 23 09:07 localhost.2022-04-23.log
-rw-r----- 1 tomcat tomcat  1422 Apr 22 20:22 localhost_access_log.2022-04-22.txt
-rw-r----- 1 tomcat tomcat     0 Apr 23 09:07 localhost_access_log.2022-04-23.txt
-rw-r----- 1 tomcat tomcat     0 Apr 22 20:16 manager.2022-04-22.log
-rw-r----- 1 tomcat tomcat     0 Apr 23 09:07 manager.2022-04-23.log

1.5 temp目录

存放tomcat在运行过程中产生的临时文件

[root@centos7 tomcat]#ll  temp/
total 0
-rw-r----- 1 tomcat tomcat 0 Apr  1 00:05 safeToDelete.tmp

1.6 webapps目录

Tomcat默认的Web应用部署目录

目录及文件说明
webapps/ROOT/网站默认根目录,类似于httpd的/var/www/html/

假设有一个testapp,/usr/local/tomcat/webapps/testapp就相当于/var/www/html/testapp

[root@centos7 tomcat]#ll  webapps/
total 20
drwxr-x--- 15 tomcat tomcat 4096 Apr 22 20:16 docs
drwxr-x---  7 tomcat tomcat 4096 Apr 22 20:16 examples
drwxr-x---  6 tomcat tomcat 4096 Apr 22 20:16 host-manager
drwxr-x---  6 tomcat tomcat 4096 Apr 22 20:16 manager
drwxr-x---  3 tomcat tomcat 4096 Apr 22 20:16 ROOT

1.7 work目录

存放Web应用 JSP 代码生成和编译后产生的 class 字节码文件。

JSP中的Java代码执行过程:

(1)先找到 jsp页面,然后Tomcat会生成一个jsp对应的java文件和一个编译生成的class字节码文件。
(2)然后加载class字节码文件
(3)调用jsp的 service方法
(4)然后产生结果,并把结果返回给client

[root@centos7 tomcat]#tree work/
work/
└── Catalina
    └── localhost
        ├── docs
        ├── examples
        ├── host-manager
        ├── manager
        └── ROOT
            └── org
                └── apache
                    └── jsp
                        ├── index_jsp.class  #字节码文件
                        └── index_jsp.java   #servlet文件

10 directories, 2 files

[root@centos7 tomcat]#pwd
/usr/local/tomcat
[root@centos7 tomcat]#mv test.jsp /usr/local/tomcat/webapps/ROOT/

#浏览器访问jsp文件:http://10.0.0.7:8080/test.jsp

#当访问test.jsp文件后,jsp目录中会生成对应的新的test_jsp.java文件和test_jsp.class字节码文件

Java程序上线前建议提前预热访问一下,所谓预热访问,就是生成应用程序对应的.java文件和.class文件,
等用户访问应用程序时,访问速度就会加快,这样用户访问就不慢了。

注意:jsp目录类似于缓存,在上线Java程序时,经常会有一些版本升级,升级新版本前,要将旧版本的jsp目录下的
内容删除,下次访问时,就会生成新版本的jsp文件。

[root@centos7 tomcat]#tree work/
work/
└── Catalina
    └── localhost
        ├── docs
        ├── examples
        ├── host-manager
        ├── manager
        └── ROOT
            └── org
                └── apache
                    └── jsp
                        ├── index_jsp.class
                        ├── index_jsp.java
                        ├── test_jsp.class
                        └── test_jsp.java

10 directories, 4 files


在这里插入图片描述

2 tomcat的组件分类

顶级组件
Server,代表整个Tomcat容器,一台主机可以启动多tomcat实例,需要确保端口不要产生冲突

服务类组件
Service,实现组织Engine和Connector,建立两者之间关联关系,service 里面只能包含一个Engine

连接器组件
Connector,有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议。

容器类
Engine、Host(虚拟主机)、Context(上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。

内嵌类
可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内分别定义。

集群类组件
listener、cluster

2.1 Tomcat 内部组成

在这里插入图片描述

名称说明
Server服务器,Tomcat 运行的进程实例,一个Server中可以有多个service,但通常就一个
Service服务,用来组织Engine和Connector的对应关系,一个service中只有一个Engine
Connector连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine
Engine即引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector
Host即虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分
Context应用的上下文,配置特定url路径映射和目录的映射关系:url => directory

每一个组件都由一个Java“类”实现,这些组件大体可分为以下几个类型:

顶级组件:Server
服务类组件:Service
连接器组件:http, https, ajp(apache jserv protocol)
容器类:Engine, Host, Context
被嵌套类:valve, logger, realm, loader, manager, ...
集群类组件:listener, cluster, ...

2.2 tomcat的核心组件

  • Tomcat启动一个Server进程。可以启动多个Server,即tomcat的多实例, 但一般只启动一个

  • 创建一个Service提供服务。可以创建多个Service,但一般也只创建一个

    • 每个Service中,是Engine和其连接器Connector的关联配置
  • 可以为这个Service提供多个连接器Connector,这些Connector使用了不同的协议,绑定了不同的端口。其作用就是处理来自客户端的不同的连接请求或响应

  • Service 内部还定义了Engine,引擎才是真正的处理请求的入口,其内部定义多个虚拟主机Host

    • Engine对请求头做了分析,将请求发送给相应的虚拟主机
    • 如果没有匹配,数据就发往Engine上的defaultHost缺省虚拟主机
    • Engine上的缺省虚拟主机可以修改
  • Host 定义虚拟主机,虚拟主机有name名称,通过名称匹配

  • Context 定义应用程序单独的路径映射和配置

#多个组件关系 conf/server.xml
<?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" />
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
          <Context >
		  <Context />          
      </Host>
    </Engine>
  </Service>
</Server>

3 tomcat的根目录结构

Tomcat中默认网站根目录是$CATALINA_BASE/webapps/
在Tomcat中部署主站应用程序和其他应用程序,和之前WEB服务程序不同。

#假设有个网站:www.linux2022.com
#网页对应关系
/var/www/html/index.html  =>  http://www.linux2022.com/index.html
/var/www/html/test/index.html  =>  http://www.linux2022.com/test/index.html

/usr/local/tomcat/webapps/ROOT/index.jsp  =>  http://www.linux2022.com/index.jsp
/usr/local/tomcat/webapps/test/index.jsp  =>  http://www.linux2022.com/test/index.jsp

www.linux2022.com/test.html  =>  /usr/local/tomcat/webapps/ROOT/test.html
www.linux2022.com/blog/  =>  /usr/local/tomcat/webapps/blog/index.html

#目录对应关系:
www.linux2022.com/blog/   =>   /usr/local/tomcat/webapps/blog/  
www.linux2022.com/forum/   =>   /usr/local/tomcat/webapps/forum/ 

nginx

假设在nginx中部署2个网站应用eshop、forum,假设网站根目录是/data/nginx/html,那么部署可以是这样的。
eshop解压缩所有文件放到 /data/nginx/html/ 目录下,forum 的文件放在 /data/nginx/html/forum/ 下。
最终网站链接有以下对应关系

http://localhost/ 对应于eshop的应用,即 /data/nginx/html/
http://localhost/forum/ 对应于forum的应用,即/data/nginx/html/forum/

Tomcat

Tomcat中默认网站根目录是$CATALINA_BASE/webapps/

在Tomcat的webapps目录中,有个非常特殊的目录ROOT,它就是网站默认根目录。

将eshop解压后的文件放到这个$CATALINA_BASE/webapps/ROOT中。

bbs解压后文件都放在$CATALINA_BASE/webapps/forum目录下。

$CATALINA_BASE/webapps下面的每个目录都对应一个Web应用,即WebApp

最终网站链接有以下对应关系

http://localhost/ 对应于eshop的应用WebApp,即$CATALINA_BASE/webapps/ROOT/目录,
http://localhost/forum/ 对应于forum的应用WebApp,即$CATALINA_BASE/webapps/forum/

如果同时存在$CATALINA_BASE /webapps/ROOT/forum ,仍以 $CATALINA_BASE/webapps/forum/ 优先生效
每一个虚拟主机都可以使用appBase指令配置自己的站点目录,使用appBase目录下的ROOT目录作为主站目录。
[root@centos7 webapps]#pwd
/usr/local/tomcat/webapps
[root@centos7 webapps]#mkdir blog
[root@centos7 webapps]#vim blog/index.html
/usr/local/tomcat/webapps/blog/index.html

#浏览器访问:http://10.0.0.7:8080/blog/

在这里插入图片描述

[root@centos7 webapps]#pwd
/usr/local/tomcat/webapps
[root@centos7 webapps]#ls
blog  docs  examples  host-manager  manager  ROOT
[root@centos7 webapps]#vim ROOT/test.html
/usr/local/tomcat/webapps/ROOT/test.html

#浏览器访问:http://10.0.0.7:8080/test.html

在这里插入图片描述

4 JSP WebApp目录结构

$CATALINA_BASE/webapps下面的每个目录对应的WebApp,可能有以下子目录,但下面子目录是非必须的

  • 主页配置:默认按以下顺序查找主页文件 index.html,index.htm、index.jsp
  • WEB-INF/:当前目录WebApp的私有资源路径,通常存储当前应用使用的web.xml和context.xml配置文件
  • META-INF/:类似于WEB-INF,也是私有资源的配置信息,和WEB-INF/目录一样浏览器无法访问
  • classes/:类文件,当前webapp需要的类
  • lib/:当前应用依赖的jar包
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直在努力学习的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值