Struts struts-config.xml的解析

Struts使用了digester进行自身配置文件的解析。
在ActionServlet类中,由下列方法完成。

由configDigester.addRuleSet(new ConfigRuleSet());

添加一个degister解析规则

    protected Digester initConfigDigester()
throws ServletException {
// :FIXME: Where can ServletException be thrown?
// Do we have an existing instance?
if (configDigester != null) {
return (configDigester);
}

// Create a new Digester instance with standard capabilities
configDigester = new Digester();
configDigester.setNamespaceAware(true);
configDigester.setValidating(this.isValidating());
configDigester.setUseContextClassLoader(true);
configDigester.addRuleSet(new ConfigRuleSet());

for (int i = 0; i < registrations.length; i += 2) {
URL url = this.getClass().getResource(registrations[i + 1]);

if (url != null) {
configDigester.register(registrations[i], url.toString());
}
}

this.addRuleSets();

// Return the completely configured Digester instance
return (configDigester);
}


ConfigRuleSet类中描述了如何对struts-config文件的节点进行处理。
ActionServlet类中push进digester的是ModuleConfigImpl。

规则中的addSetNext方法,将创建的各个对象调用ModuleConfigImpl的相应方法
加入到了ModuleConfigImpl中。


        digester.addRule("struts-config/action-mappings",
new SetActionMappingClassRule());

digester.addFactoryCreate("struts-config/action-mappings/action",
new ActionMappingFactory(cl));
digester.addSetProperties("struts-config/action-mappings/action");
digester.addSetNext("struts-config/action-mappings/action",
"addActionConfig", "org.apache.struts.config.ActionConfig");

digester.addRule("struts-config/action-mappings/action/set-property",
new BaseConfigSetPropertyRule());

digester.addObjectCreate("struts-config/action-mappings/action/exception",
"org.apache.struts.config.ExceptionConfig", "className");
digester.addSetProperties(
"struts-config/action-mappings/action/exception");
digester.addSetNext("struts-config/action-mappings/action/exception",
"addExceptionConfig", "org.apache.struts.config.ExceptionConfig");

digester.addRule("struts-config/action-mappings/action/exception/set-property",
new BaseConfigSetPropertyRule());

digester.addFactoryCreate("struts-config/action-mappings/action/forward",
new ActionForwardFactory(cl));
digester.addSetProperties(
"struts-config/action-mappings/action/forward");
digester.addSetNext("struts-config/action-mappings/action/forward",
"addForwardConfig", "org.apache.struts.config.ForwardConfig");

digester.addRule("struts-config/action-mappings/action/forward/set-property",
new BaseConfigSetPropertyRule());

digester.addObjectCreate("struts-config/controller",
"org.apache.struts.config.ControllerConfig", "className");
digester.addSetProperties("struts-config/controller");
digester.addSetNext("struts-config/controller", "setControllerConfig",
"org.apache.struts.config.ControllerConfig");

digester.addRule("struts-config/controller/set-property",
new BaseConfigSetPropertyRule());

digester.addRule("struts-config/form-beans",
new SetActionFormBeanClassRule());

digester.addFactoryCreate("struts-config/form-beans/form-bean",
new ActionFormBeanFactory(cl));
digester.addSetProperties("struts-config/form-beans/form-bean");
digester.addSetNext("struts-config/form-beans/form-bean",
"addFormBeanConfig", "org.apache.struts.config.FormBeanConfig");

digester.addObjectCreate("struts-config/form-beans/form-bean/form-property",
"org.apache.struts.config.FormPropertyConfig", "className");
digester.addSetProperties(
"struts-config/form-beans/form-bean/form-property");
digester.addSetNext("struts-config/form-beans/form-bean/form-property",
"addFormPropertyConfig",
"org.apache.struts.config.FormPropertyConfig");

digester.addRule("struts-config/form-beans/form-bean/form-property/set-property",
new BaseConfigSetPropertyRule());

digester.addRule("struts-config/form-beans/form-bean/set-property",
new BaseConfigSetPropertyRule());

digester.addObjectCreate("struts-config/global-exceptions/exception",
"org.apache.struts.config.ExceptionConfig", "className");
digester.addSetProperties("struts-config/global-exceptions/exception");
digester.addSetNext("struts-config/global-exceptions/exception",
"addExceptionConfig", "org.apache.struts.config.ExceptionConfig");

digester.addRule("struts-config/global-exceptions/exception/set-property",
new BaseConfigSetPropertyRule());

digester.addRule("struts-config/global-forwards",
new SetActionForwardClassRule());

digester.addFactoryCreate("struts-config/global-forwards/forward",
new GlobalForwardFactory(cl));
digester.addSetProperties("struts-config/global-forwards/forward");
digester.addSetNext("struts-config/global-forwards/forward",
"addForwardConfig", "org.apache.struts.config.ForwardConfig");

digester.addRule("struts-config/global-forwards/forward/set-property",
new BaseConfigSetPropertyRule());

digester.addObjectCreate("struts-config/message-resources",
"org.apache.struts.config.MessageResourcesConfig", "className");
digester.addSetProperties("struts-config/message-resources");
digester.addSetNext("struts-config/message-resources",
"addMessageResourcesConfig",
"org.apache.struts.config.MessageResourcesConfig");

digester.addRule("struts-config/message-resources/set-property",
new BaseConfigSetPropertyRule());

digester.addObjectCreate("struts-config/plug-in",
"org.apache.struts.config.PlugInConfig");
digester.addSetProperties("struts-config/plug-in");
digester.addSetNext("struts-config/plug-in", "addPlugInConfig",
"org.apache.struts.config.PlugInConfig");

digester.addRule("struts-config/plug-in/set-property",
new PlugInSetPropertyRule());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值