原文 http://blog.csdn.net/tkd03072010/article/details/7468769

Spring整合Struts2、Hibernate原理概述:

从用户角度来看,用户发出HTTP请求,当MVC框架的控制器组件拦截到用户请求时,将调用系统的业务逻辑组件,业务逻辑组件则调用系统的DAO组件,而DAO组件则依赖于SessionFactory和DataSource等底层组件实现数据库访问。

从系统实现角度看,Ioc容器先创建SessionFactory和DataSource等底层组件,然后将这些底层组件注入给DAO组件,提供一个完整的DAO组件,并将此DAO组件注入给业务逻辑组件,从而提供一个完整的业务逻辑组件,而业务逻辑组件又被注入给控制器组件,控制器组件负责拦截用户请求,并将处理结果呈现给用户——这一系列的衔接,都由Spring的IoC容器提供实现。

简单来说,Spring通过IoC容器上管(Struts2)Action的创建并依赖注入给控制器,下管(Hibernate)SessionFactory的创建并依赖注入给DAO组件,是一个巨大的工厂。(个人理解)

源代码下载:Regist_S2SH.rar

1.项目结构:

2.web.xml配置文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  6. <welcome-file-list>
  7. <welcome-file>index.jsp</welcome-file>
  8. </welcome-file-list>
  9. <!-- 使用ContextLoaderListener初始化Spring容器 -->
  10. <listener>
  11. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  12. </listener>
  13. <!-- 定义Struts 2的FilterDispathcer的Filter -->
  14. <filter>
  15. <filter-name>struts2</filter-name>
  16. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  17. </filter>
  18. <!-- FilterDispatcher用来初始化Struts 2并且处理所有的WEB请求。 -->
  19. <filter-mapping>
  20. <filter-name>struts2</filter-name>
  21. <url-pattern>/*</url-pattern>
  22. </filter-mapping>
  23. </web-app>

3.applicationContext.xml配置

  1. <?xml version="1.0" encoding="GBK"?>
  2. <!-- 指定Spring配置文件的Schema信息 -->
  3. <beans xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  9. http://www.springframework.org/schema/tx
  10. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  11. http://www.springframework.org/schema/aop
  12. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
  13. <!-- 定义数据源Bean,使用C3P0数据源实现 -->
  14. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  15. destroy-method="close">
  16. <!-- 指定连接数据库的驱动 -->
  17. <property name="driverClass" value="com.mysql.jdbc.Driver"/>
  18. <!-- 指定连接数据库的URL -->
  19. <property name="jdbcUrl" value="jdbc:mysql://localhost/javaee"/>
  20. <!-- 指定连接数据库的用户名 -->
  21. <property name="user" value="root"/>
  22. <!-- 指定连接数据库的密码 -->
  23. <property name="password" value="1120"/>
  24. <!-- 指定连接数据库连接池的最大连接数 -->
  25. <property name="maxPoolSize" value="40"/>
  26. <!-- 指定连接数据库连接池的最小连接数 -->
  27. <property name="minPoolSize" value="1"/>
  28. <!-- 指定连接数据库连接池的初始化连接数 -->
  29. <property name="initialPoolSize" value="1"/>
  30. <!-- 指定连接数据库连接池的连接的最大空闲时间 -->
  31. <property name="maxIdleTime" value="20"/>
  32. </bean>
  33. <!-- 定义Hibernate的SessionFactory -->
  34. <bean id="sessionFactory"
  35. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  36. <!-- 依赖注入数据源,注入正是上面定义的dataSource -->
  37. <property name="dataSource" ref="dataSource"/>
  38. <!-- mappingResouces属性用来列出全部映射文件 -->
  39. <property name="mappingResources">
  40. <list>
  41. <!-- 以下用来列出Hibernate映射文件 -->
  42. <value>com/xqh/model/Person.hbm.xml</value>
  43. </list>
  44. </property>
  45. <!-- 定义Hibernate的SessionFactory的属性 -->
  46. <property name="hibernateProperties">
  47. <!-- 配置Hibernate属性 -->
  48. <value>
  49. hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
  50. hibernate.hbm2ddl.auto=update
  51. hibernate.show_sql=true
  52. hibernate.format_sql=true;
  53. </value>
  54. </property>
  55. </bean>
  56. <!-- 定义DAO Bean-->
  57. <bean id="personDao" class=
  58. "com.xqh.dao.impl.PersonDaoHibernate">
  59. <!-- 注入持久化操作所需的SessionFactory -->
  60. <property name="sessionFactory" ref="sessionFactory"/>
  61. </bean>
  62. <!-- 配置一个业务逻辑组件 -->
  63. <bean id="service" class=
  64. "com.xqh.service.impl.ServiceImpl">
  65. <!-- 注入持久化访问所需的DAO组件 -->
  66. <property name="personDao" ref="personDao"/>
  67. </bean>
  68. <!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类 -->
  69. <!-- 该类实现PlatformTransactionManager接口,是针对Hibernate的特定实现-->
  70. <bean id="transactionManager"
  71. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  72. <!-- 配置HibernateTransactionManager时需要依注入SessionFactory的引用 -->
  73. <property name="sessionFactory" ref="sessionFactory"/>
  74. </bean>
  75. <!-- 配置事务增强处理,指定事务管理器 -->
  76. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  77. <!-- 用于配置详细的事务语义 -->
  78. <tx:attributes>
  79. <!-- 所有以'get'开头的方法是read-only的 -->
  80. <tx:method name="get*" read-only="true"/>
  81. <!-- 其他方法使用默认的事务设置 -->
  82. <tx:method name="*"/>
  83. </tx:attributes>
  84. </tx:advice>
  85. <aop:config>
  86. <!-- 配置一个切入点 -->
  87. <aop:pointcut id="pointcut"
  88. expression="bean(service)"/>
  89. <!-- 指定在pointcut切入点应用txAdvice事务增强处理 -->
  90. <aop:advisor advice-ref="txAdvice"
  91. pointcut-ref="pointcut"/>
  92. </aop:config>
  93. </beans>

4.struts.xml配置:

  1. <?xml version="1.0" encoding="GBK"?>
  2. <!-- 指定Struts 2配置文件的DTD信息 -->
  3. <!DOCTYPE struts PUBLIC
  4. "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
  5. "http://struts.apache.org/dtds/struts-2.1.7.dtd">
  6. <!-- Struts 2配置文件的根元素 -->
  7. <struts>
  8. <!-- 配置了系列常量 -->
  9. <constant name="struts.i18n.encoding" value="GBK"/>
  10. <constant name="struts.devMode" value="true"/>
  11. <package name="xqh" extends="struts-default">
  12. <!-- 定义处理用户请求的Action,指定该Action的实现类-->
  13. <action name="registPro"
  14. class="com.xqh.action.RegistAction">
  15. <!-- 为两个逻辑视图配置视图页面 -->
  16. <result name="error">/error.jsp</result>
  17. <result name="success">/welcome.jsp</result>
  18. </action>
  19. <!-- 让用户直接访问该应用时列出所有视图页面 -->
  20. <action name="*">
  21. <result>/{1}.jsp</result>
  22. </action>
  23. </package>
  24. </struts>

5.RegistAction.java代码清单:

  1. package com.xqh.action;
  2. import com.opensymphony.xwork2.Action;
  3. import com.xqh.model.Person;
  4. import com.xqh.service.Service;
  5. public class RegistAction
  6. implements Action
  7. {
  8. //下面是用于封装用户请求参数的属性
  9. private Person person;
  10. //用于封装处理结果的属性
  11. private String tip;
  12. //系统所用的业务逻辑组件
  13. private Service service;
  14. //设置注入业务逻辑组件所必需的setter方法
  15. public void setService(Service service)
  16. {
  17. this.service = service;
  18. }
  19. //person属性的setter和getter方法
  20. public void setPerson(Person person)
  21. {
  22. this.person = person;
  23. }
  24. public Person getPerson()
  25. {
  26. return this.person;
  27. }
  28. //tip属性的setter和getter方法
  29. public void setTip(String tip)
  30. {
  31. this.tip = tip;
  32. }
  33. public String getTip()
  34. {
  35. return this.tip;
  36. }
  37. //处理用户请求的execute方法
  38. public String execute()
  39. throws Exception
  40. {
  41. //调用业务逻辑组件的regist方法来处理请求
  42. if (service.regist(person))
  43. {
  44. setTip("哈哈,注册成功!");
  45. return SUCCESS;
  46. }
  47. else
  48. {
  49. return ERROR;
  50. }
  51. }
  52. }

6.personDao.java 代码清单:

  1. package com.xqh.dao;
  2. import java.util.List;
  3. import com.xqh.model.Person;
  4. public interface PersonDao
  5. {
  6. /**
  7. * 加载Person实例
  8. * @param id 需要加载的Person实例的主键值
  9. * @return 返回加载的Person实例
  10. */
  11. Person get(Integer id);
  12. /**
  13. * 保存Person实例
  14. * @param person 需要保存的Person实例
  15. * @return 刚刚保存的Person实例的标识属性值
  16. */
  17. Integer save(Person person);
  18. /**
  19. * 修改Person实例
  20. * @param person 需要修改的Person实例
  21. */
  22. void update(Person person);
  23. /**
  24. * 删除Person实例
  25. * @param id 需要删除的Person实例的标识属性值
  26. */
  27. void delete(Integer id);
  28. /**
  29. * 删除Person实例
  30. * @param person 需要删除的Person实例
  31. */
  32. void delete(Person person);
  33. /**
  34. * 根据用户名查找Person
  35. * @param name 查询的人名
  36. * @return 指定用户名对应的全部Person
  37. */
  38. List<Person> findByName(String name);
  39. /**
  40. * 查询全部Person实例
  41. * @return 全部Person实例
  42. */
  43. public List<Person> findAllPerson();
  44. }

