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