`

Struts1基础上配置Spring3

 
阅读更多

除了通用配置外,有两种方式可以将Struts1.x集成到Spring中:

  • 最简单集成:使用Spring提供的WebApplicationContextUtils工具类中的获取Spring Web容器,然后通过Spring Web容器获取Spring管理的Bean;
  • Struts1.x插件集成:利用Struts1.x中的插件ContextLoaderPlugin来将Struts1.x集成到Spring中

首先我们需要准备必须的jar包

1、从下载的spring-framework-3.0.5.RELEASE-with-docs.zip中dist目录查找如下jar包,该jar包用于提供集成struts1.x所需要的插件实现等:

      org.springframework.web.struts-3.0.5.RELEASE.jar

2、从下载的spring-framework-3.0.5.RELEASE-dependencies.zip中查找如下依赖jar包,该组jar是struts1.x需要的jar包:

 

com.springsource.org.apache.struts-1.2.9.jar                      //struts1.2.9实现包

 

com.springsource.org.apache.commons.digester-1.8.1.jar    //用于解析struts配置文件

 

com.springsource.org.apache.commons.beanutils-1.8.0.jar   //用于请求参数绑定

 

com.springsource.javax.servlet-2.5.0.jar                            //Servlet 2.5 API

一、最简单的集成只使用通用配置,利用WebApplicationContextUtils提供的获取Spring Web容器方法获取Spring Web容器,然后从Spring Web容器获取Spring管理的Bean。

public class SysConfigAction extends DispatchAction{
	private SysConfigBIS sysconfigbis;
	/**
	 * 进入系统配置分类页面
	 */
	public ActionForward SVSearchSysConfig(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {
		try{
			WebApplicationContext ctx = WebApplicationContextUtils.  
            getRequiredWebApplicationContext(getServlet().getServletContext()); 
			
			sysconfigbis=ctx.getBean("sysconfigbis", SysConfigBIS.class); 
			List<ENViwSysConCategory> list =sysconfigbis.SearchSysConfig("1");
			System.out.println("list.size="+list.size());
			request.setAttribute("sysconfiglist", list);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		return mapping.findForward("SVSearchSysConfig");
	}
}

 spring的配置文件是

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<bean id="sysconfigbis" class="scienpro.sysconfig.business.SysConfigBIS"> 
</bean>
</bean>

 web.xml部署描述符文件定义是

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml,/WEB-INF/sysconfig/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- 配置spring -->  
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>classpath*:applicationContext-*.xml</param-value>  
    </context-param>  
    <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>  
</web-app>

 这样配置后通过http://localhost:9999/SpringForScien/sysconfig.do?method=SVSearchSysConfig就能访问到想要的页面。

如果对于一个已经写好的strut1工程,使用这种方法“集成”意味着每个action中的每个method都需要更改(获取业务组件bis),有没有简单的方法能够使它自动注入呢?接下来让我们学习使用Struts插件进行集成。

二、Struts1.x插件集成

Struts插件集成使用ContextLoaderPlugin类,该类用于为ActionServlet加载Spring配置文件。

1、在Struts配置文件中配置插件:

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">    
    <set-property property="contextClass" value="org.springframework.web.context.support.XmlWebApplicationContext"/>    
    <set-property property="contextConfigLocation" value="classpath*:applicationContext-*.xml"/> 
<!--<set-property property="contextConfigLocation" value="/WEB-INF/hello-servlet.xml"/>-->
<!--<set-property property="namespace" value="hello"/> -->
</plug-in>

 

  • contextClass可选,用于指定WebApplicationContext实现类,默认是XmlWebApplicationContext;
  • contextConfigLocation指定Spring配置文 件位置,如果我们的ActionServlet 在 web.xml 里面通过 <servlet-name>hello</servlet-name>指定名字为“hello”,且没有指定 contextConfigLocation,则默认Spring配置文件是/WEB-INF/hello-servlet.xml;
  • namespace因为默认使用ActionServlet在web.xml定义中的Servlet的名字,因此如果想要使用其他名字可以使用该变量指定,如指定“hello”,将加载的Spring配置文件为/WEB-INF/hello-servlet.xml;

      插件已经配置了,那如何定义Action、配置Action、配置Spring管理Bean呢,即如何真正集成Spring+Struts1x呢?使用插件方式时Action将在Spring中配置而不是在Struts中配置了,Spring目前提供以下两种方式:

  • 将Struts配置文件中的<action>的type属性指定为DelegatingActionProxy,然后在Spring中配置同名的Spring管理的Action Bean;
  • 使用Spring提供的DelegatingRequestProcessor,重载Struts 默认的 RequestProcessor来从Spring容器中查找同名的Spring管理的Action Bean。

1、DelegatingActionProxy方式与Spring集成:

public class SysConfigAction extends DispatchAction{
	private SysConfigBIS sysconfigbis;
	public void setSysconfigbis(SysConfigBIS sysconfigbis){
		this.sysconfigbis=sysconfigbis;
	}
	/**
	 * 进入系统配置分类页面
	 */
	public ActionForward SVSearchSysConfig(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {
		try{
			List<ENViwSysConCategory> list =sysconfigbis.SearchSysConfig("1");
			System.out.println("list.size="+list.size());
			request.setAttribute("sysconfiglist", list);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		return mapping.findForward("SVSearchSysConfig");
	}
}

 struts配置文件如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
	<action-mappings >
    <action
      parameter="method"
      path="/sysconfig"
      scope="request"
      type="org.springframework.web.struts.DelegatingActionProxy">
      <forward name="SVSearchSysConfig" path="/sysconfig/sysconfigmanage.jsp" />  
    </action> 
  </action-mappings>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">  
        <set-property property="contextClass" value="org.springframework.web.context.support.XmlWebApplicationContext"/>  
        <set-property property="contextConfigLocation" value="classpath*:applicationContext-*.xml"/> 
    </plug-in>  
</struts-config>

 

 Spring配置文件如下

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<bean id="sysconfigbis" class="scienpro.sysconfig.business.SysConfigBIS"></bean>
	<bean name="/sysconfig" class="scienpro.sysconfig.action.SysConfigAction">  
    	<property name="sysconfigbis" ref="sysconfigbis"/>  
	</bean> 
</beans>

 从以上配置中可以看出:

  • Struts配置文件中<action>标签的path属性和Spring配置文件的name属性应该完全一样,否则错误;
  • Struts通过DelegatingActionProxy去到Spring Web容器中查找同名的Action Bean;

很简单吧,DelegatingActionProxy是个代理Action,其实现了Action类,其内部帮我们查找相应的Spring管理Action Bean并把请求转发给这个真实的Action。

2、DelegatingRequestProcessor方式与Spring集成:

首先要替换掉Struts默认的RequestProcessor,在Struts配置文件中添加如下配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
  <controller>  
    <set-property property="processorClass"  
         value="org.springframework.web.struts.DelegatingRequestProcessor"/>  
  </controller> 
	<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
	<set-property property="contextConfigLocation" value="classpath*:applicationContext-*.xml"/>
	</plug-in>
</struts-config>
  

 由于这个配置是所有struts共用的(如果一个工程里有多个struts-xml),可以把它单独放到一个struts-xml中配置在web-xml,其他的struts-xml也能共享这个配置了(注意,struts-xml中的action-mappings、controller、plug-in是有排列的先后顺序的,否则会报错)

实际的struts-xml配置如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>
	<action-mappings >
    <action
      parameter="method"
      path="/sysconfig"
      scope="request">
      <forward name="SVSearchSysConfig" path="/sysconfig/sysconfigmanage.jsp" />  
    </action> 
  </action-mappings>
</struts-config>

 type可选,如果选的话type=scienpro.sysconfig.action.SysConfigAction

Spring的配置和Action的写法与DelegatingActionProxy方式相同

从以上配置中可以看出:

  • Struts配置文件中<action>标签的path属性和Spring配置文件的name属性应该完全一样,否则错误;
  • Struts通过DelegatingRequestProcessor去到Spring Web容器中查找同名的Action Bean;

很简单吧,只是由DelegatingRequestProcessor去帮我们查找相应的Action Bean,但没有代理Action了,所以推荐使用该方式。

Struts1x与Spring集成到此就完成了,在集成时需要注意一下几点:

  • 推荐使用ContextLoaderPlugin+DelegatingRequestProcessor方式集成;
  • 当有多个Struts模块时建议在通用配置部分配置通用部分,因为通用配置在正在Web容器中是可共享的,而在各个Struts模块配置文件中配置是不可共享的,因此不推荐直接使用ContextLoaderPlugin中为每个模块都指定所有配置,因为ContextLoaderPlugin加载的Spring容器只对当前的ActionServlet有效对其他ActionServlet无效


此文转载于
http://sishuok.com/forum/blogPost/list/2511.html】 

  • 大小: 34.4 KB
分享到:
评论

相关推荐

    Struts2 Spring Jpa 配置测试

    1. **Struts2配置**:首先,需要在项目的`web.xml`文件中配置Struts2的核心过滤器`org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter`。接着,创建`struts.xml`配置文件,定义Action类、结果...

    struts2+jpa+spring2.5配置基础框架

    这里我们将深入探讨这些技术的基础配置及如何将它们整合在一起。 首先,Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它提供了强大的请求处理和页面展示功能。Struts2的核心优势在于它的...

    Struts1+Hibernate+Spring开发例子

    总的来说,这个"Struts1+Hibernate+Spring开发例子"是一个基础的Java Web应用程序,它展示了如何将这三个框架整合在一起,实现对数据库的CRUD操作。对于初学者来说,这是一个很好的起点,可以帮助理解SSH框架间的...

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    Struts2是在Struts1的基础上发展起来的,它融合了WebWork框架的许多特性。Struts2的核心是.struts2-struts.xml配置文件,它定义了Action和Result。请求到达时,由FilterDispatcher(或后来的...

    struts2+mybatis+spring3框架整合

    - 然后,配置Spring的applicationContext.xml文件,声明Bean,包括Action类、Service类和DAO类,以及数据源和事务管理器。 - 对于MyBatis,需要创建mybatis-config.xml配置文件,包含数据库连接信息和Mapper配置,...

    Struts1+hibernate+spring基础框架,脚手架

    Struts1、Hibernate和Spring是Java Web开发中的三个重要框架,它们组合在一起形成的S1SH(Struts1+Spring+Hibernate)基础框架,是企业级应用开发的常见选择。这个框架组合提供了完整的MVC(Model-View-Controller)...

    Struts2_Hibernate_Spring基础教程

    1. **Struts2**:理解Action、Result和Interceptor的概念,学会配置struts.xml,编写Action类并处理请求。 2. **Hibernate**:了解ORM思想,掌握实体类、映射文件的创建,熟练使用Session进行CRUD操作。 3. **Spring...

    Struts2.5+ Spring5 + Hibernater5.2整合后项目(包含jar包和配置文件)

    2. **配置Spring**:引入spring-context、spring-aop、spring-webmvc等库,配置spring.xml,定义bean的实例化、依赖注入及事务管理。 3. **配置Hibernate**:添加hibernate-entitymanager、hibernate-core等依赖,...

    struts2、hibernate和spring框架整合所需的jar以及配置文档

    3. **Spring** 相关的jar:包括`spring-context.jar`、`spring-beans.jar`、`spring-aop.jar`、`spring-jdbc.jar`、`spring-orm.jar`等,这些库文件是Spring框架的基础。 4. **其他依赖**:如`commons-logging.jar`...

    Struts2+Hibernate+Spring3整合jar包

    - **Spring管理Struts2和Hibernate**:Spring可以作为全局上下文,管理Struts2的Action和Hibernate的SessionFactory,实现依赖注入。 - **事务管理**:Spring提供的事务管理器可以统一管理Hibernate的数据库事务。...

    struts1,struts2,spring,hibernate

    在"Struts1 入门及深入原理.pdf"和"Struts内部培训教材.pdf"中,你可以了解到Struts1的基础知识,包括Action、Form Bean、Controller、JSP标签库等核心概念。"chap01 领略清晰的MVC流程----Struts讲解技术资料.pdf...

    struts2整合spring2的配置

    1. 导入的包 &lt;br&gt;l struts2的五个基础包:commons-logging-1.1.jar; &lt;br&gt;freemarker-2.3.8.jar; &lt;br&gt;ognl-2.6.9.jar; &lt;br&gt;struts-core-2.0.6.jar; &lt;br&gt;xwork-2.0.0.jar. &lt;br&gt;l spring的核心包:...

    struts1.x+spring+jta集成例子(包含所有jar包)

    在集成过程中,首先需要设置Struts1.x的配置文件(struts-config.xml),定义Action和ActionForm,以及与Spring的集成。接着,在Spring的配置文件(如applicationContext.xml)中,你需要定义业务bean,配置事务管理...

    SSH(Struts1+Spring+Hibernate)配置开发总结

    ### SSH(Struts1+Spring+Hibernate)配置开发总结 #### 一、开发环境与配置环境概述 本教程旨在提供一个详细的SSH(Struts1+Spring+Hibernate)框架组合配置指南,适用于初学者及具有一定经验的开发者。开发环境为...

    Struts2+mybatis3+spring3整合

    在整合这三者时,首先需要在项目中引入各自的库文件,然后配置Spring的applicationContext.xml文件,声明并配置Struts2的Action、MyBatis3的SqlSessionFactory等。接着配置struts.xml,指定Action类和对应的处理方法...

    Ibatis+Spring+struts1框架搭建

    3. **配置Spring**: 在src/main/resources目录下创建spring配置文件,如applicationContext.xml,定义Bean的定义和依赖关系,包括数据源、SqlSessionFactory、Service类、DAO类等。 4. **配置Struts1**: 在Web-...

    Struts2整合Spring、JPA

    至于`lib1`这个文件,可能包含了整合所需的一些依赖库,比如Struts2、Spring和JPA实现的JAR包,以及可能的数据库驱动和其他支持库。确保这些库被正确地添加到项目的类路径中是成功整合的基础。 总的来说,Struts2、...

    Struts1+Spring+iBatis-jar包

    这个"Struts1+Spring+iBatis-jar包"集合了这三个框架的核心组件,为开发者提供了一个快速搭建企业级应用的基础。 Struts1是Apache软件基金会开发的一个开源MVC框架,它主要处理HTTP请求并控制应用程序的流程。...

    Struts2+spring注解配置简介

    本篇文章将详细介绍如何在Struts2和Spring框架中结合使用注解进行配置,以简化开发过程。 首先,让我们了解Spring框架中的注解配置。Spring提供了如@Component、@Service、@Repository和@Controller等注解,用于...

Global site tag (gtag.js) - Google Analytics