7.personDaoHibernate.java代码清单:

  1. package com.xqh.dao.impl;
  2. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  3. import com.xqh.dao.PersonDao;
  4. import com.xqh.model.Person;
  5. import java.util.*;
  6. public class PersonDaoHibernate
  7. extends HibernateDaoSupport implements PersonDao
  8. {
  9. /**
  10. * 加载Person实例
  11. * @param id 需要加载的Person实例的标识属性值
  12. * @return 指定id对应的Person实例
  13. */
  14. public Person get(Integer id)
  15. {
  16. return getHibernateTemplate()
  17. .get(Person.class, id);
  18. }
  19. /**
  20. * 保存Person实例
  21. * @param person 需要保存的Person实例
  22. * @return 刚刚保存的Person实例的标识属性值
  23. */
  24. public Integer save(Person person)
  25. {
  26. return (Integer)getHibernateTemplate()
  27. .save(person);
  28. }
  29. /**
  30. * 修改Person实例
  31. * @param person 需要修改的Person实例
  32. */
  33. public void update(Person person)
  34. {
  35. getHibernateTemplate().update(person);
  36. }
  37. /**
  38. * 删除Person实例
  39. * @param id 需要删除的Person实例的标识属性值
  40. */
  41. public void delete(Integer id)
  42. {
  43. getHibernateTemplate().delete(get(id));
  44. }
  45. /**
  46. * 删除Person实例
  47. * @param person 需要删除的Person实例
  48. */
  49. public void delete(Person person)
  50. {
  51. getHibernateTemplate().delete(person);
  52. }
  53. /**
  54. * 根据用户名查找Person
  55. * @param name 查询的人名
  56. * @return 指定用户名对应的全部Person
  57. */
  58. @SuppressWarnings("unchecked")
  59. public List<Person> findByName(String name)
  60. {
  61. return (List<Person>)getHibernateTemplate()
  62. .find("from Person p where p.name like ?" , name);
  63. }
  64. /**
  65. * 查询全部Person实例
  66. * @return 全部Person实例
  67. */
  68. @SuppressWarnings("unchecked")
  69. public List<Person> findAllPerson()
  70. {
  71. return (List<Person>)getHibernateTemplate()
  72. .find("from Person");
  73. }
  74. }

