`

关于struts2中自动加载模块的struts2的配置文件解决方案

 
阅读更多

  在大的项目的开发中,如果采用了struts2,就有可能有很多的struts2的配置文件,虽然struts2提供通配符和action的自动加载,但我们一般还是很难将所有的配置文件采用一个单一的action配置文件来解决,因此就产生了很多的action配置文件。如果我们将所有的配置文件存放在一个配置文件中,这样在项目间的协同开发和测试就会出现混乱,而最好的开发模式就是每个模块都有自己的action配置文件,而系统会自动搜索到所有的配置文件,采用自动加载的方式来完成struts2的初始化。
虽然在struts2中提供在web.xml文件中配置config参数,将说有需要加载的配置文件的路径写在其中,以逗号分隔,这样对于大的项目来说还是很难实施的,最好的办法还是采用自动扫描的方法,我们可以扩展struts2的ConfigurationProvider接口,在web.xml中配置自定义的加载类即可,这样就解决了struts2配置文件自动加载的问题,具体的实现代码如下:
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import com.opensymphony.xwork2.config.ConfigurationException;

import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
import com.opensymphony.xwork2.inject.ContainerBuilder;
import com.opensymphony.xwork2.util.location.LocatableProperties;

/**
* 解决struts2中自动加载模块的struts的配置文件
* <p>注意:模块的配置文件必须为*-struts.xml <p>
* @author Wall.Lee(xiaoshan2242@gmail.com)
*/
public class CutomConfigurationProvider extends XmlConfigurationProvider {
private static final String FILE_PATTERN = "classpath*:/**/*-struts.xml" ;

public CutomConfigurationProvider(){
Map<String, String> mappings = new HashMap<String, String>();
mappings.put("-//OpenSymphony Group//XWork 2.1.3//EN", "xwork-2.1.3.dtd");
mappings.put("-//OpenSymphony Group//XWork 2.1//EN", "xwork-2.1.dtd");
mappings.put("-//OpenSymphony Group//XWork 2.0//EN", "xwork-2.0.dtd");
mappings.put("-//OpenSymphony Group//XWork 1.1.1//EN", "xwork-1.1.1.dtd");
mappings.put("-//OpenSymphony Group//XWork 1.1//EN", "xwork-1.1.dtd");
mappings.put("-//OpenSymphony Group//XWork 1.0//EN", "xwork-1.0.dtd");
mappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.0//EN", "struts-2.0.dtd");
mappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.1//EN", "struts-2.1.dtd");
mappings.put("-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN", "struts-2.1.7.dtd");
setDtdMappings(mappings);
}

/* (non-Javadoc)
* @see com.opensymphony.xwork2.config.ContainerProvider#needsReload()
*/
@Override
public boolean needsReload() {
return true;
}

/* (non-Javadoc)
* @see com.opensymphony.xwork2.config.ContainerProvider#register(com.opensymphony.xwork2.inject.ContainerBuilder, com.opensymphony.xwork2.util.location.LocatableProperties)
*/
@Override
public void register(ContainerBuilder containerBuilder, LocatableProperties props) throws ConfigurationException {
super.register(containerBuilder, props) ;
}

/* (non-Javadoc)
* @see com.opensymphony.xwork2.config.PackageProvider#loadPackages()
*/
@Override
public void loadPackages() throws ConfigurationException {
super.loadPackages() ;
}

@Override
protected Iterator<URL> getConfigurationUrls(String fileName) throws IOException {
List<URL> urls = new ArrayList<URL>() ;
Resource[] resources = getAllResourcesUrl() ;
for(Resource resource : resources ){
urls.add( resource.getURL()) ;
}

return urls.iterator() ;
}

/**
* 获取系统中需要搜寻的struts的配置
* @return
* @throws IOException
*/
private Resource[] getAllResourcesUrl() {
ResourcePatternResolver resoler = new PathMatchingResourcePatternResolver() ;
try {
return resoler.getResources(FILE_PATTERN) ;
} catch (IOException e) {
e.printStackTrace();
}
return new Resource[0];
}
}

然后在web.xml中添加如下的代码:
<!-- struts2的入口开始 -->
<filter>
<filter-name>struts-prepare</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
<init-param>
<param-name>configProviders</param-name>
<param-value>com.jtv.walllee.utils.auto.CutomConfigurationProvider</param-value>
</init-param>
</filter> 

分享到:
评论

相关推荐

    Struts2各配置文件详解.doc

    在Struts2中,配置文件起着至关重要的作用,它们定义了框架的行为、拦截器、对象工厂、类型检测以及动作映射等关键组件。下面将详细解析Struts2的主要配置文件。 1)struts-default.xml 这是Struts2框架默认加载的...

    struts2配置文件

    在Struts2中,配置文件的主要元素包括: - ****:定义了一个包,包是动作和拦截器的容器。每个包可以包含多个动作和子包,并且可以继承其他包的配置。 - ****:定义了一个具体的操作,包括操作名称、类、结果等...

    Struts2初步使用总结

    - **StrutsPrepareAndExecuteFilter**:这是Struts2的主要过滤器,负责加载配置文件、处理请求等核心工作。 **3.2 拦截器(Interceptor)** 拦截器是Struts2框架的核心组件之一,用于实现特定的功能,如输入验证、...

    struts2和Spring整合需要的jar包

    Struts2是一个MVC(Model-View-Controller)框架,主要用于控制应用程序的流程,而Spring则是一个全面的后端解决方案,包括依赖注入、AOP(面向切面编程)、事务管理等。将这两个框架整合在一起,可以充分利用它们...

    Struts2, Spring与myBatis整合示例项目

    Struts2和MyBatis的配置信息通常会整合到Spring的配置文件中,以实现整体的统一管理和控制。 项目结构通常如下: - src/main/java:存放业务逻辑类、DAO接口及实现、Struts2 Action类。 - src/main/resources:存放...

    WebSphere Application Server下Struts2.0无法使用解决方案

    确保`web.xml`文件中的Struts2 Filter配置是正确的。一个有效的Struts2 Filter配置示例如下: ```xml &lt;filter-name&gt;struts2 &lt;filter-class&gt;org.apache.struts2.dispatcher.filter....

    SSH.rar_s2sh_ssh struts2_ssh+mysql_struts2 hibernate_struts2 mys

    全称为"Struts2 + Spring + Hibernate",它结合了Struts2的MVC设计模式、Spring的IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)以及Hibernate的持久层解决方案,提供了...

    struts2_spring_mybatis

    这三个框架分别在应用程序的层管理、MVC模式实现和数据访问层有着各自的优势,组合使用可以提供一个完整的解决方案。 1. **Spring框架**:Spring是一个全方位的轻量级应用框架,它提供了IOC(Inversion of Control...

    Felix 和 Struts2 开发 Web 应用

    5. 部署bundle:将Struts2的bundle部署到Felix容器中,容器会自动解析并加载配置,使Web应用可以正常运行。 在压缩包"Struts2.1.8ToFelix1.4"中,可能包含了Struts2版本1.8和Felix版本1.4的库文件和其他相关资源。...

    Spring整合Struts

    ContextLoaderPlugin是Spring为Struts设计的一个插件,它能够加载一个Spring配置文件,该文件指向由ContextLoaderListener加载的根WebApplicationContext作为其父上下文。默认情况下,配置文件的名称是映射的servlet...

    Struts2教程

    - **核心配置文件**:默认情况下,Struts2会加载struts.xml文件,其中可以定义拦截器、结果类型等配置。 - **扩展配置**:可以为不同的模块单独配置struts.xml文件,便于管理和维护。 **3. struts.properties** - ...

    采用共享jar包部署struts2+spring集成项目会遇到的问题

    3. **资源冲突**:例如,Struts2的配置文件(struts.xml)或Spring的配置文件(applicationContext.xml)可能在共享环境中发生冲突。 为了解决这些问题,可以采取以下策略: 1. **使用容器级别的隔离**:在应用...

    struts2 运行库 jar包

    在Struts2中,模型负责业务逻辑,视图负责展示数据,而控制器则处理用户请求,协调模型和视图之间的交互。 3. **运行库**: "运行库"是指一组在程序运行时必需的库文件,包含了一系列类和接口,它们是程序执行的...

    Struts2所需jar包

    而`struts.xml`是Struts2的核心配置文件,它定义了应用的各个部分,包括Action、结果类型、拦截器栈等。`web.xml`是Servlet容器的部署描述符,它包含了Struts2的初始化参数和过滤器配置,确保Struts2能正确地拦截...

    struts2

    Struts2的核心优势在于其对开发人员的友好性,通过简化配置文件、利用拦截器与IOC技术,极大地降低了开发负担,尤其是文件上传这类繁琐任务的处理更为便捷。 #### 12.1 Struts2简介 Struts2是一个开源的Web应用...

    struts2 spring2 hibernate3 ajax 整合的一个小项目

    - 配置文件:包括Struts2的配置文件(struts.xml)、Spring的配置文件(applicationContext.xml)、Hibernate的配置文件(hibernate.cfg.xml)等,定义组件间的依赖关系和行为。 通过整合这些技术,开发者能够构建...

    Spring,hibernate,struts jar 最新jar包

    例如,Spring的核心库spring-context、spring-web等,Hibernate的orm和ejb3-persistence模块,以及Struts2的核心库struts2-core、struts2-spring-plugin等。这些JAR文件是运行SSH框架项目的基础,需要按照正确的顺序...

Global site tag (gtag.js) - Google Analytics