Servlet容器(Web容器)简介
参考笔记:Servlet容器(Web容器)简介-笔记-CSDN博客(本文的内容基本转载自该文章,写的很好,非常推荐大家看一下)
JavaWeb 项目中,我们编写的 Servlet 类没有 main() 函数,不能独立运行,那我们如何启动一个 Servlet ? 如何结束一个 Servlet ? 如何寻找一个 Servlet ? 这一切都受控于另一个 Java 应用,这个应用我们就称之为 Servlet 容器,也称为 Web 容器。Servlet 容器帮助我们管理着 Servlet ,使我们只需要将重心专注于业务逻辑
在介绍 Servlet 容器之前,我们需要介绍一下相关历史
文章目录
1. 传统的Web服务器只能支持静态资源的访问
2. 动态部署网站的需求来了
3. Servlet容器是什么?
4. Servlet容器(Web容器)有哪些?
5. 待更新😈...
1. 传统的Web服务器只能支持静态资源的访问
Web 服务器是一种对外提供 Web 服务的软件,它可以接收浏览器的 HTTP 请求,并将处理结果返回给浏览器。部署网站一般需要 Web 服务器的支持,例如:
① 运行 PHP 网站一般选择 Apache 或者 Nginx
② 运行 ASP/ASP.NET 网站一般选择 IIS
③ 运行 Python 网站一般选择内置的 WSGI 服务器模块——wsgiref
我们平时所说的 Web 服务器,比如 Apache、Nginx、IIS 等,它们的功能往往都比较单一,只能提供 http/https 服务,让用户访问静态资源(HTML 文档、图片、CSS 文件、JavaScript 文件等),它们不能执行任何编程语言,也不能访问数据库,更不能让用户注册和登录。也就是说,如果只有 Web 服务器,那您只能部署静态网站,不能部署动态网站
2. 动态部署网站的需求来了
而随着互联网的发展,交互越发得重要,单纯的静态资源满足不了需求,业务变得越来越复杂,需要我们编写代码来处理诸多业务,需要根据 HTTP 请求调用不同的业务逻辑来响应,那就需要部署动态网站
要想部署动态网站,必须要有编程语言运行环境(或称为运行时)和数据库管理系统的支持。即部署动态网站至少需要 3 个组件,分别是 Web 服务器、编程语言运行环境、数据库。例如,部署 PHP 网站一般选择 Apache + PHP 运行时 + MySQL 的组合
3. Servlet容器是什么?
Servlet 是基于 Java 语言的,因此运行 Servlet 必然少不了 JRE (即 Java Runtime Environment) 的支持,它负责解析和执行字节码文件(.class文件)。然而 JRE 只包含了 Java 虚拟机(JVM)、Java 核心类库和一些辅助性性文件,它并不支持 Servlet 规范。要想运行 Servlet 代码,还需要一种额外的部件,该部件必须支持 Servlet 规范,实现了 Servlet 接口和一些基础类,这种部件就是 Servlet 容器
Servlet 容器就是 Servlet 代码的运行环境(运行时),它除了实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持,还需要管理由用户编写的 Servlet 类,比如实例化类(创建对象)、调用方法、销毁类等
如上图所示,Web 服务器是整个动态网站的 "大门",用户的 HTTP 请求首先到达 Web 服务器,Web 服务器判断该请求是静态资源还是动态资源:如果是静态资源就直接返回,此时相当于用户下载了一个服务器上的文件;如果是动态资源将无法处理,必须将该请求转发给 Servlet 容器
Servlet 容器接收到请求以后,会根据配置文件(web.xml)找到对应的 Servlet 类,将它加载并实例化,然后调用其中的方法来处理用户请求;处理结束后,Servlet 容器将处理结果再转交给 Web 服务器,由 Web 服务器将处理结果进行封装,以 HTTP 响应的形式发送给最终的用户
4. Servlet容器(Web容器)有哪些?
常用的 Servlet 容器 (Web 容器)有 Tomcat、Jetty、JBoss、WebLogic、Websphere 等,这些容器都是 Servlet 代码的运行环境(运行时),实现了 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持,管理由用户编写的 Servlet 类。其中 Tomcat 由 Java 官方提供,是初学者最常使用的
为了简化网站的部署流程,Servlet 容器往往也会自带 Web 服务器模块,提供基本的 HTTP 服务,所以这里的 Servlet 容器 = Web服务器 + Servlet 容器,所以可以不用再安装 Apache、IIS、Nginx 等传统意义上的服务器,只需要安装一款 Servlet 容器,就能部署动态网站了
注:正因为 Web 容器自带 Web 服务器模块的原因,有的教材将 Tomcat 称为 Web 容器,有的教材又将 Tomcat 称为 Web 服务器 / Tomcat 服务器,导致很多人把 Web 服务器和 Web 容器两者的概念搞混了
使用 Servlet 容器中自带的 Web 服务器模块后,上面的流程图就变成了这样:
需要说明的是,Servlet 容器自带的 Web 服务器模块虽然没有传统的 Web 服务器强大,但是也足以应付大部分开发场景