8.Person.java代码清单:

  1. package com.xqh.model;
  2. public class Person
  3. {
  4. private Integer id;
  5. private String name;
  6. private int age;
  7. //无参数的构造器
  8. public Person()
  9. {
  10. }
  11. //初始化全部属性的构造器
  12. public Person(String name , int age)
  13. {
  14. this.name = name;
  15. this.age = age;
  16. }
  17. //id属性的setter和getter方法
  18. public void setId(Integer id)
  19. {
  20. this.id = id;
  21. }
  22. public Integer getId()
  23. {
  24. return this.id;
  25. }
  26. //name属性的setter和getter方法
  27. public void setName(String name)
  28. {
  29. this.name = name;
  30. }
  31. public String getName()
  32. {
  33. return this.name;
  34. }   //age属性的setter和getter方法
  35. public void setAge(int age)
  36. {
  37. this.age = age;
  38. }
  39. public int getAge()
  40. {
  41. return this.age;
  42. }
  43. }

9.Person.hbm.xml配置:

  1. <?xml version="1.0" encoding="GBK"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="com.xqh.model">
  6. <class name="Person" table="tb_person">
  7. <!-- 映射标识属性 -->
  8. <id name="id" column="Id"
  9. type="int">
  10. <!-- 指定主键生成器策略 -->
  11. <generator class="increment"/>
  12. </id>
  13. <!-- 映射普通属性 -->
  14. <property name="name" type="string"/>
  15. <property name="age" type="int"/>
  16. </class>
  17. </hibernate-mapping>

10.Service.java代码清单:

  1. package com.xqh.service;
  2. import com.xqh.model.Person;
  3. public interface Service
  4. {
  5. //注册用户
  6. boolean regist(Person person);
  7. }

