记得前些日子帖过一个大骂webwork2.2.4的帖子,其实那个问题后来解决了,为什么会突然说这个对于已经是古老的问题呢?同事今天迁移平台代码,发现原来的那套程序怎么跑都是不能用,他开始搜索gg,居然找到了我的blog,我这才想起来我痛苦的那几日,为了不让其他xdjm犯同样的错误,所以决定仔细分析下,告诉大家来龙去脉,搞定webwork2.2.x和spring的整合功能。
首先回放下问题:
ERROR [http-8080-Processor25] (DispatcherUtils.java:237) - Could not execute act
ion
java.lang.NullPointerException
at com.opensymphony.webwork.spring.interceptor.SessionContextAutowiringI
nterceptor.findAutoWiringBeanFactory(SessionContextAutowiringInterceptor.java:68
)
at com.opensymphony.webwork.spring.interceptor.SessionContextAutowiringI
nterceptor.before(SessionContextAutowiringInterceptor.java:57)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(Around
Interceptor.java:30)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionIn
实际上这个问题简单描述为:当webwork启动spring交互时却发现spring的上下文是一个空值,怎么会呢?问题就出在webwork2.2.4最新的整合代码里,之前的版本至少2.2.2是需要另外cp一个jar包才能进行这种全整合的,而2.2.4的新特性之一就是已经整合在了webwork里,但这恰恰是场恶梦。原因来自于他的一个代码缺陷。
其实webwork的整合原来很简单,利用webwork的拦截器,首先他从内存获得spring的上下文,然后当得到actionbean的名字之后就从spring也得到这个注入bean的内容,然后利用其中的属性拷贝类,把spring内的内容复制到action上,就完成了所谓的整合。
首先看webwork2.2.4的源代码:
Map session = invocation.getInvocationContext().getSession();
ApplicationContext applicationContext = (ApplicationContext) session.get(ApplicationContextSessionListener.APP_CONTEXT_SESSION_KEY);
大概意思就是从session中取得了context,不过他的方法是从拦截器里取得的,但这个方法鉴定下来是不行的,造成了applicationContext是一个Null!我们之前的错误也是这里引起的。
我参考了之前使用的一个webwork植入spring的类,其实方法完全一样,也是通过取得上下文,然后利用beanuntilcopy属性到action这样的方法,下面来看看我修正过的代码:
Map session = invocation.getInvocationContext().getSession();
ApplicationContext applicationContext = (ApplicationContext)ActionContext.getContext().getApplication().get(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
如此简单就ok其实就是这个session对象的名字,我是参考了spring本身的webuntil里的写法改写的,这个应该不会有任何问题。
现在覆盖上去看看是否ok了?问题解决。
ps:webwork是好东西几次想封装webwork的action都失败了,说明webwork已经把能想到的方便都做了,也就没有需要封装的内容。不过他的bug也是比较多的至少明显比spring hibernate这种流行框架多,当然也许是太复杂了,没有用好吧:)
分享到:
相关推荐
最近在做个项目,用的是webwork+spring+hibernate,在网上看了不少webwork+spring的配制方式,大多都是老的配制方式,比如2.1.7的,webwork2.2.4新加了很多功能,和spring的配制也简单了很多,我做了一个简单的登录...
webwork2.2.4架包帮助学习
2. 与SpringMVC:虽然两者都是MVC框架,但WebWork更注重轻量级和开发效率,而SpringMVC则集成了更多Spring生态的特性。 六、WebWork进阶 1. AOP(面向切面编程):WebWork的拦截器机制是AOP的一种实现,可以扩展出...
WebWork2.2.4是该框架的一个版本,它包含了用于构建动态Web应用程序所需的核心组件和库。 **WebWork的核心特性** 1. **动作映射(Action Mapping)**:WebWork通过动作映射来处理HTTP请求,将URL与特定的Java类...
WebWork框架与Spring框架的集成便是一个典型示例,它结合了WebWork在MVC架构方面的优势与Spring在依赖注入(DI)和面向切面编程(AOP)方面的能力,为开发者提供了更为灵活和强大的解决方案。本文将深入探讨WebWork...
WebWork2.1 与 Spring 框架的集成是一个常见的技术实践,目的是利用 Spring 提供的依赖注入(DI)和面向切面编程(AOP)能力,以及 WebWork 的优秀动作层管理,来构建更加灵活和解耦的Java Web应用。在集成过程中,...
Webwork、Spring和Hibernate是Java开发中的三大框架,它们各自在不同的层面上为应用程序提供服务。Webwork负责处理用户交互,Spring提供依赖注入和管理事务,而Hibernate则专注于对象关系映射(ORM),使得数据库...
用于集成WebWork2.1和Spring的一个jar文件,编译级别jdk1.4, 已测试过,可以整合
这样的组合可以充分利用各框架的优势,如WebWork的Action管理、Spring的依赖注入和事务管理以及Spring MVC的MVC架构。 【描述】:这个项目旨在帮助开发者了解和学习如何在实际开发中结合使用这三个框架。WebWork2.2...
"webwork2.2.4%2Bspring%2Bhibernate"可能是一个包含了整合WebWork 2.2.4、Spring和Hibernate配置的子目录或文件,这通常包括配置文件(如web.xml、struts-config.xml等)、类库和可能的示例代码,帮助开发者快速...
6. **国际化和本地化**:Spring和WebWork都支持国际化和本地化,它们可以协同工作,为用户提供多语言的应用体验。 7. **视图解析**:虽然WebWork主要关注控制器层,但通过Spring,可以方便地集成各种视图技术,如...
Spring 和 WebWork 的集成是将 Spring 框架的依赖注入和管理能力与 WebWork(现在是 Struts 2 的一部分)的 MVC 框架相结合的过程。这种集成允许开发者利用 Spring 提供的服务,如数据访问对象(DAO)、业务服务以及...
整合WebWork和Spring的主要目的是将WebWork的MVC能力和Spring的IoC/DI以及企业服务集成到一个应用中。这样,开发者可以利用WebWork的动态控制层与Spring的强大持久层和事务管理功能,实现更加高效的开发流程。 在这...
webwork2.24+spring2.0+hibernate3.1三框架整合使用
- **Spring与WebWork集成**:通过Spring作为WebWork的IoC容器,可以更方便地管理Action对象及其依赖关系,提高代码的可测试性和可维护性。 - **Hibernate与Oracle集成**:利用Hibernate作为持久层框架,可以简化与...
综上所述,这个压缩包包含了构建一个基于Webwork2.2.7、Spring和Hibernate的MVC应用,同时集成了MySQL数据库和Junit4测试所需的所有基础库。开发者可以利用这些工具快速搭建开发环境,进行高效、稳定的应用程序开发...
标题中的“spring和webwork包”指的两个著名的Java Web框架——Spring框架和WebWork框架。Spring是一个全方位的开源框架,主要用于简化企业级Java应用的开发,它强调了依赖注入(Dependency Injection,DI)和面向切...
WebWork和Spring是两个在Java Web开发中广泛使用的框架,它们各自有其独特的优势,并且可以结合使用以增强应用的功能和可维护性。本项目"webwork-register.rar"显然是一个基于WebWork和Spring构建的注册管理系统,让...
WebWork、Spring 和 iBATIS 是三个非常重要的Java Web开发框架,它们的组合为初学者提供了丰富的学习资源。WebWork 是一个MVC(Model-View-Controller)框架,Spring 是一个全面的后端开发框架,而 iBATIS 是一个...
《WebWork.Spring.Hibernate整合开发网络书城》这个主题涵盖了三个关键的技术框架:WebWork、Spring和Hibernate。这些技术在现代企业级Java应用开发中扮演着至关重要的角色,特别是对于构建复杂的、数据驱动的Web...