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