Tomcat學習筆記(四)
阿新 • • 發佈:2017-06-18
客服 list illegal state oid () ons mov tom
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學習筆記(四)