`

spring整合struts的三种方式

阅读更多
本文是在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 整合的三种主要方式

    ### Spring与Struts整合的三种主要方式 在Java Web开发领域,Spring框架和Struts框架都是非常重要的技术。Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)功能,为Java应用提供了轻量级的解决方案。而...

    struts和spring整合的2种方式

    在第一种整合方式中,Struts的`struts-config.xml`配置文件中,我们将`type`属性设置为`org.springframework.web.struts.DelegatingActionProxy`,这表示Struts的Action将由Spring来创建和管理。例如: ```xml ...

    Spring 和struts 整合的三种方式

    下面我们将详细探讨Spring与Struts整合的三种方式。 **一、使用Spring的ActionSupport** Spring的ActionSupport类是实现Struts 1或2的Action接口的一个便捷选项,它提供了一些便利的功能,如国际化支持和模型驱动...

    Spring 和 struts 整合的三种方式

    以下将详细阐述Spring与Struts整合的三种方式: 1. **使用Spring的ActionSupport** 这种方式是通过让Struts的Action类继承Spring的`ActionSupport`类,使Action类能够访问Spring的ApplicationContext。首先,在`...

    Spring整合Struts

    另一种整合方式是通过继承Spring的ActionSupport类,这使得开发者能够显式地使用getWebApplicationContext()方法获取Spring管理的bean。这种方式更适用于那些需要深度集成Spring特性的场景,比如AOP或更复杂的依赖...

    spring和struts整合的三种方案

    在实际应用中,第一种和第二种方案通常用于初始化 Spring 容器,而第三种方案则更深入地将 Spring 的功能集成到 Struts 请求处理流程中。然而,使用 `ActionSupport` 类(方法一)会使得 Struts Action 与 Spring ...

    Spring整合集成Struts1.2最简单例子

    下面我们将详细探讨Spring与Struts1.2的整合集成及其核心概念。 1. **Spring框架介绍** Spring是一个全面的后端开发框架,包括了数据访问、事务管理、远程调用、AOP等模块。它通过DI和AOP简化了对象的创建和管理,...

    Spring与Struts集成方式一

    下面,我们将深入探讨Spring与Struts的集成方式,并基于给定的标题“Spring与Struts集成方式一”展开讨论。 首先,我们需要理解Spring和Struts的核心概念。Spring框架提供了一个全面的基础架构,支持创建健壮的、...

    整合Spring与Struts的几种方法

    接下来,有三种整合Spring和Struts的方法: 1. **继承Spring的ActionSupport类**:Action直接继承Spring的`ActionSupport`,并通过`ApplicationContext`获取服务。这种方式简单,但存在几个缺点:首先,Action与...

    spring与struts2整合

    Spring 和 Struts2 是两个...总之,Spring 和 Struts2 的整合利用了两者的优势,提供了一种强大的方式来构建可扩展、易于维护的 Java Web 应用。通过深入学习和实践,开发者可以掌握这种整合技巧,并在实际项目中应用。

    Spring集成Struts的三种方案

    除了上述两种常见的集成方式,还有一种更为现代的集成方法是使用Spring MVC,Spring MVC是Spring框架的一部分,它提供了一种更现代、更灵活的MVC实现。相比于Struts,Spring MVC提供了更多的特性和灵活性,如类型...

    Spring与struts整合开发实例

    Spring与struts整合主要有三种方式,通过Spring的ActionSupport类,通过Spring的DelegatingRequestProcessor类、通过Spring的DelegatingActionProxy类。

    Spring与Struts整合3种方式实例

    以下是三种整合 Spring 与 Struts 的方法的详细解释: 1. 通过 Spring 的 `ActionSupport` 类 这种方法是让 Struts 的 Action 类不再继承自 Struts 的 `Action` 类,而是继承 Spring 提供的 `ActionSupport` 类。...

    Spring+Struts+Hibernate比较详细的整合配置方案

    1. **Spring整合** - 在MyEclipse中添加Spring支持,选择相应的Spring版本和开发包,如Spring 1.2系列。 - 创建Spring配置文件(如`applicationContext.xml`),配置Bean定义,包括Service层、DAO层以及Action类等...

    Spring与Struts 2整合.zip

    整合Spring和Struts 2的主要目的是将Spring的依赖注入和管理能力引入到Struts 2的Action中,以及利用Spring的AOP进行事务管理。整合步骤通常包括以下几个部分: 1. **添加依赖**:在项目中引入Spring和Struts 2的库...

    Spring+Struts2+hibernate+Redis整合

    通过Action类和拦截器,可以实现与Spring的无缝集成,同时也可以利用Spring的缓存功能,将频繁访问的数据存储在Redis中。 3. **Hibernate框架**:Hibernate是Java领域的一个对象关系映射(ORM)框架,它简化了数据库...

    spring+struts2+ibatis整合的jar包

    在提供的"spring+struts2+ibatis整合的jar包"中,lib1可能包含了这三个框架以及它们的依赖库。这些jar文件是运行整合应用必不可少的组件,它们包含了框架的API、实现和一些工具类,帮助开发者快速搭建和运行整合项目...

    spring_struts_hibernate整合开发书籍

    《Spring+Struts+Hibernate整合开发》是一本深入讲解企业级Java应用开发的书籍,它主要聚焦于三大著名开源框架——Spring、Struts和Hibernate的集成与应用。这些框架是Java Web开发中的基石,广泛应用于各种复杂的...

    Spring与Struts2整合

    Spring提供了一种全面的业务层和持久层管理方案,而Struts2则专注于视图和控制层。整合这两者可以使我们在享受Struts2的优秀UI处理和Action逻辑管理的同时,利用Spring进行更灵活的依赖管理和事务控制。 **二、整合...

    ssh集成jar包,支持spring集成Hibernate,spring集成struts2等

    - Spring还提供了对其他库的集成,如JDBC、JMS、JTA等,以及对其他框架如Hibernate、Struts2的整合支持。 2. **Hibernate框架**: - Hibernate是一个对象关系映射(Object-Relational Mapping,ORM)框架,它简化...

Global site tag (gtag.js) - Google Analytics