zoukankan      html  css  js  c++  java
  • 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"));
        }

    容器关系如下:

        

  • 相关阅读:
    如何解决软键盘弹出引起的各种不适
    防反编译、混淆文件proguard.cfg与proguard-project.txt详解
    Android.mk添加第三方jar包
    Android Proguard.flags LOCAL_PROGUARD_FLAGS
    【Mood 21】要不要重复造轮子
    彻底解决INSTALL_FAILED_UPDATE_INCOMPATIBLE的安装错误
    【起航计划 037】2015 起航计划 Android APIDemo的魔鬼步伐 36 App->Service->Remote Service Binding AIDL实现不同进程间调用服务接口 kill 进程
    【起航计划ObjC 003】印第安老斑鸠ObjC的幻想 ---- ObjC经典问题
    缩短移动开发周期的ApiCloud
    LeAndroid招聘汇总
  • 原文地址:https://www.cnblogs.com/lzeffort/p/7044216.html
Copyright © 2011-2022 走看看