`

struts和spring的整合方式对比

阅读更多
1.业务Action类继承ActionSupport类

 

业务Action中可以调用ActionSupport类中的getWebApplicationContext(),来获得wac,然后

调用wac.getBean("myservice")来获得需要的service对象

 

这种方法虽然可以,但是不推荐使用,原因如下:

1>业务Action类跟Spring的ActionSupport类藕合在一起不是很好

2>getWebApplicationContext().getBean("myservice")这种硬编码不是很好

3>这种方法Spring并没有托管Action对象

 

2.使用Spring的DelegatingRequestProcessor类来替代struts的RequestProcessor类

 

struts-config.xml

<controller 
	locale= "true"
	processorClass= "org.springframework.web.struts.DelegatingRequestProcessor">
</controller>

 

DelegatingRequestProcessor类继承了RequestProcessor类,并重写了RequestProcessor的一些方法

 

DelegatingRequestProcessor.java

public class DelegatingRequestProcessor extends RequestProcessor {

	private WebApplicationContext webApplicationContext;
	

	public void init(ActionServlet actionServlet, ModuleConfig moduleConfig) throws ServletException {
		super.init(actionServlet, moduleConfig);
		if (actionServlet != null) {
			this.webApplicationContext = initWebApplicationContext(actionServlet, moduleConfig);
		}
	}

	protected WebApplicationContext initWebApplicationContext(
			ActionServlet actionServlet, ModuleConfig moduleConfig) throws IllegalStateException {

		return DelegatingActionUtils.findRequiredWebApplicationContext(actionServlet, moduleConfig);
	}

	protected final WebApplicationContext getWebApplicationContext() {
		return this.webApplicationContext;
	}

	protected Action processActionCreate(
			HttpServletRequest request, HttpServletResponse response, ActionMapping mapping)
			throws IOException {

		Action action = getDelegateAction(mapping);
		if (action != null) {
			return action;
		}
		return super.processActionCreate(request, response, mapping);
	}

	protected Action getDelegateAction(ActionMapping mapping) throws BeansException {
		String beanName = determineActionBeanName(mapping);
		if (!getWebApplicationContext().containsBean(beanName)) {
			return null;
		}
		return (Action) getWebApplicationContext().getBean(beanName, Action.class);
	}

	protected String determineActionBeanName(ActionMapping mapping) {
		return DelegatingActionUtils.determineActionBeanName(mapping);
	}

}

 

1>调用init方法的时候,初始化并获得wac

2>调用processActionCreate方法的时候,先从wac中getBean("prefix+path"),如果找不到再从struts内部获取

 

3.所有的业务Action都配置成DelegatingActionProxy类

 

struts-config.xml

<action-mappings>
    	<action path="/login" type="org.springframework.web.struts.DelegatingActionProxy" name="userForm" scope="request">
            <forward name="success" path="/WEB-INF/jsp/index.jsp"/>
        </action>
</action-mappings>

 

DelegatingActionProxy.java

public class DelegatingActionProxy extends Action {


	public ActionForward execute(
			ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		Action delegateAction = getDelegateAction(mapping);
		return delegateAction.execute(mapping, form, request, response);
	}


	
	protected Action getDelegateAction(ActionMapping mapping) throws BeansException {
		WebApplicationContext wac = getWebApplicationContext(getServlet(), mapping.getModuleConfig());
		String beanName = determineActionBeanName(mapping);
		return (Action) wac.getBean(beanName, Action.class);
	}

	
	protected WebApplicationContext getWebApplicationContext(
			ActionServlet actionServlet, ModuleConfig moduleConfig) throws IllegalStateException {

		return DelegatingActionUtils.findRequiredWebApplicationContext(actionServlet, moduleConfig);
	}

	
	protected String determineActionBeanName(ActionMapping mapping) {
		return DelegatingActionUtils.determineActionBeanName(mapping);
	}

}

 

DelegatingActionProxy重写了execute方法,当struts调用execute方法的时候,内部会调用wac.getBean("prefix+path")获取被Spring托管的Action对象,然后再调用业务Action对象的execute方法,其实就是利用了代理模式对Action进行代理

 

Spring的配置文件:

 

applicationContext.xml

<?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.xsd">
  	
	<bean id="loginService" class="prd.tidy.test.service.LoginService">
			
	</bean>
	
	<bean name="/login" class="prd.tidy.test.action.LoginAction" scope="prototype">
		<property name="loginService" ref="loginService">
		
		</property>
	</bean>
    
</beans>

 

分享到:
评论

相关推荐

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

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

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java 12.6.5 编写登录控制器LoginAction.java 12.6.6 建立...

    spring与struts2整合

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

    Struts2与Spring整合的demo

    - `StrutsSpring`可能包含一个简单的整合示例,包括Struts2的配置文件、Spring的配置文件以及相关的Action类和业务接口。 - 示例可能会展示如何配置Action类,如何在Spring中定义bean,以及如何在Struts2中引用...

    轻量级 J2EE 企业应用实战:Struts+Spring+Hibernate整合开发(下).rar

    比较流行的一本书,在公司内很受欢迎 比较实用 下半部分,需与上半部分放在一起解压。

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java 12.6.5 编写登录控制器LoginAction.java 12.6.6 建立...

    struts2 Hibernate spring整合在线考试系统

    《Struts2、Hibernate、Spring整合在线考试系统详解》 在线考试系统是现代教育技术发展的重要组成部分,它能够实现远程测试、自动评分等功能,极大地提高了教学效率。本系统基于Struts2、Hibernate和Spring三大主流...

    struts+spring+hibernate基础整合包+数据库Mysql+C3p0

    SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架 现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层,另外,由于Spring使用的依赖注射以及AOP...

    struts1.2+spring2.0 登录 例子

    这个“struts1.2+spring2.0 登录例子”是一个整合了这两个框架的示例项目,旨在帮助开发者理解如何在实际应用中集成和使用它们。下面将详细阐述这两个框架的核心概念、集成方式以及登录功能的实现。 **Struts1.2...

    Spring框架以及与Struts、Mybatis的整合

    整合过程中,Spring起到中心控制的作用,同时负责管理Struts2和Mybatis的相关配置和生命周期。 1. **Spring与Struts2整合**:Struts2是一个MVC框架,负责处理用户的请求并返回响应。在整合中,Spring负责管理Struts...

    Struts2_Spring3.1_MyBatis3.06整合需要用到的jar包.rar

    Struts2、Spring3.1和MyBatis3.06是Java开发中常见的三大框架,它们各自在不同的层面上提供了强大的功能,并且可以互相整合,以实现更高效的企业级应用开发。本压缩包提供了整合这三大框架所需的核心库文件,下面将...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java 12.6.5 编写登录控制器LoginAction.java 12.6.6 建立...

    Struts-Spring-hibernate整合

    Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的整合应用,通常被称为SSH(Struts2、Spring、Hibernate)集成。这个简单的demo旨在帮助初学者理解并掌握这三者如何协同工作,实现一个完整的MVC...

    Struts+Spring+Hibernate教程

    4. **Spring MVC与Struts的比较**:虽然Struts是一个成熟的MVC框架,但随着Spring MVC的发展,很多开发者更倾向于使用Spring MVC,因为它提供了更现代的特性和更好的性能。Spring MVC也支持与Hibernate的整合,且在...

    Struts + Spring + Hibernate完成用户登陆

    Struts、Spring和Hibernate是Java开发中非常流行的三大...综上所述,Struts、Spring和Hibernate的整合为用户登录功能提供了强大支持,使得开发者可以专注于业务逻辑,而无需关心底层细节,提高了开发效率和代码质量。

    spring和struts和hibernate最简单的整合

    以上就是Spring、Struts和Hibernate的简单整合,这种整合方式在早期的Java Web项目中非常常见。虽然现代开发趋势更倾向于使用Spring Boot和Spring MVC,但理解这种传统的三层架构对于理解现代框架的工作原理仍然很有...

    struts2与spring与hibernat整合

    Java项目中通过Eclipse新建的Web项目,常包含Web.xml,通过该配置文件配置项目的必要信息,常做BS结构项目的人对Web.xml比较熟悉。一般情况下建立Web项目时,和Struts中的action请求向结合如下来配置,

    struts2+spring +hibernater 整合

    Struts2、Spring和Hibernate是Java企业级开发中三大核心框架,它们的整合通常被称为SSH2(Struts2、Spring、Hibernate)。这个整合的主要目的是为了实现MVC(Model-View-Controller)架构,提高代码的可维护性、可...

Global site tag (gtag.js) - Google Analytics