在目前流行的互联网架构中,对一个应用来说,Tomcat是首,SSM是中,JVM是尾,我们通常对于SSM是比较了解的,而忽略了首尾,而Tomcat在目前的网络编程中是举足轻重的,但是我们其实对Tomcat中很多原理性的东西不太了解,如果能够掌握Tomcat的原理,那么是非常有用的,比如:
- 如果我们能弄清楚Tomcat和Socket、Tcp之间的关系,我们就能明白Tomcat为什么会出现端口冲突。
- 如果我们能准确的知道Tomcat中部署一个项目的N种方式,那么就能在工作中更加得心应手。
- Tomcat中热部署和热加载的区别是什么,到底是如何实现的,弄明白实现原理,能很大程度上提高Tomcat的运行效率。
- Tomcat到底是如何处理一个请求的?这对于针对Tomcat的性能调优是必备的。
- 目前Spring Boot和Dubbo等框架中都是使用的内嵌Tomcat,那么一个内嵌的Tomcat到底是如何运行的?
- Tomcat的架构设计其实非常优秀的,如果能明白Tomcat为什么要那么设计,那么对于Tomcat的原理和自己的架构设计思维都能有很大提升。
- JSP虽然过时,但是它的底层实现原理和思路依然保存着,那么Tomcat中到底是如何实现JSP功能的?
分享给大家这套tomcat视频讲解教程,新手可以看看,讲解很详细。
在线观看:
Javaweb开发视频教程之Tomcat9配置和使用_动力节点_哔哩哔哩_bilibiliwww.bilibili.com
资料下载:
Tomcat服务器视频教程全套免费下载【适合零基础入门】 - 动力节点www.bjpowernode.com
Tomcat是什么?
Tomcat是web容器。你在做web项目时,多数需要http协议,也就是基于请求和响应,比如你在百度输入一行内容搜索,那么百度服务器如何处理这个请求呢,他需要创建servlet来处理,servlet其实就是java程序,只是在服务器端的java程序servlet通过配置文件拦截你的请求,并进行相应处理,然后展示给你相应界面,那么servlet如何创建?
这时候tomcat用到了,它就是帮助你创建servlet的东西,所以也称web容器,没有它,没法运行web项目。相对应的web容器有很多,比如JBOSS,WEBLOGIC等。
Tomcat是一个应用服务器。他可以运行你按照J2EE中的Servlet规范编写好的Java程序。
简单的说它是一个Web网站的运行容器,把你写好的网站放进去就可以运行。
一、网络协议/网络协议包
在互联网通信过程中,在网络传递信息都是二进制形式。
此时接收方接收到信息之后必须进行一次解析。
但是由于传递信息量相对较大,增加接收方解析难度
浏览器: http://localhost:8080/myWeb/index.html
1010101010101010101011111000110101010
网络协议包:
一组有规律二进制数据,存在固定空间。在指定空间下专门存放指定数据,降低接收方解析难度
0000 服务端计算机ip地址 0000 Http服务器端口号 0000 资源文件 0000
二、Http网络协议包:
在B/S通信结构下,浏览器发送请求信息以及服务端返回资源文件内容都是通过Http网络协议包进行传递
三、Http网络协议包分类:
1.Http请求协议包:
1)在浏览器准备发送请求时,负责生成一个Http请求协议包
2)在浏览器准备发送请求时,负责将请求信息写入Http请求协议包
3)由浏览器负责推送Http请求协议包
2.Http响应协议包:
1)在Http服务器准备返回结果时,负责生成一个Http响应协议包
2)由Http服务器调用输出流将文件内容(文字,数字,像素,帧,命令)以二进制形式写入到Http响应协议包
3)由Http服务器负责将Http响应协议包推送回发起请求的浏览器
四、Http请求协议包内部结构:自上而下分为4层结构 【背】
1.请求行:
【url:请求地址method:请求方式】
2.请求头:
【如果浏览器以GET方式发送请求请求参数存放在请求头】
3.空白行:
【】
4.请求体:
【如果浏览器以POST方式发送请求请求参数存放在请求体】
五、Http响应协议包内部结构 自上而下分为4层结构 【背】
1.状态行:
【Http状态码】
2.响应头:
【content-type:指定浏览器使用对应解析器或则编译器对返回二进制数据进行解析或则编译】
3.空白行:
【】
4.响应体:
【本次索要文件内容(二进制形式存放)】
六、Http服务器介绍
1.所有的Http服务器都是由java编程语言开发应用程序
2.Http服务器可以接收由浏览器发动的Http请求协议包
3.Http服务器可以解析Http请求协议包二进制数据了解用户请求
4.Http服务器可以自动定位被访问的资源文件
5.Http服务器可以自动将被访问文件内容或则文件运行结果通过输出流以二进制形式写入到Http响应协议包中响应体
6.Http服务器可以自动将Http响应协议包推送回发起请求的浏览器
七、Http服务器分类:
1.功能最强---Websphere
2.功能最新---GlassFish
3.最轻量级---tomcat
八、tomcat服务器安装与配置
1.tomcat服务器下载: tomcat.apache.org/
2.tomcat安装:tomcat9.0版本是绿色免安装版
3.tomcat配置:
1)JAVA_HOME环境变量: 用于向tomcat服务器提供当前计算机中JDK位置
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_101
2)CATALINA_HOME环境变量:通知本次启动的tomcat服务器存放位置
CATALINA_HOME=C:\tomcat9
九、tomcat服务器启动与关闭
1.tomcat服务器启动时生成一个管理对象。如果手动关闭,时间一长。
这个管理对象将脱离管理,导致无法再次启动tomcat
2.管理命令位置: tomcat安装地址/bin文件夹
3.启动tomcat命令: startup
4.关闭tomcat命令: shutdown
十、tomcat服务器启动失败原因
1.忘记配置JAVA_HOME
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
2.JAVA_HOME地址写错了
The JRE_HOME environment variable is not defined correctly
This environment variable is needed to run this program
3.CATALINA_HOME地址写错了
The CATALINA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
4.tomcat服务器默认端口号8080.一个计算机只能启动一个tomcat
java.net.BindException: Address already in use: JVM_Bind
十一、tomcat服务器工作文件
1.bin : tomcat管理命令
2.conf:tomcat配置文件。server.xml是tomcat核心配置文件
3.lib: tomcat应用程序在运行时依赖的第三方jar
4.logs:存放tomcat运行日志
5.temp:存放tomcat运行时生成临时文件
6.webapps:tomcat在默认情况下,接收到请求之后到webapps下定位资源文件
7.work: tomcat在默认情况下,在work文件下将jsp文件编辑为java文件并编译为class文件
十二、第一次BS通信模拟
1.在webapps下创建一个网站
网站:网络资源站点,存放可以被浏览器访问的资源文件
2.启动tomcat
3.启动浏览器,向tomcat发起请求
在地址栏输入资源文件定位命令(url):
http://服务端计算机IP地址:http服务器端口号/网站名/资源文件名.后缀名
http://localhost:8080/myWeb/one.html
十三、标准网站内部结构
|
|_________src文件夹:java文件和动态资源文件
|
|_________web文件夹 :静态资源文件/第三jar/网站核心配置文件
|
|________WEB-INF: 第三jar/网站核心配置文件
|
|______lib文件夹(手动) 第三jar
|
|______web.xml 网站核心配置文件
|
|______________静态资源文件
十四、模拟tomcat调用动态资源文件
1.对于一个网站来说,tomcat只能调用网站中Servlet接口实现类
2.Tomcat接收到请求之后,根据url中文件名称定位被访问Servlet接口实现类。
1)Tomcat通过Class.forName方法将硬盘类文件加载到内存
2)Tomcat通过反色机制通知JVM创建当前类的实例对象
3)Tomcat通过实例对象调用init方法来实现对实例对象初始化操作
4)Tomcat通过实例对象调用service方法处理当前用户请求
5)Tomcat通过输出流将service方法处理结果写入到响应体交还给发起请求浏览器
十五、适配器设计模式
1.作用: 降低接口实现类开发难度的。可以让接口实现类自由选择接口中方法重写
2.解决方案:
1)使用抽象类实现接口,对接口中不受欢迎抽象方法进行空实现
2)创建接口实现类 继承与抽象类,此时接口实现类开发时只要重写感兴趣方法
十六、模板设计模式:
1.作用:子类只需要考虑相关方法重写实现,不需要考虑方法调用场景。子类方法调用规则由父类负责控制