代码规范

环境搭建

Struts2
jar包
struts.xml, web.xml

Hibernate
jar包:核心包, 必须包, jpa, c3p0, jdbc
hibernate.cfg.xml, *.hbm.xml

Spring
jar包
appicationContext.xml/beans.xml

Spring与Struts2整合
1,在web.xml中配置Spring的监听器
2,加一个jar包以及整合web项目jar

Hibernate与Spring整合
1,管理SessionFactory实例(只需要一个)
2,声明式事务管理

3,加入整合jar包

--------------------

struts与spring整合前 首先单独测试struts

struts.xml

 <struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- 配置为开发模式,修改配置文件时,立即生效,无需重新部署项目重启服务器 -->
<constant name="struts.devMode" value="true" />
<!-- 配置url的后缀名必须为.action 如果不配置 则url书写时可有可无 struts.action.extension=action,,-->
<constant name="struts.action.extension" value="action"></constant>
<!-- 配置为simple 自己控制样式 -->
<constant name="struts.ui.theme" value="simple"></constant> <package name="default" namespace="/" extends="struts-default">
<!-- struts未与spring整合 class属性的值写的是类的全路径-->
<action name="test_*" class="org.action.T" method="{1}">
<result name="success">/test.jsp</result>
</action>
</package>
</struts>

web.xml

   <!--struts2核心过滤器-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>com.mycompany.myapp.actions</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

action

测试:http://localhost:8888/ItcastOA/test.action

接下来测试spring

在spring核心配置文件中开启自动扫描与装配bean对象

action中添加注解

执行测试

接下来测试spring与struts能否整合成功

1,在web.xml中配置Spring的监听器
2,加一个struts和spring整合jar包以及整合web项目的jar

struts中修改

测试http://localhost:8888/ItcastOA2/test.action

hibernate与spring整合测试

1,管理SessionFactory实例(只需要一个)
2,声明式事务管理

3,加入整合jar包

首先测试sessionfactory是否配置成功,能够正常得到(如果sessionFactory配置有问题,那么就得不到)

spirng核心配置文件:

 <!-- 引入外部的properties文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
<!-- 配置c3p0链接池 因为该datasource只有该工厂使用 所以可以配置一个内部bean-->
<property name="dataSource">
<!-- 内部使用的bean 不需要id属性 -->
<bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 必要属性 引入外部的properties文件 使用其中配置的值-->
<property name="jdbcUrl" value="${jdbcUrl}"></property>
<property name="driverClass" value="${driverClass}"></property>
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<!-- 其他属性配置 -->
<!-- 初始化时获取3个链接 取值应在minPoolSize和maxPoolSize之间 default=3 -->
<property name="initialPoolSize" value="3"></property>
<!-- 连接池中保留的最小链接数 default=3-->
<property name="minPoolSize" value="3"></property>
<!-- 连接池中保留的最大链接数 default=15-->
<property name="maxPoolSize" value="5"></property>
<!-- 当连接池中的连接耗尽的时候 c3p0一次同时获取的连接数 default=3-->
<property name="acquireIncrement" value="3"></property>
<!-- 控制数据源内加载的PreparedStatement数量。如果maxStatement与maxStetementsPerConnection均为0,则缓存关闭。default=0 -->
<property name="maxStatements" value="8"></property>
<!-- maxStatemPerConnection定义了连接池内单个链接所拥有的最大缓存statements数。default=0 -->
<property name="maxStatementsPerConnection" value="5"></property>
<!-- 最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。default=0 -->
<property name="maxIdleTime" value="1800"></property>
</bean>
</property>
</bean>

测试sessionfactory

接下来测试事务管理

在spring核心配置文件中添加

     <!-- 配置事务管理 采用注解的方式-->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 注解驱动 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

创建一个简单的user实体类以及对应的映射文件

创建一个类SaveTwoUser

 package test;
import javax.annotation.Resource;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.model.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
//如果想注入容器中的对象sessionFactory 当前的类必须在容器中 spring不能给 不在容器中的对象注入属性
//(例如配置方式中 先配置action 然后配置service action中才能注入配置的service 因为他们在一个容器中 spring配置文件中管理生成的对象都是在容器中的)
//所以声明一个bean对象在容器中 名字默认为对象的名称SaveTwoUser
//@Service("saveTwoUser")效果和@Service一样 注意类名的第一个字母是小写的
@Service
public class SaveTwoUser {
//sessionFactory已经配置好了 在容器中 使用时 采使用注解的方式进行注入 则不用在配置set方法了 如果采用配置的方式
//那么这里声明sessionFactory之后 创建set方法 在配置文件中进行注入<property name="sessionFactory" ref=""></property>
//注入bean资源使用@Resource 先按照"sessionFactory"去spring配置文件中去找 找不到 再按照类型去找
@Resource
private SessionFactory sessionFactory;
//private ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); //加注解 开启事务
@Transactional
public void save(){
24 //这里只能使用getCurrentSession而不能使用opensession,opensession得到的是一个新的session 没有事务
25 //而getCurrentSession得到的是外边已经管理好事务的session 使用框架操作底层数据时 使用的session也是与本地线程绑定的currentSession

if(sessionFactory!=null){
Session session=sessionFactory.getCurrentSession();
if(session!=null){
session.save(new User());
int i=10/0;//这里会出现异常 观察是否保存的有对象 正产情况下 事务回滚 不保存任何对象
session.save(new User());
}
}else{
System.out.println("sessionfactory为空。。。。");
}
}
}

