Toncat是全世界最著名的基于Java语言的轻量级应用服务器,是一款完 全开源免费的Servlet容器实现。同时,它支持HTML、JS等静态资源的处理,因此又可以作为轻量级Web服务器使用。作为本书的开篇,本章将简单介绍Tomcat的发展历程以及基本的安装使用,以便读者对Tomcat有个初步的印象。主要包括以下几个方面的内容。
作为一款知名的轻量级应用服务器,Tomcat的架 构设计(如生命周期管理、可扩展的容器组件设计、类加载方式)可以为我们的服务器中间件设计,甚至是应用系统组件设计提供非常好的借鉴意义。本章概要地介绍了Tomcat的总体架构,通过本章的学习,你可以了解Tomcat各组件的基本概念,并为进一-步 了解后续章节讲述的各组件打下良好的基础。
本章主要介绍Tomcat的Servlet容器实现一- Catalina。 对于Tomcat来说,Servlet容 器是其核心组件。所有基于JSP/Servlet的Java Web应用均需要依托Servlet容器运行并对外提供服务。通过Catalina,我们可以熟悉Tomcat的工作机制,包括它对各种应用形式.部署场景以及Servlet规范的综合考虑。
通过上一章的讲解我们知道, Catalina是Tomcat提供的Servlet容器实现,它负责处理来自客户端的请求并输出响应。但是仅有Servlet容器服务器是无法对外提供服务的,还需要由链接器接收来自客户端的请求,并按照既定协议(如HTTP)进行解析,然后交由Servlet容器处理。可以说,Servlet容器和链接器是Tomcat最核心的两个组件,它们是构成一-款Java应用服 务器的基础。
本章主要介绍了Tomcat提供的链接器实现,包括其支持的协议以及IO方式。
为了提升处理性能,应用服务器会对JSP类和实例进行缓存,并定时检测JSP页面的更新情况,如发生变更,将会重新编译。由于ISP页面采用单独的类加载器,因此重新编译不会导致整个应用重新加载,这也是我们可以在运行状态更新JSP页面的原因。
接下来我们就来了解- -下Tomcat的JSP引擎一Jasper。
在使用Tomcat的过程中,不可避免地要对它的配置进行定制,使其符合我们的要求。这些配置可能是JVM相关的,如内存、系统属性;也可能是服务器相关的,如端口、虚拟主机、IO、也可能是Web应用相关的,如URL映射、过滤器等。这些配置会涉及多个方面,如开发约束、部署架构、性能、安全、监控管理等。因此无论项目处于开发阶段还是已经运行于生产环境,无论是一名开发人员还是一名架构师,都有必要了解Toncat的各项配置,这可以使我们充分利用Tomcat的各种特性来完成相关工作。
尽管诸如Tomcat等应用服务器都支持HTML、JavaScript. 图片等静态资源的处理,可以用作Web服务器。但是随着系统并发量的上升以及应用部署复杂度的增加,传统的基于Java的应用服务器很难承担起Web服务器的作用。这主要是因为应用服务器对于静态资源的处理普遍性能相对较差,而Web服务器则可以充分利用操作系统本地IO的优势。同时,对于静态资源,Web服务器可以通过缓存等各种方式来提高其访问性能。除此之外,Web服 务器普遍支持作为前置的请求调度器以支持负载均衡。所有这些都是基于Java的应用服务器所欠缺的。
集群是应用服务器不可或缺的一项重要特性。无论是高并发的互联网应用,还是重业务的企业级应用系统,其部署架构均需要不同程度地考虑对集群的支持。集群不仅要求应用服务器提供相关的管理、同步等功能,还要求应用系统具备与之相应的可伸缩性,这就对应用系统架构提出了更高的要求。
安全是系统架构中最重要的关注点之一, 通常情况下,我们所说的安全涵盖网络安全、数据安全、操作系统安全、服务器安全以及应用系统安全等诸多方面。
感谢您的阅读,但是由于文案限制关于Tomcat架构解析以图片形式展现给大家,对这本Tomcat架构解析感兴趣的朋友们请帮忙转发此文私信回复”架构书籍“即可免费获取~
Tomea作为一款应用服务 器,尽管默认情况下可以满足多数场景的安全需求,但是在安全要求相对较高的环境下,我们仍需要从多个方面对其进行配置。本章主要从以下几个方面介绍Tomcat中安全相关的一.些配置及功能实现。
性能一直很重要,但是正如Donald Knuth所说:“过早的优化是- -切邪恶的根源”。我们可以在项目的关键节点(如上线前)安排相关的性能压力测试,可以在开发中避免常见的导致性能的问题(如N+1次查询等),但是对于如何优化系统、达到何种性能指标,我们要结合项目情况综合考虑(如项目对并发用户数和访问响应时间的要求以及未来业务发展的合理预估等),尽量避免过度优化。开发人员花费数个小时来调整一个不经常使用的小组件的性能,最后往往会发现真正的性能问题另有出处。
最后,我们将集中对Tomcat提供的几个功能进行简要介绍。这些功能并不复杂,但是它们却在一些应用场景中被广泛使用。