SSH整合总结(OA项目)
代码规范
环境搭建
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项目)的更多相关文章
- 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】
一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...
- 【Java EE 学习 54】【OA项目第一天】【SSH事务管理不能回滚问题解决】【struts2流程回顾】
一.SSH整合之后事务问题和总结 1.引入问题:DAO层测试 假设将User对象设置为懒加载模式,在dao层使用load方法. 注意,注释不要放开. 使用如下的代码块进行测试: 会报错:no sess ...
- J2EE进阶(六)SSH框架工作流程项目整合实例讲解
J2EE进阶(六)SSH框架工作流程项目整合实例讲解 请求流程 经过实际项目的进行,结合三大框架各自的运行机理可分析得出SSH整合框架的大致工作流程. 首先查看一下客户端的请求信息: 对于一个Web项 ...
- 【Java EE 学习 67 上】【OA项目练习】【JBPM工作流的使用】
OA项目中有极大可能性使用到JBPM框架解决流程控制问题,比如请假流程.报销流程等等. JBPM:JBoss Business Process Management,翻译过来就是业务流程管理.实际上就 ...
- 01传智_jbpm与OA项目_整体项目架构
oA项目: 项目结构如下:
- 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标准,所以 ...
- 基于SSH2的OA项目1.0_20161206_需求分析与框架搭建
1. SSH项目 OA项目,办公自动化,将公司的数据,文档,流程实现在系统中的管理. 降低人员交流过程中的成本.提高办公的效率. 2 .系统管理 主要实现系统权限的管理,不同的用户登陆后看到菜单项不一 ...
- SSH整合之spring整合hibernate
SSH整合要导入的jar包: MySQL中创建数据库 create database ssh_db; ssh_db 一.spring整合hibernate带有配置文件hibernate.cfg.xml ...
- 【转载】SSH整合使用步骤
SSH整合使用步骤 由于刚开始学习SSH,其中的配置比较多,为了下次能够快速的进行配置,将SSH整合的过程记录下来,以便下次查阅. 软件环境:MyEclipse 9.0.Struts2.2.Sprin ...
随机推荐
- Struts简单介绍
一.在介绍struts之前,先来了解一下什么是MVC框架吧. 1.MVC介绍 MVC全名是Model View Controller.是模型(model)-视图(view)-控制器(controlle ...
- C语言高速入门系列(一)
C语言高速入门系列(一) 本系列引言: 本教程的宗旨是将C语言入门的内容进行关键知识点的提纯,将一些笼统的废话去除; 再进行压缩,然后将本章的关键知识点做成路线图的,能够更加方便地掌握学习的方向; ...
- Sublime Text 2 SFTP UnicodeDecodeError错误!
右键-->SFTP/FTP ->Sync Remote To Local {作者:半条虫(466814195)} 提示下面错误 An unexpected error occurred, ...
- ubuntu查看文件大小
使用linux命令df 和du,df 但是df只能查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力.du可以查看文件及文件夹的大小.所以基本上是两者配合使用. 一 df h参数, ...
- 【TYVJ1936】【Clover杯NOIP模拟赛IV】太空战队
[问题描述] 在社会经济高速发展的今天,借助高科技手段,组建太空战队的愿望就快实现了. 战队属下有N个航天员.作为空军选拔上来的佼佼者,每个航天员都有与生俱来的骄傲——他们每个人都认为自己是最强的或者 ...
- jupyter在特定环境特定目录中启动
代码如下: @echo off start %windir%\System32\cmd.exe "/c" D:\Anaconda\Scripts\activate.bat # 启动 ...
- cloudfoundry-----------service servicebroker 转载
目前,CloudFoundry已经集成了很多第三方的中间件服务,并且提供了用户添加自定义服务的接口.随着Cloud Foundry的发展,开发者势必会将更多的服务集成进Cloud Foundry,以供 ...
- BZOJ 1061费用流
思路: 我们可以列出几个不等式 用y0带进去变成等式 下-上 可以消好多东西 我们发现 等式左边的加起来=0 可以把每个方程看成一个点 正->负 连边 跑费用流即可 //By SiriusRen ...
- POJ 1703 带权并查集
直接解释输入了: 第一行cases. 然后是n和m代表有n个人,m个操作 给你两个空的集合 每个操作后面跟着俩数 D操作是说这俩数不在一个集合里. A操作问这俩数什么关系 不能确定:输出Not sur ...
- 每条sql语句实际上都是一个事物(事物多种类型解读)
事务(数据库引擎) 事务是作为单个逻辑工作单元执行的一系列操作.一个逻辑工作单元必须有四个属性,称为原子性.一致性.隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务.原子性事务必须是原子工 ...