Tomcat目录结构学习
Tomcat
基本信息暂时不作过多介绍了,本文聚焦于Tomcat的目录结构理解
目录结构一览
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Tomcat
├── bin
│ ├── bootstrap.jar
│ ├── catalina-tasks.xml
│ ├── catalina.bat
│ ├── service.bat
│ ├── shutdown.bat
│ ├── startup.bat
│ ├── tomcat11.exe
│ ├── tomcat11w.exe
│ ├── version.sh
| ├── .........
|
├── conf # 用来存放tomcat的一些配置文件
| ├── Catalina # Catalina 为一个目录,可以设置默认加载的项目,初始状态下可能不存在
│ ├── catalina.properties
│ ├── context.xml # context.xml 可以用来配置数据源之类的
│ ├── logging.properties
│ ├── server.xml # server.xml 可以设置端口号、设置域名或IP、默认加载的项目、请求编码
│ ├── tomcat-users.xml # tomcat-users.xml 用来配置管理tomcat的用户与权限
│ ├── tomcat-users.xsd
│ └── web.xml # web.xml 可以设置tomcat支持的文件类型
│
├── lib # lib目录主要用来存放tomcat运行需要加载的jar包,建议只把Tomcat需要的jar包放到这个目录下
│ # 例如,像连接数据库的jdbc的包(mysql-connector-java-8.0.16.jar)我们可以加入到lib目录中来
│ ├── annotations-api.jar
│ ├── catalina-storeconfig.jar
│ ├── tomcat-i18n-es.jar
│ ├── .......
|
├── logs # 顾名思义,一些日志的保存点
|
├── src # 并非自带,笔者同时下载了源码zip包,自行创建的目录,放入了源码
│ └── apache-tomcat-11.0.0-src.zip
|
├── temp # temp目录用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响)
│ └── safeToDelete.tmp
|
├── webapps
│ ├── ROOT
│ ├── ........ # 稍后重点介绍
│
├── work # work 目录用来存放tomcat在运行时的编译后文件,例如运行时生成的文件,最终运行的文件都在这里。通过webapps中的项目生成的!
| # 可以把这个目录下的内容删除,再次运行时会生再次生成work目录。
| # 当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后再编译Java文件生成class文件
| # 生成的java和class文件都会存放到这个目录下。
| # 清空work目录,然后重启tomcat,可以达到清除缓存的作用。
| # 可以把这个目录下的内容删除,再次运行时会生再次生成work目录
|
├── LICENSE # 许可证
└── NOTICE # 说明文件
其他没有列出的根目录下的普通文件不重要
Webapps
Tomcat的目录结构中,最值得关注的目录这个是发布和访问目录
webapps目录用来存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序。
可以以文件夹、war包、jar包的形式发布应用。
也可以把应用程序放置在磁盘的任意位置,在配置文件中映射好就行,如下
其中又分为ROOT目录和其他目录
ROOT
默认情况下,没有访问路径的请求,会被映射到ROOT目录中
举例:如果访问http://localhost:8080/的话,就回去查找ROOT目录
证明:
12133.txt内容如下
这时候,如果访问http://127.0.0.1:8080/12133.txt,结果如下
App目录
其他目录一般遵循一个标准结构,我们统称这种目录为App目录
下图中的前4个目录都可以称为App目录
例如:访问http://127.0.0.1:8080/examples/,那么默认访问的是http://127.0.0.1:8080/examples/index.html
效果如下
index.html内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Apache Tomcat Examples
完全对应了
App目录标准结构
Tomcat 自带的 App目录的目录内容如下
1
2
3
4
5
6
7
examples/
├── META-INF
├── WEB-INF
├── index.html
├── jsp
├── servlets
└── websocket
其中,WEB-INF是必要的重要目录,且必须是这个名字!
WEB-INF
WEB-INF 一般是受保护的资源目录,浏览器通过url不可以直接访问的目录
/WEB-INF/web.xml
Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
必要文件,web项目的基本配置文件。(较新的版本中可以没有该文件,但是学习过程中还是需要该文件)
/WEB-INF/classes/
包含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中。
web项目中如果没有源码,则该目录不会出现
/WEB-INF/lib/
存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件。
web项目要是没有依赖任何jar,则该目录不会出现
/WEB-INF/src/
源码目录,按照包名结构放置各个 Java 文件。
/WEB-INF/database.properties
数据库配置文件
/WEB-INF/tags/
存放了自定义标签文件
该目录并不一定为 tags,可以根据自己的喜好和习惯为自己的标签文件库命名,当使用自定义的标签文件库名称时,在使用标签文件时就必须声明正确的标签文件库路径。例如:当自定义标签文件库名称为 simpleTags 时,在使用 simpleTags 目录下的标签文件时,就必须在 jsp 文件头声明为:<%@ taglibprefix="tags" tagdir="/WEB-INF/simpleTags" % >
/WEB-INF/jsp/
jsp 文件的存放位置。改目录没有特定的声明,同样,可以根据自己的喜好与习惯来命名。此目录主要存放的是 jsp 1.2 以下版本的文件,为区分 jsp 2.0 文件,通常使用 jsp 命名,当然你也可以命名为 jspOldEdition 。
META-INF
jar文件
开发中可以直接使用java class文件来运行程序,不过这样不太方便,所以出现了jar文件来提供发布和运行,jar文件实际上是class文件的zip压缩存档,有很多工具都可以操纵这种格式的文件,
但是jar文件本身并不能表达应用程序的便签信息,于是出现了META-INF目录
jar文件中有一个特定的目录来存放标签信息:META-INF目录
为了提供存档的便签信息,出现了META-INF/Manifest.mf文件,它包含了jar文件的内容描述,在应用程序运行时向JVM提供应用程序的信息。
jar文件都有一个默认产生的META-INF目录和其中的manifest.mf文件
使用jar命令可以直接产生META-INF目录和manifest.mf文件
Manifest.mf文件示例:
1
2
3
4
Manifest-Version: 1.0
Created-By: IntelliJ IDEA
Built-By: Dan
Build-Jdk: Oracle OpenJDK 17.0.11
解析
1
2
3
4
5
6
7
Manifest-Version:生成的manifest.mf文件的版本
Created-By:文件的生成者,一般由jar命令行工具生成,这里显示的是:IDEA
Built-By:文件的创建用户命名,在IDEA的配置文件中可以设置
Bulid-Jdk:所使用的JDK环境
其实manifest.mf文件中的配置信息除了上面的四个之外,还是有很多的,以下是几个常见的属性:
一般属性
Signature-Vresion:定义jar文件的签名版本
Class-Path:内部的类搜索路径,提供给应用程序或者类装载器
应用程序的相关属性
Main-Class:定义jar文件的入口类,该类必须可执行!一旦定义了该属性就可以使用java -jar 程序名.jar来运行该jar文件
Manifest.mf文件格式要求
manifest文件中的每一行都是 key-value 对应的;
属性名开头,接着是 “:” ,然后是属性值;
每行最多72个字符,如果需要增加,可以在下一行续行,续行以空格开头,以空格开头的行都会被视为前一行的续行。
其他位置文件映射
找到conf/server.xml文件中的 host 标签,在 host 标签内定义子标签Context
Context标签必须定义 docBase(实际文件所在文件夹路径:例F:\test)属性,path(访问虚拟路径:例/files)属性
举例
1
2
3
4
5
6
unpackWARs="true" autoDeploy="true"> # 下列是重点 .....
配置好后,访问路径 localhost:8080/files/css.txt 即可访问到实际路径 F:\test\css.txt 文件
conf\Catalina
这个目录由上可知,这个目录的配置有关于默认加载的项目
而大名鼎鼎的IDEA,即是通过控制conf\Catalina\localhost下的*.xml文件,来映射设置Tomcat与项目output目录之间的关系
上图可以看到,内容其实与conf/server.xml中的配置内容无二,只是这个无需考虑放入到指定位置
补充:
xml 文件内容含义如下:
path 表示工程的访问路径:/jndidemo_war_exploded
docBase 表示实际的工程目录在哪里,也就是我们需要访问jndidemo_war_exploded文件夹在我们主机上的全路径
注意:这个地方path的参数即/jndidemo_war_exploded要与配置文件名称相一致,可以看到配置文件为jndidemo_war_exploded.xml,其文件名称与path的参数即/jndidemo_war_exploded相一致
Ref
https://blog.csdn.net/m0_68988603/article/details/124285667
https://blog.csdn.net/Helen_1997_1997/article/details/131935349
https://blog.csdn.net/u011479200/article/details/108244382
https://blog.csdn.net/qq_38449518/article/details/82414069
https://blog.csdn.net/MrYushiwen/article/details/113383917