9.13JavaWeb之Servlet容器
其他语言部署动态网站的前提条件
需要部署web服务器:
-
运行 PHP 网站一般选择 Apache 或者 Nginx;
-
运行 ASP/ASP.NET 网站一般选择 IIS;
-
运行 Python 网站一般选择内置的 WSGI 服务器模块——wsgiref。
什么是web服务器?
一种对外提供 Web 服务的软件,它可以接收浏览器的 HTTP 请求,并将处理结果返回给浏览器
部署 Servlet 网站时,同样需要一种类似的软件,例如 Tomcat等,通常称为容器而不是服务器。
传统Web 服务器架构模式
特点:
-
只能提供http(s)服务
-
让用户访问静态资源(Html文档、图片、Css文件、JavaScript文件等)
Web服务器+编程语言运行环境+数据库管理系统=动态网站
运行时环境:
-
开发网站使用的编程语言一般都是脚本语言(比如 PHP、ASP、Python),部署网站时都是将源代码直接扔到服务器上
-
要有解释器的支持;当用户访问动态页面时,解释器负责分析、编译和执行源代码,然后得到处理结果
解释器是执行脚本语言核心的部分:
-
垃圾回收器:负责及时释放不需要的内存,腾出资源供其它页面使用;
-
标准库:任何编程语言都会附带标准库,它们提供了很多通用性的功能,极大地提高了开发效率,避免重复造轮子。
各种支持脚本语言运行的部件统称为运行环境,或者运行时(Runtime)。
小结:
部署一个动态网站至少需要的三个组件:
Servlet 容器架构模式--->Web容器架构模式
概念理解:
Servlet基于Java,运行时需要Jre,Jre只包含了JVM、Java 核心类库和一些辅助性性文件。并不支持Servlet规范。
要运行Servlet代码需要一种额外的部件,该部件必须支持 Servlet 规范,实现了 Servlet 接口和一些基础类--->这种部件就是 Servlet 容器
到底什么是Servlet容器?
-
Servlet 代码的运行环境(运行时)
容器特点:
-
实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持
-
管理由用户编写的 Servlet 类,比如实例化类(创建对象)、调用方法、销毁类等。
Servlet 类没有 main() 函数,不能独立运行,只能作为一个模块被载入到 Servlet 容器,然后由 Servlet 容器来实例化,并调用其中的方法。
一个动态页面对应一个 Servlet 类,开发一个动态页面就是编写一个 Servlet 类,当用户请求到达时,Servlet 容器会根据配置文件(web.xml)来决定调用哪个类。
Servlet 容器在整个 HTTP 请求流程中的位置如下图
流程分析:
-
Http请求到达Web 服务器,Web服务器判断该请求是静态资源还是动态资源:
-
静态资源就直接返回,此时相当于用户下载了一个服务器上的文件;
-
动态资源将无法处理,必须将该请求转发给 Servlet 容器。
-
-
Servlet 容器接收到请求以后,会根据配置文件(web.xml)找到对应的 Servlet 类,将它加载并实例化,然后调用其中的方法来处理用户请求;
-
处理结束后,Servlet 容器将处理结果再转交给 Web 服务器,由 Web 服务器将处理结果进行封装,以 HTTP 响应(response)的形式发送给最终的用户。
-
常用的 Web 容器有 Tomcat、Jboss、Jetty、WebLogic 等,Tomcat由Java官方提供
-
-
Web 容器往往也会自带 Web 服务器模块,提供基本的 HTTP 服务,可以不用再安装 Apache、IIS、Nginx 等传统意义上的服务器,只需要安装一款 Web 容器,就能部署 Servlet 网站。--->有些称tomcat为web服务器有些称为web容器,概念以及很模糊
使用Web容器作为服务器后:
Servlet容器总结
-
Servlet 容器就是 Servlet 程序的运行环境
-
实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持;
-
管理用户编写的 Servlet 类,以及实例化以后的对象;
-
提供 HTTP 服务,相当于一个简化的服务器。
-
Servlet 容器自带的 Web 服务器模块没有传统的 Web 服务器强大,也可以将传统的 Web 服务器和 Servlet 容器组合起来,共同完成 HTTP 请求。