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()方法流程圖如下: