struts 初始化分析
来源:互联网 发布:搜索引擎优化的优缺点 编辑:程序博客网 时间:2024/05/01 23:09
public void init() throws ServletException {
try {
initInternal();
initOther();
initServlet();
getServletContext().setAttribute(Globals.ACTION_SERVLET_KEY, this);
initModuleConfigFactory();
ModuleConfig moduleConfig = initModuleConfig("", config);
initModuleMessageResources(moduleConfig);
initModuleDataSources(moduleConfig);
initModulePlugIns(moduleConfig);
moduleConfig.freeze();
Enumeration names = getServletConfig().getInitParameterNames();
while (names.hasMoreElements()) {
String name = (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();
}
this.initModulePrefixes(this.getServletContext());
}
先来看 initInternal();方法,代码如下:
internal = MessageResources.getMessageResources(internalName);
public synchronized static MessageResources getMessageResources(String config) {
if (defaultFactory == null) {
/*创建一个MessageResources工厂*/
defaultFactory = MessageResourcesFactory.createFactory();
}
/*创建一个MessageResources类*/
return defaultFactory.createResources(config);
}
initInternal();主要是初始化框架的内部消息绑定,支持国际化,实现多国语言。
然后是initOther(); 主要是获取struts的配置文件。
第一句代码是 value = getServletConfig().getInitParameter("config");
获得web.xml中的name为config的value="/WEB-INF/struts-config.xml";
value = getServletConfig().getInitParameter("convertNull");
获得convertNull的值,为以后的formbean进行类型转换。
initServlet();
第一句 this.servletName = getServletConfig().getServletName();
获取servelt的名字,一般为action
Digester digester = new Digester();该类是用来解析web.xml的解析器。
把struts-config.xml放入解析器这种,之后要逐步解析。
protected void initModuleConfigFactory()
protected ModuleConfig initModuleConfig(String prefix, String paths)
以上两句代码是创建一个ModuleConfigFactory,如果在web.xml中没有配置,则采用默认的
"org.apache.struts.config.impl.DefaultModuleConfigFactory";
ModuleConfig config = factoryObject.createModuleConfig(prefix);
生成一个ModuleConfig,ModuleConfig是个javabean,类中的成员变量主要来保存struts-config.xml
中转换后的java对象,如:actionForm,actionForward,actionMapping等。
然后对每一个配置文件进行逐一解析,this.parseModuleConfigFile(digester, path);解析之后的类被全部放在ModuleConfig的成员变量之中。最后 FormBeanConfig fbs[] = config.findFormBeanConfigs();
for (int i = 0; i < fbs.length; i++) {
if (fbs[i].getDynamic()) {
fbs[i].getDynaActionFormClass();
}
}
如果是动态formBean,就放在DynaActionFormClass类的propertiesMap变量中,propertiesMap是个hashmap。
initModuleMessageResources(moduleConfig);
initModuleDataSources(moduleConfig);
initModulePlugIns(moduleConfig);
上面这3句代码是用来分别初始化资源文件,数据源配置和插入,并把他们放入到servletContext中。
接着 moduleConfig.freeze();这个方法是对moduleConfig中的每一个成员变量设置一个configured的标志为true。使moduleConfig变得不可改变。
最后调用this.destroyConfigDigester();释放内存资源。
http://lovedance.blogbus.com/logs/38038565.html
- struts 初始化分析
- 【struts】struts初始化主线
- Struts2.3.14分析-初始化2--Struts.xml解析
- Struts的初始化
- struts源代码学习(初始化)
- Struts框架初始化流程
- Struts初始化过程
- struts 初始化(详细)
- Struts初始化之RequestProcessor
- struts的初始化解读
- Struts的初始化解析
- struts初始化失败
- struts ModuleConfig类加载初始化的过程以及RequestProcessor类源码分析
- struts源代码阅读(struts 初始化)
- struts源代码阅读(struts 初始化)
- struts源代码阅读(struts 初始化)
- struts源代码阅读(struts 初始化)
- Struts框架 Plugin初始化数据
- JAVA---JDK环境变量的配置
- C++设计模式之Adapter
- 计算机
- WPF程序单一实例启动问题
- serlet路径详解(转载)
- struts 初始化分析
- Windows XP的定时自动关机
- struts的具体执行过程
- Petri
- Servlet路径、ServletConfig、ServletContext和乱码问题(转载)
- C++ STL中哈希表 hash_map
- BufferedReader位置重置(例:统计文件里面单词个数和单词个数数量)
- 我的编程大学生活
- 新boj84