测试

查看数据库

然后把异常注释  再次执行

查看数据库

可以看到正确插入了(为什么不从1开始  因为第一插入了一条数据  但是由于事务回滚  插入的记录又被删除了 所以第一条记录是被占用过的 但再次插入的时候  是从第二条开始的)

最后进行一次最终的测试(struts,hibernate,spring整体整合)

测试:http://localhost:8888/ItcastOA2/test.action

以上就完成了三大框架的整合

SSH整合总结(OA项目)的更多相关文章

  1. 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】

    一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...

  2. 【Java EE 学习 54】【OA项目第一天】【SSH事务管理不能回滚问题解决】【struts2流程回顾】

    一.SSH整合之后事务问题和总结 1.引入问题:DAO层测试 假设将User对象设置为懒加载模式,在dao层使用load方法. 注意,注释不要放开. 使用如下的代码块进行测试: 会报错:no sess ...

  3. J2EE进阶(六)SSH框架工作流程项目整合实例讲解

    J2EE进阶(六)SSH框架工作流程项目整合实例讲解 请求流程 经过实际项目的进行,结合三大框架各自的运行机理可分析得出SSH整合框架的大致工作流程. 首先查看一下客户端的请求信息: 对于一个Web项 ...

  4. 【Java EE 学习 67 上】【OA项目练习】【JBPM工作流的使用】

    OA项目中有极大可能性使用到JBPM框架解决流程控制问题,比如请假流程.报销流程等等. JBPM:JBoss Business Process Management,翻译过来就是业务流程管理.实际上就 ...

  5. 01传智_jbpm与OA项目_整体项目架构

    oA项目: 项目结构如下:

  6. SSH整合(struts2.3.24+hibernate3.6.10+spring4.3.2+mysql5.5+myeclipse8.5+tomcat6+jdk1.6)

    终于开始了ssh的整合,虽然现在比较推崇的是,ssm(springmvc+spring+mybatis)这种框架搭配确实比ssh有吸引力,因为一方面springmvc本身就是遵循spring标准,所以 ...

  7. 基于SSH2的OA项目1.0_20161206_需求分析与框架搭建

    1. SSH项目 OA项目,办公自动化,将公司的数据,文档,流程实现在系统中的管理. 降低人员交流过程中的成本.提高办公的效率. 2 .系统管理 主要实现系统权限的管理,不同的用户登陆后看到菜单项不一 ...

  8. SSH整合之spring整合hibernate

    SSH整合要导入的jar包: MySQL中创建数据库 create database ssh_db; ssh_db 一.spring整合hibernate带有配置文件hibernate.cfg.xml ...

  9. 【转载】SSH整合使用步骤

    SSH整合使用步骤 由于刚开始学习SSH,其中的配置比较多,为了下次能够快速的进行配置,将SSH整合的过程记录下来,以便下次查阅. 软件环境:MyEclipse 9.0.Struts2.2.Sprin ...

随机推荐

  1. [Linux]非常方便的上传下载文件工具rz和sz

     linux上非常方便的上传下载文件工具rz和sz (本文适合linux入门的朋友) [一般用于SecureCRT ssh中使用] █ 法一:直接用yum安装lrzsz(推荐) yum insta ...

  2. luogu2508 [HAOI2008]圆上的整点

    题目大意 给出\(r\),求圆\(x^2+y^2=r^2\)上坐标均为整数的点数.\(n<=2,000,000,000\) 总体思路 我们看到这个数据大小,还是个数学题,想到这个的时间复杂度应当 ...

  3. Node.js:Web 模块

    ylbtech-Node.js:Web 模块 1.返回顶部 1. Node.js Web 模块 什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服 ...

  4. POJ 2299 求逆序对个数 归并排序 Or数据结构

    题意: 求逆序对个数 没有重复数字 线段树实现: 离散化. 单点修改,区间求和 // by SiriusRen #include <cstdio> #include <cstring ...

  5. 字符串比较——compareTo函数

    package com.day03.ifelse; import java.math.BigInteger; /** * @author 王恒 * @datetime 2017年4月7日 下午3:13 ...

  6. lua中.和:的区别

    local myTable = {} function myTable:putMyname(val) print(val) print(self and self.name) end myTable. ...

  7. Cupid's Arrow[HDU1756]

    Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  8. VHDL之package

    Pacakge Frequently used pieces of VHDL code are usually written in the form of COMPONENTS, FUNCTIONS ...

  9. Fear No More歌词

      "Fear No More"   Every anxious thought that steals my breath It's a heavy weight upon my ...

  10. PhotoZoom如何使用调整大小配置文件

      众所周知PhotoZoom是一款图片无失真放大软件,所以在PhotoZoom中会有对尺寸大小调节功能.这里我们所要讲解的也是和尺寸调节等有关的功能——调整大小配置文件. 单击“调整大小配置文件.. ...