热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

终于有人把Tomcat讲清楚了,通透!

在目前流行的互联网架构中,对一个应用来说,Tomcat是首,SSM是中,JVM是尾,我们通常对于SSM是比较了

在目前流行的互联网架构中,对一个应用来说,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配置和使用_动力节点_哔哩哔哩_bilibili​www.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.作用:子类只需要考虑相关方法重写实现,不需要考虑方法调用场景。子类方法调用规则由父类负责控制


推荐阅读
  • 如何正确配置与使用日志组件:Log4j、SLF4J及Logback的连接与整合方法
    在当前的软件开发实践中,无论是开源项目还是日常工作中,日志框架都是不可或缺的工具之一。本文详细探讨了如何正确配置与使用Log4j、SLF4J及Logback这三个流行的日志组件,并深入解析了它们之间的连接与整合方法,旨在帮助开发者高效地管理和优化日志记录流程。 ... [详细]
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
  • 在启用分层编译的情况下,即时编译器(JIT)的触发条件涉及多个因素,包括方法调用频率、代码复杂度和运行时性能数据。本文将详细解析这些条件,并探讨分层编译如何优化JVM的执行效率。 ... [详细]
  • 分布式开源任务调度框架 TBSchedule 深度解析与应用实践
    本文深入解析了分布式开源任务调度框架 TBSchedule 的核心原理与应用场景,并通过实际案例详细介绍了其部署与使用方法。首先,从源码下载开始,详细阐述了 TBSchedule 的安装步骤和配置要点。接着,探讨了该框架在大规模分布式环境中的性能优化策略,以及如何通过灵活的任务调度机制提升系统效率。最后,结合具体实例,展示了 TBSchedule 在实际项目中的应用效果,为开发者提供了宝贵的实践经验。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 在处理高并发场景时,确保业务逻辑的正确性是关键。本文深入探讨了Java原生锁机制的多种细粒度实现方法,旨在通过使用数据的时间戳、ID等关键字段进行锁定,以最小化对系统性能的影响。文章详细分析了不同锁策略的优缺点,并提供了实际应用中的最佳实践,帮助开发者在高并发环境下高效地实现锁机制。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 本文深入探讨了Java枚举类型的使用与实践,详细解析了枚举的基本用法及其在实际开发中的应用。首先介绍了枚举作为常量的替代方案,自JDK 1.5起,通过枚举可以更加简洁、安全地定义常量,避免了传统方式中可能出现的错误。此外,文章还探讨了枚举在实现单例模式、状态机等场景中的优势,并提供了多个实际案例,帮助开发者更好地理解和运用这一强大的语言特性。 ... [详细]
  • 深入解析Spring Boot源码的序章
    本系列文章旨在深入解析Spring Boot的源代码,分享笔者在学习过程中的心得与体会。内容涵盖核心源码分析,可能会对初学者造成一定理解难度,建议读者结合笔者提供的详细注释进行阅读,以获得更好的学习体验。 ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • 本章节深入探讨了 Webpack 命令的高级功能,涵盖了官方快速入门教程中未涉及的细节。通过实际操作和案例分析,对官方文档进行了详细解读与补充,帮助读者更好地理解和应用这些进阶技巧。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 深入解析:字符串与对象的对比及应用
    本文深入探讨了字符串与对象在编程中的对比及其应用场景。通过分析字符串作为不可变对象的特性,以及对象在内存中的存储方式,揭示了两者在性能和使用上的差异。文章还详细解析了Python中所有类均继承自`object`类的机制,并介绍了`getClass()`方法的底层实现,强调了`native`关键字的作用。此外,结合实际案例,讨论了在不同场景下选择字符串或对象的最佳实践。 ... [详细]
author-avatar
手机用户2502908547
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有