何謂容器

對於Java程式而言,JVM(Java Virtual Machine)是其作業系統,.java編譯為.class檔案,.class對於JVM而言,就是其可執行檔,你的Java程式基本上只認得一種作業系統,就是JVM。

當你開始撰寫Servlet/JSP程式時,你必須開始接觸容器(Container)的概念,容器這個名詞也用在如List、Set這類的Collection上,也就是用來持有、保存物件的群集(Collection)物件,不過,對於撰寫Servlet/JSP來說,容器的概念更為廣泛,在最基本的功能上,它不僅持有物件,還負責物件的生命周期與相關服務的連結。

在具體層面,容器說穿了,其實就是一個用Java寫的程式,運行於JVM之上,不同類型的容器會負責不同的工作,若以Servlet/JSP所運行的Web容器(Web Container)來說,也是一個Java寫的程式,想想看,HTTP那些文字性的通訊協定,如何變成你寫的Servlet/JSP中可用的Java物件(如HttpServletRequest、HttpServletResponse等),其實就是容器為你剖析與轉換。

在抽象層面,可以將Web容器視為你寫的Servlet/JSP的運行伺服器,是的!就如同Java程式僅認得JVM這個作業系統,Servlet/JSP程式在抽象層面上,也僅認得Web容器這個概念上的Web伺服器,只要你寫的Servlet/JSP是符合Web容器的標準規範,你的Servlet/JSP就可以在各種不同廠商實作的Web容器上運行,而不用理會底層真正的Web伺服器。

當然,實際上還是要有個Web伺服器,所以回到實際層面,Web容器是個Java寫的應用程式,可以成為實體Web伺服器程式的一部份,管理Servlet物件的生命週期,提供基於HTTP請求、回應的網路服務。

若以Tomcat為例,容器的角色位置可以用下圖來表示:

就如同JVM介於Java程式與實體作業系統之間,Web容器是介於實體Web伺服器與Servlet之間,也正如你撰寫Java程式必須了解 JVM/JRE與你的應用程式之間如何互動,你撰寫Servlet/JSP也必須知道容器如何與你的Servlet/JSP互動,如何管理Servlet 等事實(JSP最後也是轉譯、編譯、載入為Servlet,在容器的世界中,真正負責請求、回應的是Servlet)。

一個請求/回應的基本例子是:

  1. 客戶端(大部份情況下是瀏覽器)對Web伺服器發出HTTP請求。
  2. Web伺服器收到HTTP請求,將請求轉由Web容器處理,Web容器會剖析HTTP請求內容,建立各種物件(像是HttpServletRequest、HttpServletResponse、HttpSession等)。
  3. Web容器由請求的URL決定要使用哪個Servlet來處理請求(事先由開發人員定義)。
  4. Servlet根據請求物件(HttpServletRequest)的資訊決定如何處理,透過回應物件(HttpServletResponse)來建立回應。
  5. Web容器與Web伺服器溝通,Web伺服器將回應轉換為HTTP回應並傳回客戶端。

不僅是寫Servet/JSP需要理解Web容器,在Java EE的領域無論是哪個技術,都與容器息息相關,寫Servlet/JSP需要理解Web容器,寫EJB需要了解EJB容器,寫應用程式客戶端需要了解應用程式客戶端容器,即使是寫個Applet,也會有個Applet容器的特性需要了解。

下圖是摘自 Java EE 6 Tutorial中 Java EE 6 APIs 文件的容器示意:

對於Java EE 6規範中Servlet 3.0/JSP 2.2等,你可以使用的實際容器可以是Tomcat 7,或者是Glassfish v3,Tomcat 7專注在Web容器的部份,Glassfish v3是個完整的應用程式伺服器,當然也包括了Web容器的功能(當然,也還有其它廠商的實現)。

 
原文请见:http://openhome.cc/Gossip/ServletJSP/

