本公司的业务开发平台中,在展现层用到了webwork作为控制框架,由于最近在公司的一个比较大的商业计划中,打算实现“应用集市”的功能,在技术上要实现业务模块的导入导出功能,因此要求系统必须能够实现自动加载一个业务模块的所有相关文件,而在持久层和业务层不存在任何问题,因为hibernate的mapping文件,和spring的配置文件xxx.bean.xml只要在classpath中,都是可以自动加载的,但是对于webwork的配置文件,用过的人都知道,一个单独的模块配置文件:xxxmodule_xwork.xml必须要在系统的xwork.xml文件中显式地include进来,这个模块的配置文件才能够自动地被加载到,实在是烦人。因此笔者想到了,能不能也像spring的配置文件一样,能够放到classpath下被自动地加载到,于是偶赶紧去看xwork的源码,终于被偶发现:xwork的配置文件加载都是依赖于com.opensymphony.xwork.config.providers.XmlConfigurationProvider这个类, 其中init方法的源码如下:
public void init(Configuration configuration) {
this.configuration = configuration;
includedFileNames.clear();
try {
loadConfigurationFile(configFileName, null);
} catch (ConfigurationException e) {
throw e;
} catch (Exception e) {
LOG.fatal("Could not load XWork configuration file, failing", e);
throw new ConfigurationException("Error loading configuration file " + configFileName, e);
}
}
可以看到loadConfigurationFile()这个方法真正地实现xwork.xml文件的加载,如果我在系统启动的时候先取到classpath中所有的xxxmodule_xwork.xml文件,然后传给这个init方法,循环调用loadConfigurationFile()这个方法,不就可以把classpath中所有的xwork相关的配置文件自动加载了么,因此代码改写如下:
//add by xinpeng 20080316
private List configFileNameList;
//加入一个构造方法,将classpath下所有的xwork文件名称的集合传入
public XmlConfigurationProvider(List configFileNameList) {
this.configFileNameList = configFileNameList;
}
//end by xinpeng
public void init(Configuration configuration) {
this.configuration = configuration;
includedFileNames.clear();
try {
//modify by xinpeng 20080314,循环加载所有的xwork配置文件
for (int i = 0, len = configFileNameList.size(); i < len; i++) {
String configFileName = (String) configFileNameList.get(i);
this.configFileName = configFileName;
LOG.debug("the current config file name is : "+this.configFileName);
loadConfigurationFile(configFileName, null);
}
//end by xinpeng
} catch (Exception e) {
LOG.fatal("Could not load XWork configuration file, failing:" + e);
throw new ConfigurationException("Error loading configuration file " + configFileNameList, e);
}
}
然后再写一个监听器,在系统启动的时候,取得classpath下所有的xwork的配置文件,并通过XmlConfigurationProvider类的构造子传入,监听器的监听方法如下:
public void contextInitialized(ServletContextEvent event) {
log.info("beginning to load xwork config file......");
List<String> xworkConfigFileList = new ArrayList<String>();
String[] fileList = ResourceFinder.getXwork();
for (int i = 0, len = fileList.length; i < len; i++) {
xworkConfigFileList.add(fileList[i]);
}
ConfigurationProvider configurationProvider = new XmlConfigurationProvider(xworkConfigFileList);
ConfigurationManager.addConfigurationProvider(configurationProvider);
log.info("all the xwork config file has been loaded successfully!");
}
最后在web.xml文件中,配置上这个监听器,把xwork.xml文件中n多的include全部干掉,重启tomcat,OK全部成功了!
,以后再也不用关心xwork配置文件的include问题,我们可以直接把它打包到xxxmodule.jar中,从而真正地实现了xwork配置文件自动加载功能。
分享到:
相关推荐
7. **国际化与本地化**:XWork支持多语言环境,通过`com.opensymphony.xwork2.util.LocalizedTextUtil`类,可以实现动态加载和显示不同语言的文本资源。 通过研究“trunk”目录下的源码,开发者不仅可以理解XWork的...
6. **配置管理(Configuration Manager)**:xwork-2.0.4通过配置管理器加载和解析配置文件,包括struts.xml和其他自定义的配置文件。源码中,我们可以学习到配置信息的加载流程,以及如何动态修改配置。 7. **异常...
6. **配置管理**:xwork-core的配置管理模块负责加载和解析配置文件,包括struts.xml和package配置,这些配置定义了Action、Interceptor、Result等的组合使用方式。 7. **异常处理**:xwork-core提供了全面的异常...
5. **配置管理(Configuration Manager)**:负责加载和管理配置信息,包括Action配置、拦截器链配置等,提供动态修改配置的能力。 6. **Type Conversion**:Xwork提供了自动类型转换机制,能将用户输入的数据自动...
- `com.opensymphony.xwork2.config`:这部分代码涉及到配置加载和管理,包括加载XML配置文件和解析配置元素。 - `com.opensymphony.xwork2.util`:这里提供了各种工具类,如反射、表达式语言支持等。 通过阅读这些...
Action是业务逻辑的载体,XWork通过配置文件或注解定义Action的映射和执行逻辑。 2. **类型转换**:XWork包含一套强大的类型转换系统,能够自动将HTTP请求参数转换为Action属性的类型,反之亦然。这对于处理不同...
4. **配置管理(Configuration Manager)**:Struts2的配置管理器负责读取配置文件(如struts.xml),并将配置信息加载到内存中。这部分代码主要位于`com.opensymphony.xwork2.config`包下,包括`Configuration`接口...
xwork-2.2.1支持多语言环境,通过ResourceBundle加载不同语言的资源配置文件。源代码中的LocaleProvider和Localizer接口以及其实现类,展示了如何根据用户请求的locale选择合适的资源文件,提供本地化的消息显示。 ...
5. **配置管理**:Struts2的配置管理是通过XML文件完成的,如struts-default.xml、struts-plugin.xml等,这些配置文件定义了全局行为和插件。开发者可以通过源代码理解配置是如何被解析并应用于实际操作中的。 6. *...
3. **com.opensymphony.xwork2.config**:配置管理模块,负责加载和解析配置文件,创建Action和Interceptor实例。这里包含了容器管理和依赖注入的相关实现。 4. **com.opensymphony.xwork2.spring**:如果项目集成...
在MyEclipse中选择项目,然后通过“add Hibernate capabilities”创建`hibernate.cfg.xml`配置文件,并自动生成`SessionFactory`类,如`com.softeem.s2sh.utils.HibernateSessionFactory`。 - 在`hibernate.cfg.xml...
它根据配置文件(如struts.xml)中的映射规则,找到对应的动作类并调用其执行方法。 2. **类型转换(Type Conversion)**:XWork提供了强大的类型转换机制,使得用户请求参数能自动转换为Action属性所需的类型。这...
- `struts-plugin.xml`:插件配置文件,用于加载特定插件并进行配置。 - `struts.xml`:应用级别的配置文件,定义Action、Package、Interceptor等具体配置。 3. **Action和结果类型**: - Action是业务逻辑的...
- **描述**:定义了一系列自动由Struts加载的配置文件。 - **示例**:配置文件可以包括 `struts-default.xml`, `struts-plugin.xml` 等等。 - **重要性**:这些文件包含了Struts框架的核心配置信息,包括但不限于...
struts自动加载的一个配置文件列表 struts.configuration.xml.reload Whether to reload the XML configuration or not 是否加载xml配置(true,false) struts.continuations.package The package containing ...
自定义Struts时,你需要创建自己的XML配置文件,比如`mystruts.xml`,这个文件将替代或扩展默认的配置,用来加载自定义的Action和拦截器。 2. **Action**: - Action是业务逻辑的载体,它接收用户请求并执行相应的...
在Struts2的核心配置文件struts-default.xml中,包含了框架的基本配置和默认行为,这个文件会被自动加载,无需显式地在struts.xml中包含。开发者可以通过覆盖这些默认配置来定制自己的行为。 关于Bean的配置,...
它们可以被用来打包多个类文件,使得开发者能够方便地分发和加载代码。XWork Core 1.10-beta1.jar作为Atlassian的组件,它的主要职责是提供一系列的核心服务,包括Action的执行、依赖注入、类型转换以及异常处理等。...