首页 > 代码库 > Tomcat学习笔记(四)
Tomcat学习笔记(四)
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")); }
容器关系如下:
Tomcat学习笔记(四)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。