struts 初始化分析

 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值