Spring是一个轻量级(大小和系统开支的角度)的IoC和AOP容器。它力图简化
J2EE开 发即J2EE without EJB。而且作为帮助企业级开发的核心支柱,Spring为模型层(OR持久层:Hibernate、JDO、iBatis等)服务层(EJB、 JNDI、WebService)以及表现层(Struts、JSF、Velocity)都提供了良好的支持和集成方案。
Jakarta-Struts是Apache软件组织提供的一个开源项目。它为Java Web应用提供了基于Model-View-Controller的MVC框架,尤其适用于开发大型可扩展的Web应用。尽管基于Java的MVC框架层出不穷,事实上Spring的MVC模型也提供了驱动应用系统Web层的能力,但Jakarta-Struts仍然是所有这些框架中的佼佼者。
下面,将如何整合这两个J2EE领域的经典项目给出两套详尽的集成方案。
1.首先我们来看一个Spring-Struts整合应用下的控制器Action类源代码。
<ccid_code>public class CourceAction extends Action { private CourceService courceService; public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { Set allCources = courceService.getAllCources(); //..........the other statements request.setAttribute("cources", allCources); return mapping.findForward("jspView"); } }</ccid_code>
|
|
分析:CourceService为一个业务实现的接口,此接口声明了一系列的业务处理方法。该方法的实现配置为Spring上下问的一个Bean。由此看来,我们大家都可能会产生一个疑问:Struts action如何取得一个包含在Spring上下文中的Bean呢?为了回答这个问题,Spring提供了两种与Struts集成的方式:
(1).从一个知晓Spring上下文的基类派生我们自己的Struts Action类。然后,在派生类中就可以使用super.XX()方法来获得一个对Spring受控Bean的引用。
(2).将请求委托给作为Spring Bean管理的Struts Action来处理。
2.注册Spring插件:
为了使Struts Action能够访问由Spring管理的Bean,我们就必须要注册一个知道Spring应用上下文的Struts插件。可以在struts-config.xml中通过如下的方式来完成注册。
<ccid_code><plug-in classname="org.springframework.web.struts.ContextLoadPlugin">
<set-property property="contextConfigLocation" value="WEB-INF/Yhcip.xml,......">
</set-property>
</ccid_code>ContextLoadPlugin()负责装载一个Spring应用上下文。(具体的说:是一个WebApplicationContext)。value属性值为要加载的配置Spring受控Bean的xml文件的URI。
3.完成第一种集成方案:实现一个知晓Spring的Action基类。
这种集成方案是从一个公共的能够访问Spring应用上下文的基类中派生所有的Struts Action,但值得庆幸的是:我们不用自己去编写这个知晓Spring应用上下文的基类,因为Spring已经提供了 org.springframework.web.struts.ActionSupport:一个 org.apache.struts.action.Action的抽象实现。它重载了setServlet()方法以从 ContextLoaderPlugin中获取WebapplicationContext。因此,任何时候我们只需要调用super.getBean ()方法即可获得一Spring上下文中的一个Bean的引用。
我们再来看一段Action源代码:
<ccid_code>public class CourceAction extends ActionSupport { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //取得Spring上下文 ApplicationContext context = super.getWebApplicationContext(); //取得CourceService Bean CourseService courseService = (CourseService) context.getBean("courseService"); Set allCources = courceService.getAllCources(); request.setAttribute("cources", allCources); //..........the other statements. return mapping.findForward("jspView"); }}</ccid_code>
|
|
分析:这个Action类由ActionSupport派生,当CourceAction需要一个Spring受控Bean时:它首先调用基类 的getWebApplicationContext()方法以取得一个Spring应用上下文的引用;接着它调用getBean()方法来获取由 Spring管理的courceService Bean的一个引用。
小结
至此,我们已经用第一种方案圆满的完成了Spring与Struts的集成工作。这种集成方式的好处在于直观简洁容易上手。除了需要从 ActionSupport中派生,以及需要从应用上下文中获取Bean之外,其他都与在非Spring的Struts中编写和配置Action的方法相 似。但这种集成方案也有不利的一面。最为显著的是:我们的Action类将直接使用Spring提供的特定类,这样会使我们的Struts Action(即控制层)的代码与Spring紧密耦合在一起。这是我们不情愿看到的。另外,Action类也负责查找由Spring管理的Bean,这 违背了反向控制(IoC)的原则。
分享到:
相关推荐
1. **Struts2框架相关**: struts2-core、struts2-convention、struts2-spring-plugin等,用于实现MVC模式和与Spring的集成。 2. **Spring框架相关**: spring-context、spring-beans、spring-web、spring-webmvc等,...
通过对Struts、Spring和Hibernate等技术的研究与实践应用,构建了一个高效、稳定的测试库管理系统,证明了SSH框架的有效性和适用性。这对于进一步推广和应用SSH框架于更多项目中具有重要的参考价值。
Spring框架提供了依赖注入(IoC)和面向切面编程(AOP),并能与其他框架(如Struts和Hibernate)无缝集成,为复杂的企业级应用提供了一个轻量级的解决方案。 论文深入研究了SSH框架的特性,并结合一个小型服装企业...
- **高可用性**:Kaptcha支持多种Web框架,如Spring、Struts等,易于集成到现有项目中。 - **高效性能**:验证码生成速度快,对服务器资源占用低,适合高并发场景。 - **安全性**:通过复杂的图像处理技术,使...
使用s2sh(Struts2、Spring、Hibernate)架构,证明他对集成开发有深入了解。 总的来说,徐先生的简历展示了他在JavaEE开发领域的全面技能,包括核心编程、Web开发、数据库管理以及项目实施经验,这些都是成为优秀...
本项目采用Java EE作为开发基础,利用Struts2、Spring和Hibernate组成的SSH框架进行业务逻辑和数据访问层的处理。Struts2提供MVC(模型-视图-控制器)架构模式,Spring为系统提供依赖注入和事务管理,Hibernate则...
【总结】基于SSH的客户关系管理系统是一个集成了现代软件工程理念和技术的高效解决方案,它为企业提供了全面的客户关系管理工具,有助于企业提升业务效率,优化客户体验,最终实现商业目标。通过深入研究和实践,该...
2. **背景与意义**:强调了随着网络技术的发展,传统的问卷调查方式已无法满足需求,在线问卷调查系统能提供更便捷、高效的解决方案,尤其在数据分析和反馈处理方面。 3. **论文结构**:通常包括引言、相关技术介绍...
熟悉一些主流的J2EE框架,如Spring、Struts、Hibernate等。这些框架简化了许多复杂的开发任务,使得开发者可以专注于业务逻辑的实现。 ### 十、持续学习和适应新技术 #### 10.1 技术更新迭代 随着技术的快速发展...