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