容器是一个处理用户servlet请求并返回对象给web用户的模块。

org.apache.catalina.Container接口定义了容器的形式,用四种容器:Engine(引擎),Host(主机),Context(上下文),和Wrapper(包装器)。这一章将会介绍Context和wrapper。而Enginer和Host会留到第十三章介绍。这一章首先介绍容器接口,然后介绍容器的工作流程。然后介绍的内容是Wrapper和Context接口。然后用两个例子来总结wrapper和context容器。

容器接口

一个容器必须实现org.apache.catalina.Container接口。就如在第四章看到的那样,传递一个Container实例给Connect对象的setContainer方法,然后Connect对象就可以使用container的invoke方法,重新看下第四章中Bootstrap类的代码如下:

HttpConnector connector = new HttpConnector();
SimpleContainer container = new SimpleCOntainer();
connector.setContainer(container);

对于Catalina容器首先需要注意的是它一共有四种不同的容器:

Engine:表示整个Catalina的servlet引擎

Host:表示一个拥有数个上下文的虚拟主机

Context:表示一个web应用,一个context包含一个或多个wrapper

Wrapper:表示一个独立的servlet

每一个概念之上都是用org.apache.catalina包来表示的。Engine Host Context 和 Wrapper接口都实现了Container即可。它们的标准实现是StandardEngine,StandardHost,StandardContext,and StandardWrapper,它们都是org.apache.catalina.core包的一部分。

所有的类都扩展自抽象类ContainerBase.

一个Catalina功能部署不一定需要所有的四种类型的容器。

一个容器可以有一个或者多个低层次的子容器。其大小关系是Engine->Host->Context->Wrapper。

Contaner接口被设计成Tomcat管理员可以通过Server.xml文件配置来决定其工作方式的模式。他通过一个pipeline(流水线)和一系列的阀门来实现。

《How Tomcat works》的更多相关文章

  1. 《how tomcat works》阅读笔记 - 2 - 门面设计模式,避免强制转换

    在第二章 2.3节中 try { servlet = (Servlet) myClass.newInstance(); servlet.service((ServletRequest) request ...

  2. How Tomcat Works(二)

    我们这些可怜虫,只有沿着大神的思路,这样我们才能进步得更快:因为我们不是跟大神处于同一级别上.所以我这里是参考<How Tomcat Works>这本英文版的大作来理解tomcat的工作原 ...

  3. How tomcat works学习笔记

    最近在看Tomcat的源码, 所以找了一本相关的书籍<How tomcat works>. 博客内容多为 学习该书时所记录的笔记.(如有侵权行为,请联系我:eviltomorrow@163 ...

  4. 翻译《Writing Idiomatic Python》(五):类、上下文管理器、生成器

    原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...

  5. 翻译《Writing Idiomatic Python》(三):变量、字符串、列表

    原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...

  6. [转载]《C++0x漫谈》系列之:多线程内存模型

    <C++0x漫谈>系列之:多线程内存模型 By 刘未鹏(pongba) 刘言|C++的罗浮宫(http://blog.csdn.net/pongba) <C++0x漫谈>系列导 ...

  7. 《dive into python3》 笔记摘录

    1.list can hold  arbitrary  objects and can expand dynamically as new items are added. A list is an  ...

  8. 《JAVA与模式》之门面模式

    <JAVA与模式>之门面模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述门面(Facade)模式的: 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的 ...

  9. 《Dare To Dream》第七次作业:团队项目设计完善&编码测试

    任务一:团队项目<软件设计方案说明书>Github链接:https://github.com/Sophur/Team-Project 任务二:项目集成开发环境: (1)JSP技术 JSP( ...

随机推荐

  1. iOS---OBJC_ASSOCIATION_ASSIGN可能引起的Crash

    //OBJC_ASSOCIATION_ASSIGN类似于我们常用的assign,assign策略的特点就是在对象释放以后,不会主动将应用的对象置为nil,这样会有访问僵尸对象导致应用崩溃的风险.为了解 ...

  2. ios学习之路:Xcode+swift+打包ipa一步一坑记录

    咳咳,作为公司的Android开发(兼java接口开发,兼软件测试,兼运维……)由于公司ios开发小伙伴离我而去,ios的app出了问题,急需处理.于是领导决定由我来处理一下.就是用证书重新打包的事儿 ...

  3. 2018 经典的CVPR 关于ImageCaptioning论文

    1.        SemStyle: Learning to Generate Stylised Image Captions using Unaligned Text(2018 CVPR) 主要研 ...

  4. laravel 框架源码分析

    laravel框架的文档中的例子很多时候不是很明显,所以想要真正的使用好这个框架,我们可以尝试去阅读它源码中的注释(不得不说laravel源码的注释还是很详细的). 我们先来看一下laravel 的文 ...

  5. 对token机制的学习和分析

    token,中文意思为令牌,是用户登录后会返回的一个字符串,里面包括用户信息.登录时间等,但是是加密过的密文,其加解密方式由后端决定. 在登录之后的接口请求中,前端需在请求中统一加上token,从而识 ...

  6. linux的常用命令(一)

    目录切换命令: cd切换目录 cd /usr 切换到usr目录 cd ..     切换到上一层目录 cd ../..   调到当前目录的上上两层 cd  /      切换到系统根目录 cd  ~  ...

  7. C++ STL容器

    不定长数组:vector vector是一个模板类,作用为创建一个不定长的数组 声明方式:vector<int>a或者vector<double>b这种类型的方式. 基本操作: ...

  8. sleuth和zipkin微服务里的链路跟踪

    分布式链路跟踪介绍 对于一个微服务系统,大多数来自外部的请求都会经过数个服务的互相调用,得到返回的结果,一旦结果回复较慢或者返回了不可用,我们就需要确定是哪个微服务出了问题.于是就有了分布式系统调用跟 ...

  9. 松软科技web课堂:JavaScript 比较和逻辑运算符

    JavaScript 比较和逻辑运算符 比较和逻辑运算符用于测试 true 或 false. 比较运算符 比较运算符在逻辑语句中使用,以判定变量或值是否相等. 我们给定 x = 5,下表中解释了比较运 ...

  10. About learn《The C programming Language,Second Edition》

    Today,My last week buy C language book arrived. Today,I week earnest study. No matter what difficult ...