首页 > 代码库 > Servlet&JSP学习笔记:什么是Web容器

Servlet&JSP学习笔记:什么是Web容器

什么是Web容器

Web容器(Container)是Servlet/JSP唯一认得的 HTTP 服务器

  • 在具体层面,容器说穿了就是一个用 Java 写的程序,运行于 JVM 之上,不同类型的容器会负责不同的工作,若以 Servlet/JSP 运行的 Web 容器(Web Container)来说,也是一个 Java 写的程序。 HTTP 那些文字性的通信协议,如何变成 Servlet/JSP中可用的 Java 对象,其实就是容器做的剖析与转换。
  • 在抽象层面,可以将Web容器视为运行 Servlet/JSP 的 HTTP 服务器,只要写的 Servlet/JSP 符合 Web 容器的标准规范,Servlet/JSP 就可以在各种不同厂商实现的 Web 容器上运行,而不用理会底层真正的 HTTP 服务器是什么。

以Tomcat为例,容器的角色位置可以用下图来表示:

 

什么是Web容器

Web容器(Container)是Servlet/JSP唯一认得的 HTTP 服务器

  • 在具体层面,容器说穿了就是一个用 Java 写的程序,运行于 JVM 之上,不同类型的容器会负责不同的工作,若以 Servlet/JSP 运行的 Web 容器(Web Container)来说,也是一个 Java 写的程序。 HTTP 那些文字性的通信协议,如何变成 Servlet/JSP中可用的 Java 对象,其实就是容器做的剖析与转换。
  • 在抽象层面,可以将Web容器视为运行 Servlet/JSP 的 HTTP 服务器,只要写的 Servlet/JSP 符合 Web 容器的标准规范,Servlet/JSP 就可以在各种不同厂商实现的 Web 容器上运行,而不用理会底层真正的 HTTP 服务器是什么。

以Tomcat为例,容器的角色位置可以用下图来表示:

技术分享

类似于 JVM 介于 Java 程序与实体操作系统之间,Web容器是介于实体 HTTP 服务器与 Servlet 之间,也正如编写 Java 程序必须了解 JVM 与应用程序之间如何互动,编写 Servlet/JSP 也必须知道 Web 容器如何与 Servlet/JSP 互动,如何管理 Servlet 等事实(JSP 最后也是转译、编译、加载为 Servlet,在容器的世界中,真正负责请求、响应的是 Servlet)。

一个请求/响应的的基本例子:

  • (1) 客户端(大部分情况下是浏览器)对 Web 服务器发出 HTTP 请求。
  • (2) HTTP 服务器收到 HTTP 请求,将请求转由 Web 容器处理,Web容器会剖析 HTTP 请求内容,创建各种对象(如 HttpServletRequest、HttpServletResponse、HttpServletSession等)。
  • (3) Web 容器有请求的 URL 决定要使用哪个 Servlet来处理请求(事先有开发人员定义)。
  • (4) Servlet 根据请求对象(HttpServeltRequest)的信息决定如何处理,通过响应对象(HttpServletResponse)来创建响应。
  • (5) Web容器与 HTTP 服务器沟通,Web服务器将响应转换为 HTTP 响应并传回客户端。

Servlet 是执行在 Web 容器之上,Web容器是有服务器上的 JVM 启动,JVM 本身就是服务器上的一个可执行程序,当一个请求来到时,Web容器会为每个请求分配一个线程(Thread)。

技术分享

  如果有多次请求进来,就只是启动多个线程来进行处理,而不是重复启动多次 JVM。线程就像是进程(Process)中的轻量级流程,由于不用重复启动多个进程,可以大幅减轻性能负担。

然后要注意的是,Web容器可能会使用同一个 Servlet 实例来服务多个请求。也就是说,多个请求下,就相当于多个线程在共享存取一个对象,因此需要注意线程安全(Thread)的问题,避免引发数据错乱。

Servlet&JSP学习笔记:什么是Web容器