运行环境:Tomcat5.0+Spring2.0+Struts1.2+Hibernate3.1
注意:使用Spring1.x 与Struts集成,与Spring2.0 与Struts集成存在不同点
我门可以采用三种方式之一来整合Spring和Struts:
1.Struts的Action继承Spring的ActionSupport类,并在Action中获取Spring的ApplicationContext。这
是最简单的一种整合方式,但有三个缺点:第一,Struts与Spring紧密耦合,不能改换到其他IoC容器;
第二,难以使用Spring AOP特性;第三,对于需要使用DispatchAction的Struts应用无能为力。
2.在Struts的配置文件中,以Spring的DelegatingRequestProcessor类代替Struts的RequestProcessor类
,并在Spring的配置文件中定义与Struts配置文件中<action-mappings>对应的bean,从而将Struts的
Action与Spring分开,并把Struts的动作置于Spring的控制之下。这种整合方式的优点是将不再依赖
Spring这个特定的IoC容器,但必须依赖Struts的RequestProcessor类。
3.通过Spring的DelegatingActionProxy类代理Struts的动作,即在Struts配置文件中,定义<action-mappings>的type属性全部改为DelegatingActionProxy,而不是具体的类名,并在Spring配置文件中定义与Struts动作映射对应的bean,从而将Struts的Action与Spring分开,并把Struts的动作置于Spring的控制之下。
无疑,这是最灵活的一种整合方式。
第一步 完善applicationContext.xml内容
1、添加事务处理。内容如下:
xml 代码
- <bean id="transactionManager"
-
- class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory">
- <ref local="sessionFactory" />
- </property>
- </bean>
- <bean id="customerDAOProxy"
-
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <property name="transactionManager">
- <ref bean="transactionManager" />
- </property>
- <property name="target">
- <ref local="customerDAO" />
- </property>
- <property name="transactionAttributes">
- <props>
- <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
- </props>
- </property>
- </bean>
2、CustomerAction Bean注入事务处理。内容如下:
xml 代码
- <bean name="/customer" class="com.ssh.struts.action.CustomerAction" >
- <property name="customerDAO"><ref bean="customerDAOProxy"/></property>
- </bean>
3、最终applicationContext.xml文件,内容如下:
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-2.0.xsd">
-
- <bean id="dataSource"
- class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName"
- value="com.mysql.jdbc.Driver">
- </property>
- <property name="url"
- value="jdbc:mysql://localhost:3306/pullhand">
- </property>
- <property name="username" value="root"></property>
- <property name="password" value="815241"></property>
- </bean>
-
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref bean="dataSource" />
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">
- org.hibernate.dialect.MySQLDialect
- </prop>
- </props>
- </property>
- <property name="mappingResources">
- <list>
- <value>com/ssh/beans/po/Customer.hbm.xml</value></list>
- </property>
- </bean>
-
- <bean id="transactionManager"
-
- class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory">
- <ref local="sessionFactory" />
- </property>
- </bean>
- <bean id="customerDAOProxy"
-
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <property name="transactionManager">
- <ref bean="transactionManager" />
- </property>
- <property name="target">
- <ref local="customerDAO" />
- </property>
- <property name="transactionAttributes">
- <props>
- <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
- </props>
- </property>
- </bean>
-
- <bean id="customerDAO" class="com.ssh.beans.dao.CustomerDAO">
- <property name="sessionFactory">
- <ref bean="sessionFactory" />
- </property>
- </bean>
-
- <bean name="/customer" class="com.ssh.struts.action.CustomerAction" >
- <property name="customerDAO"><ref bean="customerDAOProxy"/></property>
- </bean>
-
- </beans>
第二步,修改CustomerAction
最后内容如下:
java 代码
- package com.ssh.struts.action;
-
- import java.util.ArrayList;
- import java.util.List;
-
- 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.ssh.beans.dao.ICustomerDAO;
- import com.ssh.beans.po.Customer;
-
-
- public class CustomerAction extends Action {
- ICustomerDAO customerDAO=null;
- public void setCustomerDAO(ICustomerDAO customerDAO){
- this.customerDAO=customerDAO;
- }
-
- public ActionForward execute(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response) {
- List list=new ArrayList();
- Customer customer=null;
- if(customerDAO!=null){
- list=customerDAO.getALLCustomer();
- for(int i=0;i<list.size();i++){
- customer=(Customer)list.get(i);
- System.out.println("OK:"+customer.getCustName());
- }
- }else{
- System.out.println("ERROR or NULL");
- }
- return mapping.findForward("success");
- }
- }
第三步 解决找不到Action问题
初学者会经常遇到下面这个问题:
HTTP Status 404 - Servlet action is not available
--------------------------------------------------------------------------------
type Status report
message Servlet action is not available
description The requested resource (Servlet action is not available) is not available.
--------------------------------------------------------------------------------
Apache Tomcat/5.0.28
就是找不到我们的action。
当你努力去解决这个问题时,会发现去掉applicationContext.xml下面这个<property>标签,一切正常:
xml 代码
- <property name="mappingResources">
- <list>
- <value>
- com/ssh/beans/po/Customer.hbm.xml
- </value>
- </list>
- </property>
那是什么原因呢?我想大家都会首先想到下面两个问题:
1、路径是否正确:即com/ssh/beans/po/Customer.hbm.xml的路径正确么?
2、文件是否正确:即Customer.hbm.xml的文件内容对么?
当你费了一身力气发现一切OK,到底什么原因???
问题在于构件路径(lib)内的包重叠(提示:前提是你要保证这个问题出现之前都正常),所以你要确定
构建路径里的包不能重复!
建议:大家在导入包时,按照默认导入,不要把所有的包都导进工程,在操作中在把需要的jar包导进去(
最好不要把整个liberaries导进去),这样即可以减小工程的大小,又能确保struts\spring\hibernate
之间的包不会重叠或者被替换。
解决办法:把lib下的hibernate-annotations.jar文件删除,重启Tomcat后即可正常运行。
分享到:
相关推荐
应广大网友需求,自己抽了点时间写了一个Struts2.0+Spring2.0+Hibernate3.1的登录及增删改查的完整演示示例,以此奉献给大家,由于本人水平有限,有写的不好的地方还望大家多提宝贵意见,如果有不明白的地方请关注我的...
Struts1.2+Spring2.0+Hibernate3.1Struts1.2+Spring2.0+Hibernate3.1Struts1.2+Spring2.0+Hibernate3.1Struts1.2+Spring2.0+Hibernate3.1
开发环境:Windows XP sp3、SQL Server 2005、JDK 1.6、Struts2.1.6、Spring 2.0、Hibernate3.1、MyEclipse 5.5、Tomcat 6.0 使用步骤: 1、下载解压之后,使用IDE导入工程 2、把工程中的“演示数据脚本.sql”导入到...
Struts1.2+Struts2.1.6+spring 2.0+hibernate3.1+Ibatis2.3 SSH
Struts1.2、Spring2.0和Hibernate3.1是经典的Java企业级开发框架组合,它们在2000年代中期至后期广泛应用于构建基于Java的Web应用程序。这个组合通常被称为“SSH”三位一体,各自负责不同的职责: 1. **Struts1.2**...
Struts1.2+Struts2.1.6+spring 2.0+hibernate3.1+Ibatis2.3内个框架的集成
struts1.2+spring2.0+hibernate3.1框架整合实例 part2 part1地址:http://download.csdn.net/source/1555175
Spring1.2+Struts1.2+hibernate3.1 整合包
Struts1.2+Spring1.2+HIbernate3.1整合一个用户登录的例子,原以为这个很简单没有必要上传上去,但问我的人太多了,所以就发布上来了,我随后会在博客里做详细的介绍,请大家继续关注我的博客.
### Struts 1.2 + Spring 2.0 + Hibernate 3.1 集成开发详解 #### 1. 引言 随着Java Web应用的发展,越来越多的企业级项目选择了Struts、Spring与Hibernate(简称SSH)这三种框架进行集成开发。本篇文章将通过...
在这个“struts1.2+spring2.0+hibernate3.1框架所需jar包”压缩包中,包含了这三个框架的核心库和其他必要的依赖,以便于开发者在项目中集成和使用。 **Struts 1.2** 是一个基于MVC设计模式的Java Web框架,它使得...
Struts2.0+spring2.0+hibernate3.1 ACEGI应用示例
【Struts2.0+Spring2.0+Hibernate3.1+Web应用】是一个经典的Java企业级应用架构组合,主要用于构建高效、灵活且易于维护的Web应用程序。这个组合集成了Struts2作为MVC框架,Spring作为依赖注入(DI)和面向切面编程...
很多人在做SSH整合的时候会出现各种异常,其实一看异常类型根本就不是自己书写的代码出了问题,而是MyEclipse所提供的jar包有问题,很容易...Hibernate3.1 + Spring2.0测试通过的,若出现jar包冲突的朋友可以下载下来使用!
根据给定文件的信息,本文将详细介绍如何配置Struts2.1.6、Spring2.0与Hibernate3.1这三个框架的整合开发环境。这是一套经典的MVC(Model-View-Controller)架构组合,适用于构建复杂的Java Web应用程序。 ### 一、...
Struts1.2、Spring2.0和Hibernate3.1是经典的Java企业级开发框架组合,被称为SSH(Struts-Spring-Hibernate)集成框架。这个小实例为学习者提供了使用这三个框架协同工作的基础示例,有助于理解它们如何在实际项目中...
eclipse整合Struts1.2 + hibernate3.1 + spring2.0 相关链接:http://blog.csdn.net/shellwin/archive/2010/07/02/5708865.aspx
oracle+struts2.0+hibernate3.1+spring2.0实验代码与前面发布的实验指导配套,由于所需要的包实在太打,所以请你们根据实验指导到相应地方找,实在找不到请email: haoxing272@gmail.com<br>一起努力…………
### Struts2.0+Spring2.0+Hibernate3.1 整合知识点详解 #### 一、项目背景与概述 随着企业应用的发展,越来越多的系统需要具备强大的业务逻辑处理能力以及灵活的数据持久化功能。Struts2作为MVC框架之一,Spring...
采用在web.xml中加载spring配置文件的方法降低struts和spring的耦合度,使用自定义的MyDelegatingRequestProcessor类来代替spring的DelegatingRequestProcessor类来解决spring中action的bean的重复配置问题。...