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包

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

3,加入整合jar包

最后不要忘记加入整合web项目的jar

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

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

struts.xml

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

web.xml

 1   <!--struts2核心过滤器-->
 2   <filter>
 3      <filter-name>struts2</filter-name>
 4      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 5      <init-param>
 6           <param-name>actionPackages</param-name>
 7           <param-value>com.mycompany.myapp.actions</param-value>
 8      </init-param>
 9   </filter>
10
11   <filter-mapping>
12       <filter-name>struts2</filter-name>
13        <url-pattern>/*</url-pattern>
14   </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是否配置成功,能够正常得到

spirng核心配置文件:

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

测试sessionfactory

接下来测试事务管理

在spring核心配置文件中添加

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

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

创建一个类SaveTwoUser

 1 package test;
 2 import javax.annotation.Resource;
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 import org.model.User;
 6 import org.springframework.stereotype.Service;
 7 import org.springframework.transaction.annotation.Transactional;
 8 //如果想注入容器中的对象sessionFactory 当前的类必须在容器中 spring不能给 不在容器中的对象注入属性
 9 //(例如配置方式中 先配置action 然后配置service action中才能注入配置的service 因为他们在一个容器中  spring配置文件中管理生成的对象都是在容器中的)
10 //所以声明一个bean对象在容器中 名字默认为对象的名称SaveTwoUser
11 //@Service("saveTwoUser")效果和@Service一样 注意类名的第一个字母是小写的
12 @Service
13 public class SaveTwoUser {
14     //sessionFactory已经配置好了  在容器中  使用时 采使用注解的方式进行注入 则不用在配置set方法了  如果采用配置的方式
15     //那么这里声明sessionFactory之后 创建set方法  在配置文件中进行注入<property name="sessionFactory" ref=""></property>
16     //注入bean资源使用@Resource 先按照"sessionFactory"去spring配置文件中去找  找不到 再按照类型去找
17     @Resource
18     private SessionFactory sessionFactory;
19     //private ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
20
21     //加注解  开启事务
22     @Transactional
23     public void save(){
24         //这里只能使用getCurrentSession而不能使用opensession,opensession得到的是一个新的session 没有事务
25         //而getCurrentSession得到的是外边已经管理好事务的session
26         if(sessionFactory!=null){
27             Session session=sessionFactory.getCurrentSession();
28             if(session!=null){
29                 session.save(new User());
30                 int i=10/0;//这里会出现异常  观察是否保存的有对象 正产情况下 事务回滚 不保存任何对象
31                 session.save(new User());
32             }
33         }else{
34             System.out.println("sessionfactory为空。。。。");
35         }
36     }
37 }

测试

查看数据库

然后把异常注释  再次执行

查看数据库

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

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

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

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

时间: 2025-02-01 06:47:24

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

OA项目2:环境搭建之ssh框架整合

首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频的文字版,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 今天做Spring+Hibernate+Struts2整合. 一 Struts2与Spring的整合. 1.整合之前Struts2例子: 在src下建立一个包,包名为:cn.clear.oa.test,在包下面建立一个类TestAction.java,内容如下: 1 package cn.clear.oa.test; 2 3 import com.opensymph

【Java EE 学习第58-67天】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】

一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar包 (1)jbpm项目/lib目录下的所有jar包和根目录下的jbpm.jar包放入/WEB-INF/lib文件夹下,同时删除tomcat服务器/lib文件夹中的el-api.jar包. 注意:必须删除el-api.jar包,该jar包和jbpm项目中需要使用到的三个jar包冲突了:juel-api

【Java EE 学习第58-67天】【OA项目练习】【JBPM工作流的使用】

OA项目中有极大可能性使用到JBPM框架解决流程控制问题,比如请假流程.报销流程等等. JBPM:JBoss Business Process Management,翻译过来就是业务流程管理.实际上就是一个java 框架. 学习JBPM最重要的就是学习数据库中的18张表,只要熟练掌握了这18张表,学习JBPM就大功告成了. 一.JBPM框架搭建 1.到JBPM官方网站上下载需要的jar包.源代码.文档等等 http://www.jbpm.org/ 比较流行的JBPM版本是JBPM4.4,本次使用

OA项目1:环境搭建之数据库创建与环境添加

首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频的文字版,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一   指定数据库:Mysql database:oa 建库语句:create database oa default character set utf8 二   指定ide开发工具:MyEclipse 项目名称:新建web工程,名字为:OA,并设置项目工程编码:utf-8 环境所用主要技术框架:JUnit4,Struts2.3.15.1,Hibernate3.6

12天OA项目

OA(Office Automation):办公自动化--辅助管理,提高办公效率的系统. OA的功能: 文字处理,申请审批,办公用品管理,公文管理,会议管理,资料管理,知识管理,电子邮件等... 根据用户实际需求确定实际项目的功能. BBS--论坛 CRM--客户关系管理系统 CMS--内容管理系统 1.软件开发的简单步骤: <1.需求分析 <2.分析设计 <3.编码实现 <4.测试验证(修改) <5.部署与后期维护 2.每个步骤具体要做什么,谁来做? 3.我们要做什么? 设

进击 office web apps 整合Java web项目

之前两篇文章将服务器安装好了,项目主要的就是这么讲其整合到我们的项目中,网上大部分都是asp.net的,很少有介绍Java如何整合的,经过百度,终于将其整合到了我的项目中. 首先建个servlet拦截器 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest

OA项目知识总结2

BaseAction的抽取 项目中的每个实体类都对应一个action  每个action都都要继承ActionSupport类 已以及实现ModelDriver接口  并且需要注入service 虽然每个action注入的service不同 但是也有可能另外一个action需要使用到其他action中的service  那么就存在大量的重复注入代码  尽管service是单例的不影响性能  但是我们需要做的是尽量少些重复代码 例如 此时BaseAction诞生了 package org.base

mysql+ssh整合例子,附源码下载

项目引用jar下载:http://download.csdn.net/detail/adam_zs/7262727 项目源码下载地址:http://download.csdn.net/detail/adam_zs/7262749 今天花时间把ssh整合了一下,重新再学习一下,希望对大家有所帮助! 我用的是mysql数据库,建表语句比较简单就不贴出来了,建表的时候记的设置id为自动增加哦. 项目文件位置,项目引用jar包 项目配置文件 web.xml <?xml version="1.0&q

从MVC和三层架构说到SSH整合开发

相信很多人都认同JavaWeb开发是遵从MVC开发模式的,遵从三层架构进行开发的,是的,大家都这么认同.但是相信大家都会有过这样一个疑问,if(MVC三层模式==三层架构思想)out.println(“请继续观看……”) 1.MVC(MODEL-VIEW-CONTROLLER)设计模式: 首先让我们了解下MVC(Model-View-Controller)的概念: MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写