Servlet容器部分

servlet容器用来处理请求servlet资源,并为web客服端填充response对象模块,在tomcat中,共有4种类型的容器,分别是:Engine、Host、Contex和Wrapper。 
      4种类型的容器,分别对应不同的层次: 
          Engine:表示整个Catalina servlet引擎 
          Host:表示包含有一个或者多个Context容器的虚拟机 
          Context:表示一个Web应用程序。一个Context可以多个Wrapper。 
          Wrapper:表示独立的servlet。 
          ContainerBase的抽象类实现了Container接口,同时这4个接口的实现并且继承ContianerBase类为StandardEngine,StandardHost,StandardContext,StandardWrapper

Engine与Host的关系 
      StandardEngine

public void addChild(Container child) {

        if (!(child instanceof Host))
throw new IllegalArgumentException
(sm.getString("standardEngine.notHost"));
super.addChild(child); }

Host与Context的关系 
     StandardHost

public void addChild(Container child) {
child.addLifecycleListener(new MemoryLeakTrackingListener());
if (!(child instanceof Context))
throw new IllegalArgumentException
(sm.getString("standardHost.notContext"));
super.addChild(child); }

Context与Wrapper的关系 
   StandardContext

public void addChild(Container child) {
// Global JspServlet
Wrapper oldJspServlet = null; if (!(child instanceof Wrapper)) {
throw new IllegalArgumentException
(sm.getString("standardContext.notWrapper"));
}
boolean isJspServlet = "jsp".equals(child.getName()); // Allow webapp to override JspServlet inherited from global web.xml.
if (isJspServlet) {
oldJspServlet = (Wrapper) findChild("jsp");
if (oldJspServlet != null) {
removeChild(oldJspServlet);
}
} super.addChild(child); if (isJspServlet && oldJspServlet != null) {
/*
* The webapp-specific JspServlet inherits all the mappings
* specified in the global web.xml, and may add additional ones.
*/
String[] jspMappings = oldJspServlet.findMappings();
for (int i=0; jspMappings!=null && i<jspMappings.length; i++) {
addServletMapping(jspMappings[i], child.getName());
}
}
}

然而StandardWrapper不能addChild

public void addChild(Container child) {
throw new IllegalStateException
(sm.getString("standardWrapper.notChild"));
}

容器关系如下:

最新文章

  1. LintCode Binary Tree Maximum Path Sum
  2. (01背包 当容量特别大的时候) Knapsack problem (fzu 2214)
  3. Sass 编译的几种方法
  4. Python多线程及其使用方法
  5. opencv-jni -调试出错taking address of temporary [-fpermissive]
  6. Ext ApplicationController&amp;ref的使用
  7. cache buffer
  8. ZED-Board从入门到精通系列(八)——Vivado HLS实现FIR滤波器
  9. JS高级程序设计第3章读书笔记
  10. 判断是否是IE9浏览器的最短语句 var ie=!-[1,]
  11. ACM Max Factor
  12. Oracle同义词(synonym)
  13. Jmeter(四)NO-GUI模式运行
  14. Vim on Mac Terminal
  15. 走进异步编程的世界--async/await项目使用实战
  16. Resources.class.getResourceAsStream 获取配置的方法
  17. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十二:串口模块① — 发送
  18. Mac安装zsh oh-my-zsh
  19. BUAA OO 2019 第二单元作业总结
  20. 【HTML5】HTML5 WebSocket简介以及简单示例

热门文章

  1. PXE+DHCP+TFTP+Cobbler 无人值守安装centos 7
  2. 【转载】C语言itoa()函数和atoi()函数详解(整数转字符C实现)
  3. C++指针之间的赋值与转换规则总结
  4. C语言指针篇(二)多级指针
  5. scala高级性质-隐式转换 -02
  6. 12,DBUtils - Python数据库连接池
  7. bitset学习
  8. VS的几个实用快捷键
  9. flask利用session身份伪造
  10. OZ customize windows iamge