11.ServiceImpl.java代码清单:

  1. package com.xqh.service.impl;
  2. import com.xqh.dao.PersonDao;
  3. import com.xqh.model.Person;
  4. import com.xqh.service.Service;
  5. public class ServiceImpl
  6. implements Service
  7. {
  8. private PersonDao personDao;
  9. //依赖注入DAO组件所需的setter方法
  10. public void setPersonDao(PersonDao personDao)
  11. {
  12. this.personDao = personDao;
  13. }
  14. //注册用户
  15. public boolean regist(Person person)
  16. {
  17. //调用DAO组件的方法来实现业务逻辑
  18. int result = personDao.save(person);
  19. if (result > 0)
  20. {
  21. return true;
  22. }
  23. return false;
  24. }
  25. }

12.运行结果:

Struts2+Hibernate+Spring 整合示例[转]的更多相关文章

  1. Struts2+Hibernate+Spring 整合示例

    转自:https://blog.csdn.net/tkd03072010/article/details/7468769 Struts2+Hibernate+Spring 整合示例 Spring整合S ...

  2. [置顶] struts2+hibernate+spring整合(annotation版)

    本博文使用struts2,hibernate,spring技术整合Web项目,同时分层封装代码,包含model层,DAO层,Service层,Action层. 在整合hibernate时使用annot ...

  3. Spring+Struts2+Hibernate框架整合流程

    一:基本步骤 新建Maven项目,导入相关依赖(推荐) 在WEB-INF的web.xml中进行配置 ————–Hibernate配置 —————- 创建entity包,创建数据库相关实体类 根据实体类 ...

  4. Spring+Struts2+Hibernate的整合

    这篇主要采用Maven搭建Spring+Struts2+Hibernate的整合项目,复习一下SSH框架,虽然spring提供自己的MVC框架, 但是Spring也提供和其他框架的无缝整合,采用组件形 ...

  5. struts2+hibernate+spring简单整合且java.sql.SQLException: No suitable driver 问题解决

    最近上j2ee的课,老师要求整合struts2+hibernate+spring,我自己其实早早地有准备弄的,现在都第9个项目了,无奈自己的思路和头绪把自己带坑了,当然也是经验问题,其实只是用myec ...

  6. 工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境

    上文中我们介绍<工作笔记2.软件开发经常使用工具> 从今天開始本文将教大家怎样进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个 ...

  7. 二十六:Struts2 和 spring整合

    二十六:Struts2 和 spring整合 将项目名称为day29_02_struts2Spring下的scr目录下的Struts.xml文件拷贝到新项目的scr目录下 在新项目的WebRoot-- ...

  8. 第一次做的struts2与spring整合

    参考:http://www.cnblogs.com/S-E-P/archive/2012/01/18/2325253.html 这篇文章说的关键就是“除了导入Struts2和Spring的核心库之外, ...

  9. Struts2学习笔记——Struts2与Spring整合

      Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spring创建的 ...

随机推荐

  1. ios--时间格式化(cell业务逻辑处理)

    一.点击更多按钮 1.项目需求      点击更多按钮,从底部弹出一个框  2.怎么从底部弹出一个框?           两种方法:                 一种用 UIActionShee ...

  2. a c lang in linux

    create shortcut: ln -s sourcepath -destdirectoryln -s /home/tell/calos /home/桌面 #include <iostrea ...

  3. IO/ACM中来自浮点数的陷阱(收集向)

    OI/ACM中经常要用到小数来解决问题(概率.计算几何等),但是小数在计算机中的存储方式是浮点数而不是我们在作数学运算中的数,有精度的限制. 以下以GUN C++为准,其他语言(或编译器)也差不了多少 ...

  4. 【003:ubuntu 基本开发环境设置】

    1.基础开发环境 sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install Oracl ...

  5. 推荐使用Wiz笔记发表博客

    一直用Wiz笔记,平时随手记录一些东西,可以自动在多台电脑同步,还支持移动客户端,上下班路上用手机也能看.最近在整理之前工作的一些资料,并把自己觉得可以分享的内容发到博客园上.当然会先在Wiz笔记上编 ...

  6. mongoDB windows安装

    http://www.mongodb.org/ mongodb的官方文档. http://www.cnblogs.com/lipan/archive/2011/03/08/1966463.html  ...

  7. window resize的时候禁止频繁触发事件

    $(window).resize(function(){ var value=+new Date; assistantForSyncTask.execute(value); assistantForA ...

  8. (8) 深入理解Java Class文件格式(七)

    转载:http://blog.csdn.net/zhangjg_blog/article/details/22091529 本专栏列前面的一系列博客, 对Class文件中的一部分数据项进行了介绍. 本 ...

  9. UVA10561 Treblecross 组合游戏/SG定理

    Treblecross is a two player gamewhere the goal is to get three X in a row on a one-dimensional board ...

  10. 从C语言快速学PHP

    PHP是解释性语言,是Web开发中常用的语言.对于web编程,建议学习时参考w3cschool的在线api手册. PHP和C语言及其相似,懂C的人只要稍加学习就能写出简单的PHP程序.以下是PHP与C ...