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)的问题,避免引发数据错乱。

时间: 2024-10-06 07:24:00

Servlet&JSP学习笔记:什么是Web容器的相关文章

Servlet&JSP学习笔记

Servlet&JSP学习笔记 */--> Servlet&JSP学习笔记 Table of Contents 1 Web容器 2 内置对象 2.1 内置对象分类 2.1.1 out 2.1.2 request 2.1.3 application 2.1.4 response 2.1.5 session 2.1.6 其他 3 JavaBean 3.1 JSP动作元素 3.2 javabean的四个作用於范围 4 JSP状态管理 4.1 Cookie 4.2 include 指令与动作

Servlet&Jsp学习笔记归纳图(一)

转载请注明出处!!!版权必究!! 以下是Servlet&Jsp的学笔记归纳图,详细内容以及相关代码会在后面整理完成 后给出 使用的是思维导图工具:MindManager 6 最新版本是2013,有兴趣的自己百度下载,功能更多,安装有点麻烦 以下提供版本6绿色版免安装版下载: http://pan.baidu.com/s/1jGqlnXc 本节思维导图文件下载:http://pan.baidu.com/s/1eQGbMSU Servlet&Jsp学习笔记归纳图(一),布布扣,bubuko.c

Servlet&JSP学习笔记:Web应用程序基础知识

URL.URN和URI URL:Uniform Resource Locator URN:Uniform Resource Name URI:Uniform Resource Indenfier URL的主要目的,是以文字方式来说明因特网上的资源如何取得.一般而言,URL的主要格式为: <协议>:<特定协议部分> 协议(scheme)指定了以何种方式取得资源.常见的协议名有: ftp(文件传输协议,File Transfer Protocol) http(超文本传输协议,Hyper

Servlet&amp;JSP学习笔记:第一个Servlet程序

第一个Servlet程序代码如下,接着根据这个小程序逐步讲解. import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletReq

Accelerated C++学习笔记7—&lt;使用顺序容器并分析字符串&gt;

第6章  使用库算法 本章中主要教我们如何使用几个库算法来解决与处理字符串和学生成绩相关的问题. 1.分析字符串 使用一个循环来连接两幅字符图案 for(vector<string>::const_iterator it = bottom.begin(); it != bottom.end(); ++it) ret.push_back(*it);</span> 等价于 ret.insert(ret.end(), bottom.begin(), bottom.end());</

PHP学习笔记-PHP与Web页面的交互2

转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51761308 本文出自:[顾林海的博客] 前言 在<PHP学习笔记-PHP与Web页面的交互1>笔记中讲解了form表单的一些属性,包括它的输入域标记.选择域标记和文字域标记的写法,接下来的内容就是讲如何获取表单数据以及PHP数据的传递,包括对各种控件值的获取. 插入表单 提交表单之前一定得有表单,当我们的表单创建完毕后可以将表单插入Web页中,代码如下: <

Servlet的学习笔记

一.Servlet生命周期 init(ServletConfig config)  ----->初始化 service(ServletRequest req, ServletResponse res)  ------->提供服务方法 destroy()  --------> 销毁 1.tomcat服务器启动时,没有创建Servlet对象 2.第一次访问时,tomcat构造Servlet对象,调用 init,执行service 3.从第二次以后访问 tomcat 不会从新创建Servlet

Head First Servlets &amp; JSP 学习笔记 第五章 —— 作为Web应用

初始化参数:(init-param) 初始化参数写在web.xml文件中:(写在<servlet>标签内部) 1 <servlet> 2 <servlet-name>BeerAdvisorServlet</servlet-name> 3 <servlet-class>com.example.web.BeerServlet</servlet-class> 4 5 <init-param> 6 <param-name&g

JSP学习笔记(五):自定义标签-JSP1.x

1.任何一个标签都对应一个Java类,该类必须实现Tag接口. 2.一个标签可以通过 tld 文件查找该标签的是实现类,并运行该类的相关方法. 一.简单标签实现 (一)实现Tag接口 1.实现代码: <span style="font-family:Arial;">package taglib.jsp_one; import java.io.IOException; import java.util.ResourceBundle; import javax.servlet.