zoukankan      html  css  js  c++  java
  • servlet初始化

       今天复习下servlet的初始化过程,如果xml配置文件没有设置<load-on-startup>大于1的数字</load-on-startup>,

    tomcat启动的时候默认是不会初始化servlet的。下面是tomcat开启时,context容器standardContext执行

    /**
         * Load and initialize all servlets marked "load on startup" in the
         * web application deployment descriptor.
         *
         * @param children Array of wrappers for all currently defined
         *  servlets (including those not declared load on startup)
         */
        public void loadOnStartup(Container children[]) {
    
            // Collect "load on startup" servlets that need to be initialized
            TreeMap map = new TreeMap();
            for (int i = 0; i < children.length; i++) {
                Wrapper wrapper = (Wrapper) children[i];
                int loadOnStartup = wrapper.getLoadOnStartup();
                if (loadOnStartup < 0)
                    continue;
                Integer key = Integer.valueOf(loadOnStartup);
                ArrayList list = (ArrayList) map.get(key);
                if (list == null) {
                    list = new ArrayList();
                    map.put(key, list);
                }
                list.add(wrapper);
            }
    
            // Load the collected "load on startup" servlets
            Iterator keys = map.keySet().iterator();
            while (keys.hasNext()) {
                Integer key = (Integer) keys.next();
                ArrayList list = (ArrayList) map.get(key);
                Iterator wrappers = list.iterator();
                while (wrappers.hasNext()) {
                    Wrapper wrapper = (Wrapper) wrappers.next();
                    try {
                        wrapper.load();
                    } catch (ServletException e) {
                        getLogger().error(sm.getString("standardWrapper.loadException",
                                          getName()), StandardWrapper.getRootCause(e));
                        // NOTE: load errors (including a servlet that throws
                        // UnavailableException from tht init() method) are NOT
                        // fatal to application startup
                    }
                }
            }
    
        }

     如果loadOnStartup 小于0就不初始化wrapper(也就是一个servlet)。

     TreeMap默认是按key升序排列,所以loadOnStartup设置的值越大就越先初始化。

  • 相关阅读:
    线程资料整理
    泛型委托使用
    生成树形结构的JSON字符串代码(C#)供前端Angular tree使用.
    Bootstrap学习笔记(6)
    Bootstrap学习笔记(5)
    Bootstrap学习笔记(4)
    渗透利器-kali工具 (第一章-3) Kali Linux 基础命令介绍下
    渗透利器-kali工具 (第一章-2) Kali Linux 基础命令介绍上
    渗透利器-kali工具 (第一章-1) Kali
    渗透利器-kali工具 (第一章) 前言篇
  • 原文地址:https://www.cnblogs.com/shapeOfMyHeart/p/6250439.html
Copyright © 2011-2022 走看看