本文是在http://hnzhoujunmei.iteye.com/admin/blogs/1004838的项目基础上添加spring功能的。
spring整合struts有3中方法:
(1)使用spring的ActionSupport类整合struts。
(2)使用spring的DelegatingRequestProcessor覆盖struts的RequestProcessor。
(3)将struts Action委托给spring框架
无论使用哪种方式,需要将spring框架的ContextLoaderPlugin作为插件注册到struts应用中。struts-config.xml文件中通过<plug-in>标签进行。
第一种方式:使用spring的ActionSupport类整合struts。
在struts登录系统的基础上添加spring功能,选择spring 的core包和web包。
并将spring的配置文件放在在WEB-INF目录下
打开struts配置文件struts-config.xml,添加如下内容:
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value = "/WEB-INF/applicationContext.xml" />
</plug-in>
并在spring配置文件中添加struts的业务逻辑处理类,
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- struts 里的业务逻辑类 -->
<bean id = "login" class = "com.qdu.struts.BO.LoginBO"></bean>
</beans>
修改登录的Action类
package com.qdu.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.context.ApplicationContext;
import org.springframework.web.struts.ActionSupport;
import com.qdu.struts.BO.LoginBO;
import com.qdu.struts.form.LoginForm;
public class LoginAction extends ActionSupport {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method
// stub
ApplicationContext ctx = getWebApplicationContext(); //获取spring的上下文
LoginBO login = (LoginBO) ctx.getBean("login"); //spring的
if (login.validate(loginForm.getUsername(), loginForm.getPassword())) {
request.setAttribute("username", loginForm.getUsername());
return mapping.findForward("success");
} else
return mapping.findForward("failed");
}
}
第一种方法比较简单,但struts中的action何spring框架耦合在一起,不如以下两种方式合适。
第二种方式:使用spring的DelegatingRequestProcessor覆盖struts的RequestProcessor。
在struts配置文件中添加:
<!-- 添加新的控制器 -->
<controller processorClass =
"org.springframework.web.struts.DelegatingRequestProcessor"></controller>
<!-- 添加的支持spring -->
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value = "/WEB-INF/applicationContext.xml" />
</plug-in>
在spring配置文件中添加:
<!-- struts 里的业务逻辑类 -->
<bean id = "login" class = "com.qdu.struts.BO.LoginBO" />
<bean name = "/login" class ="com.qdu.struts.action.LoginAction">
<property name = "loginBean">
<ref bean = "login"/>
</property>
</bean>
修改action类
package com.qdu.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.qdu.struts.BO.LoginBO;
import com.qdu.struts.form.LoginForm;
/**
* MyEclipse Struts
* Creation date: 04-14-2011
*
* XDoclet definition:
* @struts.action path="/login" name="loginForm" input="/login.jsp" scope="request" validate="true"
* @struts.action-forward name="failed" path="/fail.jsp"
* @struts.action-forward name="success" path="/success.jsp"
*/
public class LoginAction extends Action {
private LoginBO loginBean;
/*
* Generated Methods
*/
public LoginBO getLoginBean() {
return loginBean;
}
public void setLoginBean(LoginBO loginBean) {
this.loginBean = loginBean;
}
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
// 调用业务处理类,整合spring的第二种方式
LoginBO login = this.getLoginBean();
if(login.validate(loginForm.getUsername(),loginForm.getPassword())){
request.setAttribute("username", loginForm.getUsername());
return mapping.findForward("success");
}
else return mapping.findForward("failed");
}
}
第三种方式:将struts Action委托给spring框架
一个更好的解决方法是将struts框架中的对action的管理委托给spring框架。开发者可通过在struts配置文件中的action映射来注册一个代理来实现。该代理负责在spring环境中查找struts的action对象。该方法相对于第二种方法,改变的就是struts配置文件的不同
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources />
<form-beans >
<form-bean name="loginForm" type="com.qdu.sun.struts.form.LoginForm" />
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings >
<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="failed" path="/fail.jsp" />
<forward name="success" path="/success.jsp" />
</action>
</action-mappings>
<message-resources parameter="com.qdu.sun.struts.ApplicationResources" />
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml"/>
</plug-in>
</struts-config>
分享到:
相关推荐
### Spring与Struts整合的三种主要方式 在Java Web开发领域,Spring框架和Struts框架都是非常重要的技术。Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)功能,为Java应用提供了轻量级的解决方案。而...
在第一种整合方式中,Struts的`struts-config.xml`配置文件中,我们将`type`属性设置为`org.springframework.web.struts.DelegatingActionProxy`,这表示Struts的Action将由Spring来创建和管理。例如: ```xml ...
下面我们将详细探讨Spring与Struts整合的三种方式。 **一、使用Spring的ActionSupport** Spring的ActionSupport类是实现Struts 1或2的Action接口的一个便捷选项,它提供了一些便利的功能,如国际化支持和模型驱动...
以下将详细阐述Spring与Struts整合的三种方式: 1. **使用Spring的ActionSupport** 这种方式是通过让Struts的Action类继承Spring的`ActionSupport`类,使Action类能够访问Spring的ApplicationContext。首先,在`...
另一种整合方式是通过继承Spring的ActionSupport类,这使得开发者能够显式地使用getWebApplicationContext()方法获取Spring管理的bean。这种方式更适用于那些需要深度集成Spring特性的场景,比如AOP或更复杂的依赖...
在实际应用中,第一种和第二种方案通常用于初始化 Spring 容器,而第三种方案则更深入地将 Spring 的功能集成到 Struts 请求处理流程中。然而,使用 `ActionSupport` 类(方法一)会使得 Struts Action 与 Spring ...
下面我们将详细探讨Spring与Struts1.2的整合集成及其核心概念。 1. **Spring框架介绍** Spring是一个全面的后端开发框架,包括了数据访问、事务管理、远程调用、AOP等模块。它通过DI和AOP简化了对象的创建和管理,...
下面,我们将深入探讨Spring与Struts的集成方式,并基于给定的标题“Spring与Struts集成方式一”展开讨论。 首先,我们需要理解Spring和Struts的核心概念。Spring框架提供了一个全面的基础架构,支持创建健壮的、...
接下来,有三种整合Spring和Struts的方法: 1. **继承Spring的ActionSupport类**:Action直接继承Spring的`ActionSupport`,并通过`ApplicationContext`获取服务。这种方式简单,但存在几个缺点:首先,Action与...
Spring 和 Struts2 是两个...总之,Spring 和 Struts2 的整合利用了两者的优势,提供了一种强大的方式来构建可扩展、易于维护的 Java Web 应用。通过深入学习和实践,开发者可以掌握这种整合技巧,并在实际项目中应用。
除了上述两种常见的集成方式,还有一种更为现代的集成方法是使用Spring MVC,Spring MVC是Spring框架的一部分,它提供了一种更现代、更灵活的MVC实现。相比于Struts,Spring MVC提供了更多的特性和灵活性,如类型...
Spring与struts整合主要有三种方式,通过Spring的ActionSupport类,通过Spring的DelegatingRequestProcessor类、通过Spring的DelegatingActionProxy类。
以下是三种整合 Spring 与 Struts 的方法的详细解释: 1. 通过 Spring 的 `ActionSupport` 类 这种方法是让 Struts 的 Action 类不再继承自 Struts 的 `Action` 类,而是继承 Spring 提供的 `ActionSupport` 类。...
1. **Spring整合** - 在MyEclipse中添加Spring支持,选择相应的Spring版本和开发包,如Spring 1.2系列。 - 创建Spring配置文件(如`applicationContext.xml`),配置Bean定义,包括Service层、DAO层以及Action类等...
整合Spring和Struts 2的主要目的是将Spring的依赖注入和管理能力引入到Struts 2的Action中,以及利用Spring的AOP进行事务管理。整合步骤通常包括以下几个部分: 1. **添加依赖**:在项目中引入Spring和Struts 2的库...
通过Action类和拦截器,可以实现与Spring的无缝集成,同时也可以利用Spring的缓存功能,将频繁访问的数据存储在Redis中。 3. **Hibernate框架**:Hibernate是Java领域的一个对象关系映射(ORM)框架,它简化了数据库...
在提供的"spring+struts2+ibatis整合的jar包"中,lib1可能包含了这三个框架以及它们的依赖库。这些jar文件是运行整合应用必不可少的组件,它们包含了框架的API、实现和一些工具类,帮助开发者快速搭建和运行整合项目...
《Spring+Struts+Hibernate整合开发》是一本深入讲解企业级Java应用开发的书籍,它主要聚焦于三大著名开源框架——Spring、Struts和Hibernate的集成与应用。这些框架是Java Web开发中的基石,广泛应用于各种复杂的...
Spring提供了一种全面的业务层和持久层管理方案,而Struts2则专注于视图和控制层。整合这两者可以使我们在享受Struts2的优秀UI处理和Action逻辑管理的同时,利用Spring进行更灵活的依赖管理和事务控制。 **二、整合...
- Spring还提供了对其他库的集成,如JDBC、JMS、JTA等,以及对其他框架如Hibernate、Struts2的整合支持。 2. **Hibernate框架**: - Hibernate是一个对象关系映射(Object-Relational Mapping,ORM)框架,它简化...