天天看點

ActionServlet初始化

public void init() throws ServletException {

  /*

   調用initInternal()方法,初始化struts架構内在的消息資源,如與系統日志相關的通知、警告和錯誤資訊。

   */

        initInternal();

   /*

  調用initOther(),從web.xml檔案中加載ActionServlet的初始化參數,如config,debug,convertNull等,具體參數參見“ActionServlet參數設定.doc”

         */

        initOther();

        /*

   調用initServlet(),從web.xml檔案中加載ActionServlet的URL映射資訊。此外還會注冊web.xml和struts配置檔案所使用的DTD檔案,這些DTD檔案用來驗證web.xml和struts配置檔案的文法

        initServlet();

        getServletContext().setAttribute(Globals.ACTION_SERVLET_KEY, this);

        調用initModuleConfig(),加載并解析預設應用子產品的struts配置檔案;建立ModuleConfig對象,把它存在ServletContext中

        */

        // Initialize modules as needed

        ModuleConfig moduleConfig = initModuleConfig("", config);

        調用intiModuleMessageResources(),加載并初始化預設應用子產品的消息資源,建立MessageResources對象,把它存在ServletContext中

        initModuleMessageResources(moduleConfig);

        調用initModuleDataSources()方法,加載并初始化預設應用子產品的資料源。如果沒有在struts配置檔案中沒有定義<data-sources>元素,就忽略這一流程

        initModuleDataSources(moduleConfig);

        調用initModulePlugins(),加載并初始化預設應用子產品的所有插件

        initModulePlugIns(moduleConfig);

         預設應用子產品配置完畢

          */

        moduleConfig.freeze();

        當預設子應用子產品被成功初始化後,如果應用還包括其他子應用子產品,将重複流程4-7,分别對其他子應用子產品進行初始化。

        Enumeration names = getServletConfig().getInitParameterNames();

        while (names.hasMoreElements()) {

            String names.nextElement();

            if (!name.startsWith("config/")) {

                continue;

            }

            String prefix = name.substring(6);

            moduleConfig = initModuleConfig

                (prefix, getServletConfig().getInitParameter(name));

            initModuleMessageResources(moduleConfig);

            initModuleDataSources(moduleConfig);

            initModulePlugIns(moduleConfig);

            moduleConfig.freeze();

        }

        destroyConfigDigester();

        //到此,ActionServlet初始化完畢

}

init()方法流程圖如下: