为什么要有 Servlet ,什么是 Servlet 容器,什么是 Web 容器?(上)

简介: 为什么要有 Servlet ,什么是 Servlet 容器,什么是 Web 容器?(上)

本文已收录至 github.com/yessimida/y… ,这里有我的所有文章分类汇总,欢迎 star!

以下代码相信大家都很熟悉,大学时学 Java Web 都写过这样的代码。

image.png

从第一次接触 Servlet 到之后的很长一段时间内,我都没理解 Servlet 是个什么玩意?

为什么要有 Servlet ?

为什么要有 Servlet 容器?

啥又是 Web 容器、HTTP 服务器?

今儿咱们就来盘盘,并且从中来看看架构和框架的设计套路。

看完之后可能对接口、抽象会有进一步的认识。

来,上车!


image.png


正文


首先浏览器发起 HTTP 请求,像早期的时候只会请求一些静态资源,这时候需要一个服务器来处理 HTTP 请求,并且将相应的静态资源返回。

这个服务器叫 HTTP 服务器。

简单点说就是解析请求,然后得知需要服务器上面哪个文件夹下哪个名字的静态文件,找到返回即可。


image.png

而随着互联网的发展,交互越发得重要,单纯的静态文件满足不了需求。

业务变得复杂,需要我们编写代码来处理诸多业务。

需要根据 HTTP 请求调用不同的业务逻辑来响应,但是我们的业务代码不能跟 HTTP 服务器耦合起来。

总不能在 HTTP 服务器的具体实现里面来做判断到底需要调用哪个业务类吧?

这就把非业务和业务强相关了。

所以需要做一层抽象,将 HTTP 的解析和具体的业务隔离。


image.png


本质上的需求就是根据 HTTP 请求找到对应的业务实现类然后执行逻辑再返回。

业务千千万,所以需要规定一个接口,所以业务类都实现这个接口这样才好对接。

这就是接口的含义,就像 USB。

这个接口就是 Servlet,当然这是最狭义的解释。

Servlet 其实是 Server Applet,全称 Java Servlet,指的是用Java 编写的服务端程序。

其实指代的是实现 Servlet 接口的那些业务类。

这就是 Servlet 的由来。

而 Servlet 容器其实就是管理和加载这些 Servlet 类的,拿到 HTTP 请求之后找到对应的 Servlet 类这就是 Servlet 容器要做的事情。

看到这是不是觉得还能再抽一层?因为这好像也和具体的业务实现没关系?

是的,还能抽一层。

没必要把 Servlet 容器做的事情和具体的业务耦合起来,业务反正照着 Servlet 接口实现就行,这样 Servlet 容器就可以加载它和管理它。


image.png

image.png


把请求和哪个 Servlet 对应关系也抽象出来,就是 web.xml 了,咱们在配置里面告诉 Servlet 容器对应关系即可。

我图中的业务实现其实对应的就是我们平常的 war 包,这就是业务和 Servlet 容器的解耦。

想必你也听过 Servlet 规范,其实 Servlet 接口和 Servlet 容器这一整套包括目录命名啊啥的合起来就叫 Servlet 规范。

所有相关的中间件按照 Servlet 规范实现,我们也按 Servlet 规范来实现业务代码,这样我们就能在不同场景选择不同的 Web 中间件。

反正规范的目的就是为了对接方便,减少对接成本。

至此 HTTP 服务器、Servlet 、Servlet 容器想必都清晰了。

而 Web 容器其实就是 HTTP 服务器 + Servlet 容器,因为单单 Servlet 容器没有解析 HTTP 请求、通信等相关功能。

所以把 Tomcat、Jetty 等实现包含了 HTTP 服务器和 Servlet 容器的功能,称之为 Web 容器。

从我们的分析一层一层的剥离,一层一层的抽象,相信你对 Web 有了更进一步的认识,我再画个 Tomcat 的分析图,应该就很清晰了。


image.png

相关文章
|
8月前
|
运维 数据可视化 C++
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
2025年热门Web化容器部署工具对比:Portainer与Websoft9。Portainer以轻量可视化管理见长,适合技术团队运维;Websoft9则提供一站式应用部署与容器管理,内置丰富开源模板,降低中小企业部署门槛。两者各有优势,助力企业提升容器化效率。
513 1
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
691 4
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
开发者 容器 Docker
JSF与Docker,引领容器化浪潮!让你的Web应用如虎添翼,轻松应对高并发!
【8月更文挑战第31天】在现代Web应用开发中,JSF框架因其实用性和灵活性被广泛应用。随着云计算及微服务架构的兴起,容器化技术变得日益重要,Docker作为该领域的佼佼者,为JSF应用提供了便捷的部署和管理方案。本文通过基础概念讲解及示例代码展示了如何利用Docker容器化JSF应用,帮助开发者实现高效、便携的应用部署。同时也提醒开发者注意JSF与Docker结合使用时可能遇到的限制,并根据实际情况做出合理选择。
254 0
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
561 1
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
256 1
|
Kubernetes 应用服务中间件 nginx
基于容器化的Web服务器管理
【8月更文第28天】随着云原生技术的发展,容器化已经成为部署和管理应用程序的标准方式之一。Docker 和 Kubernetes 等工具提供了强大的容器管理和编排能力,使得开发者能够轻松地部署、扩展和维护 Web 服务器。本文将详细介绍如何使用 Docker 和 Kubernetes 实现 Web 服务器的容器化部署,并提供详细的步骤和代码示例。
592 1
|
Kubernetes 安全 JavaScript
Docker 与 Podman:探索用于现代 Web 开发的容器技术
在软件开发中,Docker 和 Podman 作为主流容器化技术,各具特色。本文深入对比两者优缺点,探讨其实用场景与部署Web应用的最佳实践。Docker 凭借成熟生态和跨平台能力引领潮流;Podman 以无守护进程架构提升安全与效率。通过具体示例展示如何构建和运行Node.js与Angular应用,帮助读者理解核心命令与配置要点。无论是在开发环境还是生产部署,选择合适的工具能显著增强应用的安全性和稳定性。
911 1
|
Java 应用服务中间件 Apache
浅谈Tomcat和其他WEB容器的区别
Tomcat是一款轻量级的免费开源Web应用服务器,常用于中小型系统及并发访问量适中的场景,尤其适合开发和调试JSP程序。它不仅能处理HTML页面,还充当Servlet和JSP容器。相比之下,物理服务器是指具备处理器、硬盘等硬件设施的服务器,如云服务器,其设计目标是在处理能力、稳定性和安全性等方面提供高标准服务。简言之,Tomcat专注于运行Java应用,而物理服务器则提供基础计算资源。
|
Java 应用服务中间件 Spring
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
【终极解决方案】Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
385 0