本文仅作为学习和研究的参考,与实际项目使用技术有所不同,由于作者水平有限,错误疏漏在所难免,请各位看官批评指教。

项目的源代码放在:https://github.com/Frank-Pei/SSHIntegrationDemo

使用软件环境概述:JDK1.7.0_79, Eclipse Mars4.5, Oracle11gR2版本11.2.0.3, Tomcat7.0.65, Maven2

SSH框架其实是指Spring, Struts, Hibernate, SSH框架的整合其实是Spring+Struts的整合以及Spring+Hibernate的整合。

整合步骤如下:

(1) 添加三个框架的jar文件,并创建相关的配置文件。

(2) 为Hibernate添加数据源。

(3) 配置SessionFactory对象

(4) 实现并配置Dao和Service.

(5) 使用Spring简化数据库事务处理,即配置声明式事务管理。

(6) 实现并配置Action。

其中(2)-(5)属于Spring整合Hibernate,步骤(6)属于Spring整合Struts2。

(一)工程环境的搭建

1. 从创建Maven工程开始,archetype选择webapp

2. Group Id & Artifact Id

3. 创建完成后打开工程属性,修改Build Path里面的JRE(默认的Maven工程会使用JRE1.5)

4. 点击Remove后,Add Library选择默认的jre7

5. 创建完成的maven工程会报错,原因是没有将tomcat添加到Build path下,如图所示操作即可。

6. 至此基础工作已经完成。开始添加工程需要的jar文件。

(二)Spring2与Hibernate3的整合

1. 在web容器中配置数据源,数据源中用到了连接池技术(Connection Pool),常用的连接池技术有c3p0, dbcp, proxool, 这里我们使用c3p0

首先,需要c3p0的jar包,可以参考本文最后的pom.xml文件;并且需要将oracle数据库jar文件放在tomcat安装目录下的lib/子目录下。

其次,配置一共要修改三个文件,分别是Tomcat安装目录下的context.xml, web.xml,spring配置文件。代码如下:

context.xml中的配置,

  1. <Resource name="jdbc/ORCL" auth="Container"
  2. type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
  3. url="jdbc:oracle:thin:@192.168.0.10:1521:ORCL"
  4. username="frank" password="frank" maxActive="20" maxIdle="10"
  5. maxWait="-1"/>

web.xml中的配置,

  1. <resource-ref>
  2. <description>Oracle Datasource example</description>
  3. <res-ref-name>jdbc/ORCL</res-ref-name>
  4. <res-type>javax.sql.DataSource</res-type>
  5. <res-auth>Container</res-auth>
  6. </resource-ref>

spring配置文件中的配置,

  1. <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  2. <property name="jndiName" value="java:comp/env/jdbc/ORCL"></property>
  3. </bean>

