什么是Tomcat
The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These specifications are part of the Jakarta EE platform.
Tomcat是属于Apache基金会,它是一个开源软件,实现了Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and [Jakarta Authentication]等规范。
什么是规范
Java是一门语言,语言是需要依赖第三方对于他们自己的产品实现,以一种jar包的方式提供给我们直接调用 这个jar包称之为:SDK (Software Development Kit)。那么问题来了?若以数据库操作举例,现在的数据库有:DB2、ORACLE、MYSQL…诸多数据库,如果没有一个规范,那么每个开发商自己定义一些自己的写法,就就代表你每换一个数据库,就要重新编写代码。那么以动态服务器为例:JBOSS、Tomcat Weblogic...假如没有一个规范,那么还是那句话,更换一个服务器你就重新写一遍代码。这种是不能够忍受的。这时候就需要有人出来搞规范。用于约束第三方如何实现,来提供一个统一的上层接口即可。所以,总结一下:规范在java层面就是面向接口编程。
怎么阅读源码
- 看项目结构
- readme
- 找到官方文档分名1路?15608348982正在观看视频
- 查看配置文件
- 注意:不要使用调试递进的方式进行源码研究,不利于整合思维+深入记忆 一定要利用自己的语言知识,来进行推理和阅读
- 看接口定模块(微服务解耦:接口规范,模块。Java语言用接口,C类语言用指针)
- 模块划分好后,逐个击破,切记广度优先,而非深度优先(模块之间是不是必定存在联系,不要深究,一定要先掌握脉络,然后再细节)
- 融会贯通(根据掌握的整体脉络,研究细节即可)
Tomcat源码初览
- Context - In a nutshell, a Context is a web application. 一个web应用就是一个Context
- /bin - Startup, shutdown, and other scripts. The
*.shfiles (for Unix systems) are functional duplicates of the*.batfiles (for Windows systems). Since the Win32 command-line lacks certain functionality, there are some additional files in here. binary 二进制执行文件,大部分都是脚本,脚本分为:window(bat)、linux(sh) - /conf - Configuration files and related DTDs. The most important file in here is server.xml. It is the main configuration file for the container. 配置文件
- /logs - Log files are here by default. 日志目录
- /webapps - This is where your webapps go. 这里放你的web应用
Throughout the documentation, there are references to the two following properties:
- CATALINA_HOME: Represents the root of your Tomcat installation, for example
/home/tomcat/apache-tomcat-9.0.10orC:\Program Files\apache-tomcat-9.0.10. Tomcat家目录(安装根目录)CATALINA就是Tomcat的核心 - CATALINA_BASE: Represents the root of a runtime configuration of a specific Tomcat instance. If you want to have multiple Tomcat instances on one machine, use the
CATALINA_BASEproperty. 配置文件目录 根据以上信息推理得出:如果我们解压了Tomcat,没有改变配置的目录,那么是不是可以得出:CATALINA_ HOME == CATALINA_ BASE,因为Tomcat的配置文件没有改动,那就是在Tomcat的安装目录下。
为什么要拆分CATALINA HOME和CATALINA BASE目录?因为在项目中有只读的文件:jar包、bin目录二进制文件,可变的文件:项目相关的配置。若我们想在单机上启动多个Tomcat,愚蠢的做法:解压多个Tomcat,放到不同目录,单独管理。正确的做法:把只读和配置拆分,允许共用基础资源,同时改变配置来在单机上运行多个Tomcat不需要解压多个Tomcat目录。
Tomcat的web.xml
This document defines default values for all web applications loaded into this instance of Tomcat. As each application is deployed, this file is processed, followed by the "/WEB-INF/web.xml" deployment descriptor from your own applications. 所有的web应用,它们的默认值都取决于conf/web.xml,你配置的web.xml的信息,是可以覆盖的。
Tocmat的context.xml
The contents of this file will be loaded for each web application 每个web应用都加载conf/context.xml。我们说Context代表了一个应用,那么web应用的目录:WEB-INF(web的元数据目录)、META-INF(元数据目录)。这里的WatchedResource监听了WEB-INF/web.xml和${catalina.base}/conf/web.xml,改动后立马重新加载应用。
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
</Context>
Tocmat的server.xml
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">