webwork宣称是支持模块化编程的,诚然,由于webwork支持多个配置文件,我们在开发不同模块的时候,可以使用不同的配置文件,然后,在整合的时候通过include把不同的模块包含在class根目录下的xwork.xml里面。
但是,这种做法不太好。首先,他限制我们必须在classes根目录下放一个xwork.xml,然后,我们添加一个模块的时候,必须在添加相应xwork配置文件的同时,在xwork.xml里面需要添加include,这样,整体依赖于部分,最后,当我们去掉一个模块的时候,我们必须再次删除xwork配置文件,去掉xwork.xml里面的include,何况,我们一个模块,除了xwork,还有其他的配置文件,比如,wsh(webwork+spring+hibernate)的配置文件,除了xwork,还有spring的,hibernate的,如下:
/swconf/spring.xml,xwork.xml
/amod/spring/ xxx.xml……
/hbm/xxx.hbm.xml……
/xwork/xxx.xml……
/bmod/spring/ xxx.xml……
/hbm/xxx.hbm.xml……
/xwork/xxx.xml……
我们希望,添加a模块时,只需要添加amod目录,去掉a模块时,只需要去掉amod目录。
这样实现按目录的autoaware的模块化编程。
spring的很简单,使用ClasspathXmlApplicationContext很容易实现。
hibernate的也能实现,改写LocalSeesionBeanFactory就可以了。
我们现在要讨论的是如何实现xwork的。
首先,实现自己的ConfigurationProvider:
public class MoudleXmlConfigurationProvider implements ConfigurationProvider{
。。。。。。
public MoudleXmlConfigurationProvider(List configFileNameList) {
this.configFileNameList = configFileNameList;
}
public void init(Configuration configuration) {
this.configuration = configuration;
includedFileNames.clear();
try{
for(int i=0,len=configFileNameList.size();i<len;i++){
//includedFileNames.clear();
String configFileName=(String)configFileNameList.get(i);
this.configFileName=configFileName;
loadConfigurationFile(configFileName, null);
//includedFileNames.add(configFileName);
}
} catch (Exception e)
{
LOG.fatal(
"Could not load XWork configuration file, failing:" + e);
throw new ConfigurationException(
"Error loading configuration file " + configFileNameList,
e);
}
}
。。。。。。
}
使用listener在web应用启动时,或者在testcase setup时调用:
LOG.info("begin init xwork provider");
List xworkConfigFileList=new ArrayList();
String[] fileList= ResourceFinder.getXwork();
//ResourceFinder.getFile("classpath*:/swconf/**/*webwork.xml");
for(int i=0,len=fileList.length;i<len;i++){
//includedFileNames.clear();
xworkConfigFileList.add(fileList[i]);
}
ConfigurationProvider configurationProvider=new MoudleXmlConfigurationProvider(xworkConfigFileList);
ConfigurationManager.addConfigurationProvider(configurationProvider);
LOG.info("end init xwork provider");
这里使用了ResourceFinder类,为了方便,使用spring实现的:
public class ResourceFinder {
。。。。。。
public static String[] getXwork(){
String[] list=getFile("classpath*:/swconf/**/xwork/*.xml");
String[] allList = new String[list.length+1];
allList[0]= "swconf/xwork.xml";
for(int i=0;i<list.length;i++){
allList[i+1]=list[i];
}
return allList;
}
private static String[] getFile(String regString){
String[] resouceArray=null;
try {
ResourcePatternResolver rpr=new PathMatchingResourcePatternResolver();
Resource[] rs=rpr.getResources(regString);
if(rs==null){
return null;
}
resouceArray=new String[rs.length];
int i=0;
for(Resource c:rs){
String realPath=c.getURL().getPath();
String xdpath=realPath.substring(realPath.indexOf("classes")+8);
resouceArray[i]=xdpath;
i++;
LOG.info("-------------"+xdpath);
}
} catch (IOException e) {
LOG.error("error in find resource",e);
}
return resouceArray;
}
}
这样,就可以了。
从实现上,可以看到,webwork底层的实现是比较槽糕的,如果想更改他的缺省实现,费老劲了。不如tapestry,使用hivemind,可插拔式的,对他的任何实现不满,改写一下,一个implemention配置就覆盖原来的实现,方便死了
分享到:
相关推荐
`web.xml`则是标准的Servlet配置文件,虽然在WebWork中主要用来引导WebWork的初始化,但它也包含一些关键的WebWork配置: 1. **Servlet配置**:你需要配置`ActionServlet`,它是WebWork的核心Servlet,负责处理HTTP...
### 如何实现WebWork+Spring+Hibernate框架...通过这种方式,不仅可以实现模块化的开发,还可以提高代码的复用性和维护性。当然,具体实现时还需要考虑异常处理、日志记录等方面的内容,以确保系统的稳定性和安全性。
WebWork框架经历了从紧耦合设计向模块化设计的重大转变,特别是从1.x版本过渡到2.x版本时。在WebWork2中,框架被拆分为了两大部分:Webwork2.x和XWork1.x,这一设计上的革新极大地提升了系统的灵活性和可扩展性。 #...
在Web开发领域,它提供了一种结构化和模块化的开发方式,帮助开发者更高效地组织代码并实现业务逻辑。本指南将深入探讨WebWork2的基础知识、快速入门方法以及高级特性,以帮助开发者更好地理解和应用这一框架。 一...
总结来说,WebWork的IoC机制通过配置文件实现了对象的实例化、依赖注入、工厂方法以及拦截器链的定义,从而降低了代码的耦合度,提高了组件的复用性。通过这种方式,开发者可以更专注于业务逻辑,而不是对象的创建和...
WebWork 2.0与Spring框架的集成是另一个重要的方面,Spring作为Java领域最流行的依赖注入框架之一,其与WebWork的结合能够进一步增强应用的模块化和灵活性。通过Spring的依赖注入功能,可以更方便地管理和配置...
它专注于组件化设计和代码重用,能够帮助开发者构建更加模块化和可维护的应用程序。 - **发展历程**:WebWork经历了多个版本的迭代和发展。当前讨论的是WebWork 2.x,其前身是Rickard Oberg开发的版本,之后被拆分...
2. **拦截器(Interceptor)**:拦截器是WebWork的一大特色,它允许在动作执行前后插入自定义逻辑,如登录检查、事务管理等,提高了代码的复用性和模块化。 3. **模型-视图-控制器(MVC)**:WebWork遵循MVC设计...
9. **Spring 与 WebWork 的协同工作**:WebWork 处理用户的请求和视图展现,Spring 负责业务服务和数据访问层,两者结合可以构建出松耦合、模块化的应用架构。 总的来说,Spring 和 WebWork 的集成是通过共享同一个...
与传统的Servlet模型相比,WebWork提供了一个更加模块化和可扩展的框架,使得开发者能够更容易地管理和维护大型Web应用程序。 ### WebWork框架的组成部分 #### 1. **配置文件**:WebWork使用XML配置文件来定义应用...
- **国际化支持**:WebWork框架支持多语言环境,可以通过配置文件轻松实现应用程序的国际化。 - **插件体系结构**:WebWork框架采用了插件体系结构,允许开发人员根据需要添加或替换功能模块,增强了框架的可扩展性...
WebWork2是一个基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序中起到了核心架构的作用。WebWork的工作机制分为框架初始化和用户请求处理两个主要...这种设计模式使得Web应用程序更加模块化,易于维护和扩展。
拦截器的使用使得代码更加模块化,提高了可维护性。 **5. 错误和异常处理** WebWork提供了优雅的错误和异常处理机制。它可以捕获运行时错误,将其转换为用户友好的错误页面,并提供统一的错误处理策略。 **6. 支持...
4. **oscore.jar**:OpenSymphony OSGi(Open Services Gateway Initiative)是一个开源的Java服务平台,用于创建模块化、可扩展的应用。在WebWork2.0中,OSCore可能用于实现服务组件的管理和部署,使应用更加灵活...
WebWork深入浅出:WebWork是一个由OpenSymphony组织开发的J2EE Web框架...总的来说,WebWork是一个强大的Web开发框架,它提供了丰富的功能来解决Web层常见的问题,帮助开发者构建高效、模块化且易于维护的Web应用程序。
结合注解的使用,这三个框架能够实现高度模块化和简洁的代码结构,提高开发效率和代码可维护性。以下是对这些知识点的详细讲解: 1. **WebWork**: - WebWork是一个基于Action的MVC框架,它提供了强大的Action支持...
6. **WebWork配置**:配置web.xml,设置过滤器和监听器,指定WebWork的配置文件路径。 7. **动作类和控制器**:编写WebWork的动作类,实现业务逻辑,并通过Spring的@Autowired注解注入依赖。 8. **数据库操作**:...
SSH(Spring、Struts、Hibernate)或WSH(Webwork、Spring、Hibernate)集成是Java企业级应用开发的常见实践,旨在构建高效、模块化且易于维护的系统。 首先,Webwork是Action-based的MVC框架,它的核心在于Action...
1. MVC模式:WebWork2 遵循MVC架构,将业务逻辑、数据模型与用户界面分离,使得开发更加模块化。控制器(Controller)负责处理请求,模型(Model)处理数据,视图(View)负责展示结果。 2. 动作(Action):在...