2. 配置SessionFactory,必须要添加spring-orm和aspectjweaver jar包

  1. <bean id="sessionFactory"
  2. class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  3. <!-- dataSource用于制定数据源,ref引用上面定义的ID为dataSource的Bean -->
  4. <property name="dataSource" ref="dataSource" />
  5. <!-- 指定seesionFactory查找配置文件的位置 另一种做法如下,如要制定多个配置文件必须手动添加 <property name="mappingResources">
  6. <list> <value>com/example/domain/Student.hbm.xml</value> </list> </property> -->
  7. <property name="mappingLocations">
  8. <list>
  9. <value>classpath:**/*.hbm.xml</value>
  10. </list>
  11. </property>
  12. <!-- 配置方言等属性 -->
  13. <property name="hibernateProperties">
  14. <props>
  15. <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
  16. <prop key="hibernate.show_sql">true</prop>
  17. <prop key="hibernate.format_sql">true</prop>
  18. </props>
  19. </property>
  20. </bean>

3. 配置Dao和Service,为做简化只配置了Dao层,没有写Service层

在Spring中配置Dao如下:

  1. <bean id="studentDao" class="com.example.dao.StudentDaoImpl">
  2. <property name="sessionFactory" ref="sessionFactory"/>
  3.  
  4. </bean>

4. 配置声明式事务(Declarative Transaction),基于Spring的AOP特性

  1. <!-- 事务管理器,Spring为Hibernate提供了事务管理类HibernateTransactionManager -->
  2. <bean id="transactionManager"
  3. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  4. <property name="sessionFactory" ref="sessionFactory" />
  5. </bean>
  6. <!-- 定义事务的AOP切入点 -->
  7. <aop:config>
  8. <aop:pointcut id="productServiceMethods" expression="execution(* com.example.dao.*.*(..))" />
  9. <aop:advisor advice-ref="txAdvice" pointcut-ref="productServiceMethods" />
  10. </aop:config>
  11. <!-- 配置事务属性 -->
  12. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  13. <tx:attributes>
  14. <tx:method name="save*" propagation="REQUIRED" />
  15. <tx:method name="*" propagation="SUPPORTS" read-only="true" />
  16. </tx:attributes>
  17. </tx:advice>

至此,Spring与Hibernate的整合完成。

(三)Spring2与Struts2的整合

除了spring-context, struts-core jar包外,还需要struts-spring-plugin包

1. 在web.xml中配置监听器并提供spring配置文件的位置参数

  1. <!-- ContextLoaderListener可以在tomcat启动时初始化Spring容器,从而完成Spring的加载 -->
  2. <listener>
  3. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  4. </listener>
  5. <!-- contextConfigLocation 提供了读取Spring配置文件的路径 -->
  6. <context-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <param-value>classpath:applicationContext-*.xml</param-value>
  9. </context-param>

2. 将Action配置在Spring容器中

Spring中对Action的配置如下:

  1. <bean id="studentAction" class="com.example.web.action.StudentAction">
  2. <property name="studentDao" ref="studentDao"></property>
  3. </bean>

struts.xml中Action的配置如下:

  1. <!-- Action对应的class要写成配置在Spring中的 -->
  2. <action name="add" class="studentAction" method="add">
  3. <result>/hello.jsp</result>
  4. </action>

至此,SSH框架的整合过程全部完成。

J2EE SSH框架整合教程的更多相关文章

  1. dwr与ssh框架整合教程

    (1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开 发人员开发包含AJ ...

  2. J2EE进阶(十)SSH框架整合常见问题汇总(一)

    SSH框架整合常见问题汇总(一) 前言 以下所列问题具有针对性,但是遇到同类型问题时均可按照此思路进行解决. HTTP Status 404 - No result defined for actio ...

  3. SSH框架整合

    SSH框架整合 一.原理图 action:(struts2) 1.获取表单的数据 2.表单的验证,例如非空验证,email验证等 3.调用service,并把数据传递给service Service: ...

  4. ssh框架整合之登录以及增删改查

    1.首先阐述一下我用得开发工具,myeclipse2017+oracle,所以我的基本配置步骤可能不一样,下面我用几张图来详解我的开发步骤. ---1先配置structs (Target 选择apac ...

  5. Spring+Hibernate+Struts(SSH)框架整合

    SSH框架整合 前言:有人说,现在还是流行主流框架,SSM都出来很久了,更不要说SSH.我不以为然.现在许多公司所用的老项目还是ssh,如果改成流行框架,需要成本.比如金融IT这一块,数据库dao层还 ...

  6. MVC+Spring.NET+NHibernate .NET SSH框架整合 C# 委托异步 和 async /await 两种实现的异步 如何消除点击按钮时周围出现的白线? Linq中 AsQueryable(), AsEnumerable()和ToList()的区别和用法

    MVC+Spring.NET+NHibernate .NET SSH框架整合   在JAVA中,SSH框架可谓是无人不晓,就和.NET中的MVC框架一样普及.作为一个初学者,可以感受到.NET出了MV ...

  7. SSH框架整合的其它方式

    --------------------siwuxie095 SSH 框架整合的其它方式 1.主要是整合 Spring 框架和 Hibernate 框架时,可以不写 Hibernate 核心配置文件: ...

  8. SSH框架整合过程总结

    ---------------------siwuxie095                                 SSH 框架整合过程总结         (一)导入相关 jar 包(共 ...

  9. SSH框架整合思想

    --------------------siwuxie095                                 SSH 框架整合思想         1.SSH 框架,即 Struts2 ...

随机推荐

  1. MySql RESTRICT CASCADE SET NULL

    主表,从表[MySql] //http://my.oschina.net/cart/blog/277624 空.RESTRICT.NO ACTION 删除:从表记录不存在时,主表才可以删除.删除从表, ...

  2. 测试代码覆盖率工具学习(Android Emma)

    博客分类: 工具分享 eclipseeclemmaemmatestng       关于eclemma的历史和怎么安装,请参考http://www.ibm.com/developerworks/cn/ ...

  3. Delphi里J+开关作用类似C语言的static变量

    從前筆者曾經對以下的程式產生過疑惑:{$J+}procedure TForm1.Button1Click(Sender: TObject);const  VarConst: integer = 4;b ...

  4. 【CODEFORCES】 A. Initial Bet

    A. Initial Bet time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  5. iOS Masonry 查看更多 收起

    Masonry 查看更多 收起效果实现,带动画 demo下载地址: https://github.com/qqcc1388/MasonryDemo

  6. Gmail收不到邮件咋办?

    http://www.ipip.net/ping.php 分别输入 imap.gmail.com pop.gmail.com smtp.gmail.com 选择  国外 , 然后点ping,找到对应的 ...

  7. 华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!

    华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大! 在华为最新发布的nova 3手机上,抖音通过华为himedia SDK集成了60fps.超级慢动作等华为媒体开放能力,在加持这些能力后,抖音 ...

  8. PathInfo模式的支持

    pathinfo,一种伪静态的用法, 1.让 Apache 支持 PathInfo 配置的 Apache 版本 : 2.2.13 在配置文件中加入 <Files *.php> Accept ...

  9. 如何使CSS--better(系列二)

    上一篇文章(如何使CSS--beter 系列一)中  分析了一下 什么样子的代码是高效的 应该避免什么样子的代码, 那么什么样子的代码是更容易扩展的? 什么代码是更好维护的? 什么代码是更好的? 下边 ...

  10. 生成n个元素的全排列 C实现

    近期在准备复习算法设计的考试,下边记录一些,看笔记时突然想到的解法. 问题是这种 用递归实现 n 个元素的全排列. 当时老师给出的解答是 假定第i个元素 ri 放在首位,于是 f(r1,r2,-,rn ...