Tomcat学习笔记一

什么是Tomcat?

Tomcat是属于Apache基金会,它是一个开源软件,它实现了Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication 规范。即Tomcat就是一个实现部分J2EE规范的服务器

什么又是规范?

Java是一门语言,那么语言是不是需要依赖第三方对于他们自己产品的实现,已一种jar包的方式提供给我们来调用,那么这个jar包称之为SDK。那问题来了,若以数据库作举例,现在的数据库有:MySql、Oracle、SQL Server等数据库,如果没有一个规范,那么每个开发商自己定义一些自己的写法,就代表了你每换一个数据库,你就要重新编写代码。若以服务器为例:Tomcat、WebLogic、Jetty等服务器,若没有一个规范,每更换一个服务器我们就重新写一遍代码,这种是不能忍受的,所以要定义出规范,用于约束第三方如何实现,来提供一个统一的上层接口,所以:规范在Java层面就是面向接口编程

如何获取源码

参考:Tomcat源码导入Idea

如何阅读源码

  1. 看项目结构
  2. readme
  3. 找到官方文档所在地
  4. 查找配置文件
  5. 注意:不要直接调试,一定要:利用自己的语言知识,来进行推理和阅读
  6. 看接口定模块(微服务解耦:接口规范,模块呢?Java语音用 接口,C类语言用 指针)
  7. 模块划分好后,逐个击破,切记广度优先,而非深度优先(模块之间是不是必定存在联系,不要深究,一定要先掌握脉络,然后再细节)
  8. 融合贯通(根据掌握的整体脉络,研究细节即可)
  9. 剩下的交给 时间+努力+坚持 了

Tomcat源码初览

Tomcat官方文档

  • Context - 一个web应用就是一个Context
  • /bin - binary二进制,执行文档,大部分都是脚本,脚本分为:Windows(bat)、linux(sh)
  • /conf - configuration配置文件
  • /log - 日志
  • /webapps - 这里放你的web应用
  • CATALINA_HOME - Tomcat它家(安装根目录),CATALINA就是Tomcat的核心
  • CATALINE_BASE - 配置文件的目录
    根据以上信息推理得出:如果我们解压了Tomcat,没有改变配置的目录,那么可以得出:CATALINA_HOME == CATALINE_BASE,因为Tomcat的配置文件我们没有改动,那就是在Tomcat的安装目录下
    为什么要拆分CATALINA_HOME和CATALINE_BASE目录?只读:jar包,bin目录二进制文件,可变:配置。若我们想再单机上启动多个Tomcat,愚蠢的做法:解压多个Tomcat,放到不同目录,单独管理。把只读和配置拆分,允许共用基础资源,同时改变配置来在单机上允许多个Tomcat不需要解压多个Tomcat目录

我们先到执行文件/bin目录下找到startup.sh启动脚本

发现执行了catalina.sh脚本,然后到脚本文件查找start关键字,最终会执行org.apache.catalina.startup.Bootstrap启动类的main方法

然后到/conf目录下分析server.xml配置内容,可以推理出Tomcat的架构图
Tomcat学习笔记一_第1张图片
/conf/web.xml:所有的web应用,它们的默认值都取决于web.xml文件的配置值,我们项目下/WEB-INF/web.xml配置文件的值,是可以覆盖的/conf/web.xml的,可以类比于类的继承和方法的复写

/conf/context.xml 每个web应用都加载conf/context.xml,我们所Context代表了一个web应用,那么web应用的目录:WEB-INF(web的元数据目录),META-INF(元数据目录),这里的WatchedResource标签,监听资源,即监听了WEB-INF/web.xml和${catalina.base}/conf/web.xml,改动后里面重新加载应用
Tomcat学习笔记一_第2张图片
/work目录
jsp最终要转换为Servlet,而Servlet是一个Java类,类是需要编译处理的,这时需要一个目录,来保存jsp生成的servlet文件,而这个目录就称之为工作目录

待续~

你可能感兴趣的:(Tomcat,tomcat,学习,java)