J2EE学习(2)--何謂容器【良葛格学习笔记搬】的更多相关文章

  1. Java良葛格 学习笔记

    学习一个新的事物时,如果遇到一些概念无法很快理解,这可能是因为要理解概念会需要其它概念先建立起来,所以先暂时放下这个疑问也是一个学习方法,称之为“存疑” ,在以后的学习过程中待必要的概念学会后,目前的 ...

  2. Java良葛格 学习笔记《二》

    正则表达式 . 符合任一字符\d 符合0到9任一个数字字符\D 符合0-9以外的字符\s 符合'\t'.'\n'.'\x0B'.'\f'.'\r'等空格符\w 符合a到z.A到Z.0到9等字符,也就是 ...

  3. 标准模板库(STL)学习探究之vector容器

    标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...

  4. 跟着刚哥学习Spring框架--Spring容器(二)

    Spring容器 启动Spring容器(实例化容器) -- IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化(加载启动),这样才可以从容器中获取Bean的实例并使用.  Bean是S ...

  5. Spring 源码学习 04:初始化容器与 DefaultListableBeanFactory

    前言 在前一篇文章:创建 IoC 容器的几种方式中,介绍了四种方式,这里以 AnnotationConfigApplicationContext 为例,跟进代码,看看 IoC 的启动流程. 入口 从 ...

  6. iOS之学习资源收集--很好的IOS技术学习网站

    点击图片也能打开相关的网站: https://boxueio.com/skill/swift http://ios.b2mp.cn/ http://gold.xitu.io/welcome/?utm_ ...

  7. 人工智能深度学习Caffe框架介绍,优秀的深度学习架构

    人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...

  8. 深度学习之PyTorch实战(1)——基础学习及搭建环境

    最近在学习PyTorch框架,买了一本<深度学习之PyTorch实战计算机视觉>,从学习开始,小编会整理学习笔记,并博客记录,希望自己好好学完这本书,最后能熟练应用此框架. PyTorch ...

  9. 根据学习廖雪峰老师的git教程做的笔记

    根据学习廖雪峰老师的git教程做的笔记 安装git 进行git的配置 配置您的用户名和邮箱地址,使用--global 这个参数表明了在此台机器上的所有仓库都会使用该配置 $ git config -- ...

随机推荐

  1. Theoretical comparison between the Gini Index and Information Gain criteria

    Knowledge Discovery in Databases (KDD) is an active and important research area with the promise for ...

  2. GoLang 通过http Post获取数据

    func GetPostResponse(url, bodyType string, body *[]byte) (rdata []byte, err error) { b := bytes.NewB ...

  3. Linux/Unix 线程同步技术之互斥量(1)

    众所周知,互斥量(mutex)是同步线程对共享资源访问的技术,用来防止下面这种情况:线程A试图访问某个共享资源时,线程B正在对其进行修改,从而造成资源状态不一致.与之相关的一个术语临界区(critic ...

  4. Node连接MySQL

    http://blog.fens.me/nodejs-mysql-intro/ http://czpae86.iteye.com/blog/1636302 http://www.cnblogs.com ...

  5. height与line-height

    1.网页的所有元素可以分为块元素和行元素.一行文字所在的一个逻辑区域是行元素,其他的元素就都是块元素line-height只针对行元素,height针对其他所有元素 2. width,height对于 ...

  6. Linux内核分析——进程描述与创建

    20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验内容 ...

  7. visualssh 是一个可视化的ssh客户端

    这两个周末写了visualssh,一个可视化的ssh客户端.里面集成了putty的功能,通过ssh协议与Linux server通讯. 以后可以针对不同的应用编写相关插件,便于管理Linux服务器上的 ...

  8. oracle xmltype导入并解析Excel数据 (一)创建表与序

    表说明: T_EXCEL_IMPORT_DATASRC: Excel数据存储表,(使用了xmltype存储Excel数据) 部分字段说明: BUSINESSTYPE: Excel模板类型,一个Exce ...

  9. HDU 1710

    http://acm.hdu.edu.cn/showproblem.php?pid=1710 题意:给二叉树的先序遍历和中序遍历,确定后序遍历 解法:复习专业课找的一题,根据先序遍历和中序遍历建树,再 ...

  10. 如何全面解决ECSHOP的jquery冲突

    主要就是Ecshop的AJAX传输类,transport.js中重写了object的对象原型,从而导致了与jq框架的冲突. 解决: 1. 删除transport.js中587行 - 636行中关于ob ...