[size=small]实例讲解spring整合struts的几种方式
1,使用Spring 的 ActionSupport
2, 使用Spring 的 DelegatingRequestProcessor 类。
3,全权委托。
无论用那种方法来整合第一步就是要为struts来装载spring的应用环境。 就是在 struts 中加入一个插件。
struts-config.xml中
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
</plug-in>
spring 的配置文件被作为参数配置进来。这样可以省略对web.xml 文件中的配置。确保你的applicationContext.xml 在WEB-INF目录下面
1,使用Spring的ActionSupport .
Spring 的ActionSupport 继承至 org.apache.struts.action.Action
ActionSupport的子类可以或得 WebApplicationContext类型的全局变量。通过getWebApplicationContext()可以获得这个变量。
这是一个 servlet 的代码:
public class LoginAction extends org.springframework.web.struts.ActionSupport {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
//获得 WebApplicationContext 对象
WebApplicationContext ctx = this.getWebApplicationContext();
LoginDao dao = (LoginDao) ctx.getBean("loginDao");
User u = new User();
u.setName(loginForm.getName());
u.setPwd(loginForm.getPwd());
if(dao.checkLogin(u)){
return mapping.findForward("success");
}else{
return mapping.findForward("error");
}
}
}
applicationContext.xml 中的配置
<beans>
<bean id="loginDao" class="com.cao.dao.LoginDao"/>
</beans>
这中配置方式同直接在web.xml文件配置差别不大。注意:Action继承自 org.springframework.web.struts.ActionSupport 使得struts和spring耦合在一起。
但实现了表示层和业务逻辑层的解耦
(LoginDao dao = (LoginDao) ctx.getBean("loginDao"))
2,使用Spring 的 DelegatingRequestProcessor 类
DelegatingRequestProcessor 继承自 org.apache.struts.action.RequestProcessor 并覆盖了里面的方法。
sturts-config.xml 中
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/> 通过 <controller >来替代
org.apache.struts.action.RequestProcessor 的请求处理。
public class LoginAction extends Action {
//利用spring来注入这个对象。
private LoginDao dao ;
public void setDao(LoginDao dao) {
System.out.println("执行注入");
this.dao = dao;
}
public LoginDao getDao() {
return dao;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
//这样一改这行代码似乎没有必要了。
//WebApplicationContext ctx = this.getWebApplicationContext();
//LoginDao dao = (LoginDao) ctx.getBean("loginDao");
User u = new User();
u.setName(loginForm.getName());
u.setPwd(loginForm.getPwd());
//直接用dao来调用spring会将这个对象实例化。
if(dao.checkLogin(u)){
return mapping.findForward("success");
}else{
return mapping.findForward("error");
}
}
}
这里的。
LoginAction extends Action 说明 struts 每有和spring 耦合。
看一下
applicationContext.xml 中的配置。
<beans>
<bean id="loginDao" class="com.cao.dao.LoginDao"/>
<bean name="/login" class="com.cao.struts.action.LoginAction">
<property name="dao">
<ref local="loginDao"/>
</property>
</bean>
</beans>
这里 name="/login" 与struts 中的path匹配 class="com.cao.struts.action.LoginAction" 与struts 中的type匹配还要为 LoginAction 提供必要的setXXX方法。 获得ApplicationCotext和依赖注入的工作都在DelegatingRequestProcessor中完成。
3,全权委托:
Action 的创建和对象的依赖注入全部由IOC容器来完成。 使用Spring的DelegatingAcionProxy来帮助实现代理的工作
org.springframework.web.struts.DelegatingActiongProxy继承于org.apache.struts.action.Action .
全权委托的配置方式同 方式 2 类似 (applcationContext.xml文件的配置和Action类的实现方式相同)。
<struts-config>
<data-sources />
<form-beans >
<form-bean name="loginForm" type="com.cao.struts.form.LoginForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<!-- type指向的是spring 的代理类 -->
<action
attribute="loginForm"
input="login.jsp"
name="loginForm"
path="/login"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy" >
<forward name="success" path="/ok.jsp" />
<forward name="error" path="/error.jsp" />
</action>
</action-mappings>
<message-resources parameter="com.cao.struts.ApplicationResources" />
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
</plug-in>
</struts-config>
不同之处
1, <action>中 type指向的是spring 的代理类
2, 去掉struts-config.xml中 <controller >
三种整和方式中我们优先选用全权委托的方式。
理由:
1,第一种使得过多的耦合了Spring和Action .
2,RequestProcessor类已经被代理 如果要再实现自己的实现方式(如:编码处理)怕有点麻烦。
总结一下:
整合工作中的步骤:
1,修改struts-config.xml
2, 配置applicationContext.xml
3, 为Action添加get/set方法 来获得依赖注入的功能。
[/size]
分享到:
相关推荐
本讲解将深入探讨如何将Spring集成到Struts中,以实现更好的控制反转(IoC)和面向切面编程(AOP)。 Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,主要用于处理HTTP请求和展示视图。它...
标题 "小项目框架改造二:spring3.2.4+struts2.1.8+mybatis3.2.6整合修改" 提供了一个关于整合老旧但仍然广泛使用的Java Web开发框架的场景。这个项目涉及了Spring、Struts2和MyBatis三个核心组件的集成与优化。下面...
总之,Struts2和Spring的整合提供了一种强大的方式来构建灵活、可扩展和易于测试的Java Web应用。通过利用Spring的IoC容器,我们可以更好地控制对象的生命周期,降低组件间的耦合,提高代码的可维护性。
- 通常,一个简单的Struts 2与数据库连接的实例会包含以下几个部分:配置DataSource、创建DAO类、编写Action类、处理结果映射、异常处理以及整合ORM框架的配置。 通过以上讲解,我们可以看到Struts 2与数据库连接...
6. **SSH整合**:展示如何在Spring中配置Struts2和Hibernate,使它们能够无缝协作,如Spring管理Struts2的Action,以及Spring与Hibernate的事务管理集成。 7. **实战案例**:通过一个简单的Web应用实例,演示SSH...
本节详细介绍了几种常见的整合方式: - **给Action类加入message属性** (11.7.1): 在Action类中添加属性,通过Spring进行管理。 - **在Struts配置文件中加入Spring配置信息** (11.7.2): 将Spring的配置信息融入...
它整合了多种开源项目,如Tiles、FreeMarker和OGNL,提供了一种优雅的方式来组织和管理应用的业务逻辑、视图和控制层。Struts2的Action类是控制器的核心,负责处理用户请求,并通过Result将响应返回给客户端。同时,...
在**JSF实例讲解**中,我们通常会涵盖以下几个关键知识点: 1. **JSF架构**:JSF应用由UI组件、事件处理、渲染器、生命周期和状态管理等部分组成。JSF使用MVC(Model-View-Controller)设计模式,其中模型负责业务...
Struts 2是Java Web开发中的一个强大框架,它基于MVC(Model-View-Controller)设计模式,为开发者提供了一种结构化和可扩展的方式来构建动态网站应用程序。该框架结合了Struts 1和WebWork的优势,提供了更加灵活和...
SSH框架整合是Java Web开发中常见的一种技术组合,它由Spring、Struts2和Hibernate三个开源框架构成。Spring提供依赖注入(DI)和面向切面编程(AOP),Struts2作为MVC框架负责控制层,而Hibernate则作为对象关系...
7. **Struts2与其他框架集成**:由于标签中提到了SSH和Spring,教程可能会讲解如何结合Hibernate进行持久化操作,以及如何通过Spring插件实现依赖注入和事务管理。 "打开方式.htm"可能是一个网页,提供了如何阅读和...
- **视图技术**:Struts2支持的几种视图技术比较。 - **模板引擎集成**:如何集成如Freemarker等模板引擎。 #### 十二、集成AJAX - **12.1 JSON概述**:JSON格式的基本概念及其优势。 - **12.2 JSON-RPC概述**:...
SSH整合是指Spring、Struts2和Hibernate这三大Java开源框架的集成应用,它们共同构建了一个强大的企业级Web应用程序开发框架。下面将详细讲解这三个框架的核心功能、如何进行整合以及相关jar包的作用。 **Spring...
8. ** strut2与Spring整合**:讲解如何将Struts2与Spring框架集成,实现依赖注入,提高应用的可维护性和可测试性。 9. **异常处理**:讨论Struts2中的异常处理机制,如何配置全局异常映射,以及如何在Action中捕获...
SSH框架整合是Java Web开发中常见的一种技术组合,主要包括Spring、Struts2和Hibernate三个开源框架。本示例提供了一个简单易懂的SSH框架整合应用,适用于初学者学习和实践。 **Spring框架**:Spring是一个全面的...
6. **Spring集成其他框架**:Spring3加强了与其他流行框架的集成,如Struts、JSF、Hibernate、EJB等,使得开发者能够在不同的技术栈中使用Spring的优势。 7. **Spring测试**:Spring3提供了丰富的测试支持,包括...
本实例将详细讲解如何使用S2SH(Struts2.3.4 + Spring3.1.1 + Hibernate3.3.2)实现一个简单的登录和注册功能。 首先,Struts2是一个基于MVC设计模式的Java Web框架,它提供了对HTTP请求的处理,以及视图和控制器的...
《Struts应用开发完全手册》是一本深入探讨Struts框架的书籍,提供了丰富的实例和详细讲解,帮助开发者全面理解和掌握Struts的核心概念和技术。 书中可能涵盖了以下几个关键知识点: 1. **MVC模式**:MVC模式是一...
- **Chapter 9**:可能讲解Spring与数据访问的整合,如使用JDBC、JPA或MyBatis进行数据库操作,并涉及事务管理。 - **Chapter 10**:可能涉及Spring的单元测试和集成测试,使用JUnit、Mockito等工具进行测试驱动...