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"));
        }

    容器关系如下:

        

  • 相关阅读:
    计蒜客 跳跃游戏2
    计蒜客 跳跃游戏
    2018 计蒜之道-初赛 第一场 A-百度无人车
    poj 3625 (最小生成树算法)
    poj 3623(贪心)
    poj2386(dfs搜索水题)
    poj 2761 主席树的应用(查询区间第k小值)
    POJ 2456 编程技巧之------二分查找思想的巧妙应用
    POJ 1995(有关快速幂运算的一道水题)
    1441:【例题2】生日蛋糕
  • 原文地址:https://www.cnblogs.com/lzeffort/p/7044216.html
Copyright © 2011-2022 走看看