随笔分类 -  Tomcat&Jetty

摘要:我们可以通过 Request 对象的 getSession 方法来获取 Session,并通过 Session 对象来读取和写入属性值。而 Session 的管理是由 Web 容器来完成的,主要是对 Session 的创建和销毁,除此之外 Web 容器还需要将 Session 状态的变化通知给监听者 阅读全文
posted @ 2021-07-30 16:11 hochan_100 阅读(379) 评论(0) 推荐(1)
摘要:每一个系统都有一些通用的模块,比如日志模块、异常处理模块、工具类等,对于 Tomcat 来说,比较重要的通用模块有日志、Session 管理和集群管理。 日志模块作为一个通用的功能,在系统里通常会使用第三方的日志框架。Java 的日志框架有很多,比如:JUL(Java Util Logging)、L 阅读全文
posted @ 2021-07-29 14:31 hochan_100 阅读(257) 评论(0) 推荐(0)
摘要:高性能程序就是高效的利用 CPU、内存、网络和磁盘等资源,在短时间内处理大量的请求。那如何衡量“短时间和大量”呢?其实就是两个关键指标:响应时间和每秒事务处理量(TPS)。 那什么是资源的高效利用呢? 我觉得有两个原则: 减少资源浪费。比如尽量避免线程阻塞,因为一阻塞就会发生线程上下文切换,就需要耗 阅读全文
posted @ 2021-07-29 11:00 hochan_100 阅读(262) 评论(0) 推荐(0)
摘要:Java 对象,特别是一个比较大、比较复杂的 Java 对象,它们的创建、初始化和 GC 都需要耗费 CPU 和内存资源,为了减少这些开销,Tomcat 和 Jetty 都使用了对象池技术。 所谓的对象池技术,就是说一个 Java 对象用完之后把它保存起来,之后再拿出来重复使用,省去了对象创建、初始 阅读全文
posted @ 2021-07-27 14:27 hochan_100 阅读(150) 评论(0) 推荐(0)
摘要:要在运行的过程中升级 Web 应用,如果你不想重启系统,实现的方式有两种:热加载和热部署。 那如何实现热部署和热加载呢?它们跟类加载机制有关,具体来说就是: 热加载的实现方式是 Web 容器启动一个后台线程,定期检测类文件的变化,如果有变化,就重新加载类,在这个过程中不会清空 Session ,一般 阅读全文
posted @ 2021-07-26 10:21 hochan_100 阅读(1642) 评论(0) 推荐(0)
摘要:相比较 Tomcat 的连接器,Jetty 的 Connector 在设计上有自己的特点。 Jetty 的 Connector 支持 NIO 通信模型,我们知道 NIO 模型中的主角就是 Selector,Jetty 在 Java 原生 Selector 的基础上封装了自己的 Selector,叫作 阅读全文
posted @ 2021-07-23 18:14 hochan_100 阅读(274) 评论(0) 推荐(0)
摘要:在开发中我们经常会碰到“池”的概念,比如数据库连接池、内存池、线程池、常量池等。为什么需要“池”呢?程序运行的本质,就是通过使用系统资源(CPU、内存、网络、磁盘等)来完成信息的处理,比如在 JVM 中创建一个对象实例需要消耗 CPU 和内存资源,如果你的程序需要频繁创建大量的对象,并且这些对象的存 阅读全文
posted @ 2021-07-23 17:52 hochan_100 阅读(59) 评论(0) 推荐(0)
摘要:我们在使用 Tomcat 时,会在启动日志里看到这样的提示信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found 阅读全文
posted @ 2021-07-22 18:21 hochan_100 阅读(199) 评论(0) 推荐(1)
摘要:UNIX 系统下的 I/O 模型有 5 种:同步阻塞 I/O、同步非阻塞 I/O、I/O 多路复用、信号驱动 I/O 和异步 I/O。这些名词我们好像都似曾相识,但这些 I/O 通信模型有什么区别?同步和阻塞似乎是一回事,到底有什么不同?等一下,在这之前你是不是应该问自己一个终极问题:什么是 I/O 阅读全文
posted @ 2021-07-22 16:05 hochan_100 阅读(148) 评论(0) 推荐(0)
摘要:经过前面几期的学习,相信你对 Tomcat 的整体架构和工作原理有了基本了解。但是 Servlet 容器并非只有 Tomcat 一家,还有别的架构设计思路吗?今天我们就来看看 Jetty 的设计特点。 Jetty 是 Eclipse 基金会的一个开源项目,和 Tomcat 一样,Jetty 也是一个 阅读全文
posted @ 2021-07-20 15:21 hochan_100 阅读(376) 评论(0) 推荐(0)
摘要:上面这张图描述了组件之间的静态关系,如果想让一个系统能够对外提供服务,我们需要创建、组装并启动这些组件;在服务停止的时候,我们还需要释放资源,销毁这些组件,因此这是一个动态的过程。也就是说,Tomcat 需要动态地管理这些组件的生命周期。 在我们实际的工作中,如果你需要设计一个比较大的系统或者框架时 阅读全文
posted @ 2021-07-20 10:14 hochan_100 阅读(53) 评论(0) 推荐(0)
摘要:今天我们一起来看一下 Tomcat 的容器设计。先复习一下,上期我讲到了 Tomcat 有两个核心组件:连接器和容器,其中连接器负责外部交流,容器负责内部处理。具体来说就是,连接器处理 Socket 通信和应用层协议的解析,得到 Servlet 请求;而容器则负责处理 Servlet 请求。我们通过 阅读全文
posted @ 2021-07-19 16:20 hochan_100 阅读(49) 评论(0) 推荐(0)
摘要:Tomcat 总体架构 我们知道如果要设计一个系统,首先是要了解需求。通过专栏前面的文章,我们已经了解了 Tomcat 要实现 2 个核心功能: 处理 Socket 连接,负责网络字节流与 Request 和 Response 对象的转化。 加载和管理 Servlet,以及具体处理 Request 阅读全文
posted @ 2021-07-19 15:29 hochan_100 阅读(68) 评论(0) 推荐(0)
摘要:为了方便开发和部署,Spring Boot 在内部启动了一个嵌入式的 Web 容器。我们知道 Tomcat 和 Jetty 是组件化的设计,要启动 Tomcat 或者 Jetty 其实就是启动这些组件。在 Tomcat 独立部署的模式下,我们通过 startup 脚本来启动 Tomcat,Tomca 阅读全文
posted @ 2021-06-23 18:53 hochan_100 阅读(308) 评论(0) 推荐(0)