- 浏览: 302943 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ae6623:
ae6623 写道大哥,你是怎么知道它对临时文件有限制的,我也 ...
导出excel2007 poi3.8 -
ae6623:
大哥,你是怎么知道它对临时文件有限制的,我也发现这个bug了, ...
导出excel2007 poi3.8 -
coralandbill:
下载不了啊 能不能给我发一个simpleProj.war包啊 ...
jqgrid使用步骤及说明 -
maojin:
这是jqgrid几?那个电话号码校验的函数能调到吗?
jqgrid使用步骤及说明 -
qingyezhu:
请问,用poi3.8中的wordtohtmlconver类将d ...
导出excel2007 poi3.8
ssh2整合SSH2整合 2009-12-02 09:31:44 阅读785 评论1 字号:大中小 订阅
Spring+Hibernate+Struts2整合文档
一、Spring+Struts2整合:
1、spring配置在web.xml文件中的上下文监听器:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframwork.web.content.ContextLoaderListener</listener-class>
</listener>
2、struts2配置在web.xml文件中的过滤器:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-patter>/*</url-patter>
</filter-mapping>
3、设置struts.xml文件,就可以使用spring的IOC来管理struts的Action:
默认的的就是spring,可以不写
<content name=“struts.objectFactory” value=“spring” >
4、第三步设置后,以后在struts.xml 文件中配置一个action时,它的class就不是一个类了,而是在applicationContext.xml文件中定义过的类的ID,在struts.xml文件中就只需要引用定义好的类的id 就可以了。
然后特别要注意的一个问题:action是一个请求就是一个action对象,而在spring中则不是的,它是自动分配类的实例的,是使用的单 态模式来生产类的实例的,不符合action,因此在applicationContext.xml文件中定义每个action时,都要在类后加上:
scope=“prototype” 属性
scope="prototype" 属性三、 三者组合开发:
一般在组合开发时,没有什么难的,只要把上面两步做好就可以是三个组合开发了。
对于进行组合开发时,一般使用的系统架构:
1、 先从最底层开发,先开发POJO类,和Hibernate映射文件。它相当于系统的数据库层。
2、 再开发DAO层,它是对于数据进行持久化的一层,专门处理各种数据增、删、改、查的功能。并且使用DAO工厂模式,以保证和上层没有任何的联系,并且可以方便于类与接口的扩展。
3、 第三是开发manager层,它相当于软件的业务逻辑层,即专门处理各种业务逻辑。实现系统的业务处理功能。并且它隔离事务,使与下层的数据持久和上层的数据操作没有任何的联系。
4、 Action层,也即软件的表示层,处理action的接收与回复。各action由spring管理。
二、Spring+Hibernate整合:
Spring整合Hibernate,是做了一个很大的调整的,因为spring可以把管理Hibernate的工作都做了,以前的hibernate.cfg.xml文件都去掉了,而将这些内容都交给了spring来管理了。
1、 applicationContext.xml文件中应该配置如下内容:
Java代码
//配置数据连接类
<bean id=“dataSource” lass=“org.apache.commons.dbcp.BasicDataSource”>
<property name=“driverClassName” value=“org.gjt.mm.mysql.Driver”>
</property>
<property name=“url” value=“jdbc:mysql://localhost:3306/test”></property>
<property name=“username” value=“root”></property>
<property name=“password” value=“root”></property>
</bean>
//配置session工厂类
<bean id=“sessionFactory”
class=“org.springframework.orm.hibernate3.LocalSessionFactoryBean”>
<property name=“dataSource”>
<ref bean=“dataSource” />
</property>
<property name=“hibernateProperties”>
<props>
<prop key=“hibernate.dialect”>
org.hibernate.dialect.MySQLDialect
</prop>
<prop key=“hibernate.show_sql”>true</prop>
</props>
</property>
<property name=“mappingResources”>
<value>com/hejianjiao/vo/Person.hbm.xml</value>
</property>
</bean>
2、可以使用spring中的HibernateDAOSupport与HibernateTemplate类来进行数据持久化操作:
A、HibernateDAOSupport类中定义了对session、sessionFactory的操作方法与getHibernateTemplate方法来获得一个HibernateTemplate实例;
B、HibernateTemplate类中定义了对数据持久化的各种封装的方法,我们可以用它来对数据进行操作。
因此在使用时,我们可以继承HibernateDAOSupport类,然后实例化HibernateTemplate类来进行数据持久化。
三、 组合开发中的一些问题:
1、 在组合开发中,常见的一个问题就是session的管理,当我们使用HibernateTemplate操作数据库时,可以不对session进行显示的操作,spring可以自动处理session的打开与关闭。
我们可以在web.xml文件中显示的配置一个session管理的过滤器,它专门帮助我们关闭session:
Java代码
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframwork.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
注:它一定要在struts2的过滤器之前。因为web.xml文件的过滤器执行是有顺序的。而session一定在前面进行。
Java代码
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframwork.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
注:它一定要在struts2的过滤器之前。因为web.xml文件的过滤器执行是有顺序的。而session一定在前面进行。它会在所有的action处理完了,页面显示完了,就会自动关闭session。
六、 spring事务处理
1、事务的处理也交给了spring来管理,要在applicationContext.xml文件中上配置事务管理类:
Java代码
//实施事务管理的bean
<bean id=”transactionManager”
class=”org.springframwork.orm.hibernate3.HibernateTransactionManager”>
<property name=”sessionFactory”>
<ref bean=”sessionFactory” />
</property>
</bean>
它是通过sessionFactory来管理,因此在传进来一个sessionFactory来接管事务处理。
2、 声明式事务处理:
在spring中对事务进行管理时,可以显示地进行事务处理的定义:
//给事务添加的属性
Java代码
<tx:advice id=”txAdvice” transaction-manager=”transactionManager”>
<tx:attributes >
<tx:advice id=”txAdvice” transaction-manager=”transactionManager”>
<tx:attributes >
//propagation表示的是事务的传播特性,使用required时,是当检测到add开头的方法时,就看此时有没有开启的事务,如果有则将方法放进事务中去,如果没有,则新建一个事务。然后将方法放进去。
Java代码
<tx:method name=”add*” propagation=”REQUIRED”>
<tx:method name=”delete*” propagation=”REQUIRED”>
<tx:method name=”update*” propagation=”REQUIRED”>
//如果检测到其它的方法,则给其只读数据库的属性。即当本方法在读时,其它的方法不能再去写了。保证一个事务的完整性。
Java代码
<tx:method name=”*” read-only=”true”>
</tx:attributes>
</tx:advice>
对于事务的其它传播属性,则可以参考其它文档进行相关的了解。
上一个配置是针对于所有包中类的事务处理方法的设置。下面一段是<aop:config/> 的定义,它确保由 ‘txAdvice’ bean定义的事务通知在应用中合适的点被执行。首先我们定义了 一个切面,它匹配 HibernateDAO 接口定义的所有操作,我们把该切面叫做 ‘allManagerMethod’。然后我们用一个通知器(advisor)把这个切面与 ‘txAdvice’ 绑定在一起,表示当 ‘allManagerMethod’ 执行时,’txAdvice’ 定义的通知事务逻辑将被执行。这就是AOP切面工程:
Java代码
<aop:config>
<aop:pointcut id=”allManagerMethod”
expression=”execution(* com.hejianjiao.hibernate.HibernateDAO.*(..))”/>
//调用上面配置的事务属性,可以将它给本aop pointcut。
<aop:advisor advice-ref=”txAdvice” pointcut-ref=”allManagerMethod”/>
//如果还有其它的定义,则可以再加上pointcut、advisor来定义本切面点的事务逻辑。
</aop:config>
</aop:config>//expression中的内容是要执行本切面的一个接口,中的所有方法:如:一个接口中定义了操作数据的方 法:com.hejianjiao.hibernate.HibernateDAO,则下面execution括号中的内容就为:* com.hejianjiao.hibernate.HibernateDAO.*(..)。而如果在com.hejianjiao.hibernate 包中还有其它的类也有操作方法,我们要一起定义的话,就可以写为:* com.hejianjiao.*.*(..),其中(..)表示的是方法,前面的第一个*是操作的接口或者类。
上面的配置将为由 ‘HibernateDAO’ 定义的bean创建一个代理对象,这个代理对象被装配了事务通知,所以当它的相应方法被调用时,一个事务将被启动、挂起、被标记为只读,或者其它(根据该方法所配置的事务语义)。
Spring+Hibernate+Struts2整合文档
一、Spring+Struts2整合:
1、spring配置在web.xml文件中的上下文监听器:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframwork.web.content.ContextLoaderListener</listener-class>
</listener>
2、struts2配置在web.xml文件中的过滤器:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-patter>/*</url-patter>
</filter-mapping>
3、设置struts.xml文件,就可以使用spring的IOC来管理struts的Action:
默认的的就是spring,可以不写
<content name=“struts.objectFactory” value=“spring” >
4、第三步设置后,以后在struts.xml 文件中配置一个action时,它的class就不是一个类了,而是在applicationContext.xml文件中定义过的类的ID,在struts.xml文件中就只需要引用定义好的类的id 就可以了。
然后特别要注意的一个问题:action是一个请求就是一个action对象,而在spring中则不是的,它是自动分配类的实例的,是使用的单 态模式来生产类的实例的,不符合action,因此在applicationContext.xml文件中定义每个action时,都要在类后加上:
scope=“prototype” 属性
scope="prototype" 属性三、 三者组合开发:
一般在组合开发时,没有什么难的,只要把上面两步做好就可以是三个组合开发了。
对于进行组合开发时,一般使用的系统架构:
1、 先从最底层开发,先开发POJO类,和Hibernate映射文件。它相当于系统的数据库层。
2、 再开发DAO层,它是对于数据进行持久化的一层,专门处理各种数据增、删、改、查的功能。并且使用DAO工厂模式,以保证和上层没有任何的联系,并且可以方便于类与接口的扩展。
3、 第三是开发manager层,它相当于软件的业务逻辑层,即专门处理各种业务逻辑。实现系统的业务处理功能。并且它隔离事务,使与下层的数据持久和上层的数据操作没有任何的联系。
4、 Action层,也即软件的表示层,处理action的接收与回复。各action由spring管理。
二、Spring+Hibernate整合:
Spring整合Hibernate,是做了一个很大的调整的,因为spring可以把管理Hibernate的工作都做了,以前的hibernate.cfg.xml文件都去掉了,而将这些内容都交给了spring来管理了。
1、 applicationContext.xml文件中应该配置如下内容:
Java代码
//配置数据连接类
<bean id=“dataSource” lass=“org.apache.commons.dbcp.BasicDataSource”>
<property name=“driverClassName” value=“org.gjt.mm.mysql.Driver”>
</property>
<property name=“url” value=“jdbc:mysql://localhost:3306/test”></property>
<property name=“username” value=“root”></property>
<property name=“password” value=“root”></property>
</bean>
//配置session工厂类
<bean id=“sessionFactory”
class=“org.springframework.orm.hibernate3.LocalSessionFactoryBean”>
<property name=“dataSource”>
<ref bean=“dataSource” />
</property>
<property name=“hibernateProperties”>
<props>
<prop key=“hibernate.dialect”>
org.hibernate.dialect.MySQLDialect
</prop>
<prop key=“hibernate.show_sql”>true</prop>
</props>
</property>
<property name=“mappingResources”>
<value>com/hejianjiao/vo/Person.hbm.xml</value>
</property>
</bean>
2、可以使用spring中的HibernateDAOSupport与HibernateTemplate类来进行数据持久化操作:
A、HibernateDAOSupport类中定义了对session、sessionFactory的操作方法与getHibernateTemplate方法来获得一个HibernateTemplate实例;
B、HibernateTemplate类中定义了对数据持久化的各种封装的方法,我们可以用它来对数据进行操作。
因此在使用时,我们可以继承HibernateDAOSupport类,然后实例化HibernateTemplate类来进行数据持久化。
三、 组合开发中的一些问题:
1、 在组合开发中,常见的一个问题就是session的管理,当我们使用HibernateTemplate操作数据库时,可以不对session进行显示的操作,spring可以自动处理session的打开与关闭。
我们可以在web.xml文件中显示的配置一个session管理的过滤器,它专门帮助我们关闭session:
Java代码
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframwork.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
注:它一定要在struts2的过滤器之前。因为web.xml文件的过滤器执行是有顺序的。而session一定在前面进行。
Java代码
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframwork.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
注:它一定要在struts2的过滤器之前。因为web.xml文件的过滤器执行是有顺序的。而session一定在前面进行。它会在所有的action处理完了,页面显示完了,就会自动关闭session。
六、 spring事务处理
1、事务的处理也交给了spring来管理,要在applicationContext.xml文件中上配置事务管理类:
Java代码
//实施事务管理的bean
<bean id=”transactionManager”
class=”org.springframwork.orm.hibernate3.HibernateTransactionManager”>
<property name=”sessionFactory”>
<ref bean=”sessionFactory” />
</property>
</bean>
它是通过sessionFactory来管理,因此在传进来一个sessionFactory来接管事务处理。
2、 声明式事务处理:
在spring中对事务进行管理时,可以显示地进行事务处理的定义:
//给事务添加的属性
Java代码
<tx:advice id=”txAdvice” transaction-manager=”transactionManager”>
<tx:attributes >
<tx:advice id=”txAdvice” transaction-manager=”transactionManager”>
<tx:attributes >
//propagation表示的是事务的传播特性,使用required时,是当检测到add开头的方法时,就看此时有没有开启的事务,如果有则将方法放进事务中去,如果没有,则新建一个事务。然后将方法放进去。
Java代码
<tx:method name=”add*” propagation=”REQUIRED”>
<tx:method name=”delete*” propagation=”REQUIRED”>
<tx:method name=”update*” propagation=”REQUIRED”>
//如果检测到其它的方法,则给其只读数据库的属性。即当本方法在读时,其它的方法不能再去写了。保证一个事务的完整性。
Java代码
<tx:method name=”*” read-only=”true”>
</tx:attributes>
</tx:advice>
对于事务的其它传播属性,则可以参考其它文档进行相关的了解。
上一个配置是针对于所有包中类的事务处理方法的设置。下面一段是<aop:config/> 的定义,它确保由 ‘txAdvice’ bean定义的事务通知在应用中合适的点被执行。首先我们定义了 一个切面,它匹配 HibernateDAO 接口定义的所有操作,我们把该切面叫做 ‘allManagerMethod’。然后我们用一个通知器(advisor)把这个切面与 ‘txAdvice’ 绑定在一起,表示当 ‘allManagerMethod’ 执行时,’txAdvice’ 定义的通知事务逻辑将被执行。这就是AOP切面工程:
Java代码
<aop:config>
<aop:pointcut id=”allManagerMethod”
expression=”execution(* com.hejianjiao.hibernate.HibernateDAO.*(..))”/>
//调用上面配置的事务属性,可以将它给本aop pointcut。
<aop:advisor advice-ref=”txAdvice” pointcut-ref=”allManagerMethod”/>
//如果还有其它的定义,则可以再加上pointcut、advisor来定义本切面点的事务逻辑。
</aop:config>
</aop:config>//expression中的内容是要执行本切面的一个接口,中的所有方法:如:一个接口中定义了操作数据的方 法:com.hejianjiao.hibernate.HibernateDAO,则下面execution括号中的内容就为:* com.hejianjiao.hibernate.HibernateDAO.*(..)。而如果在com.hejianjiao.hibernate 包中还有其它的类也有操作方法,我们要一起定义的话,就可以写为:* com.hejianjiao.*.*(..),其中(..)表示的是方法,前面的第一个*是操作的接口或者类。
上面的配置将为由 ‘HibernateDAO’ 定义的bean创建一个代理对象,这个代理对象被装配了事务通知,所以当它的相应方法被调用时,一个事务将被启动、挂起、被标记为只读,或者其它(根据该方法所配置的事务语义)。
发表评论
-
JVM配置详解及调优
2012-06-21 14:13 1076堆大小设置 JVM 中最大 ... -
WABACUS框架介绍
2012-05-17 10:07 2108... -
JAVA开发性能调优
2012-05-09 11:41 975下面是参考网络资源总结的一些在Java编程中尽可能要做到 ... -
使用WFetch查看HTTP请求、响应报文
2012-05-07 10:36 1304WFetch界面比较简陋,但是已经满足我的一般需求了。想 ... -
java命令行指定JDK运行环境
2011-12-14 22:05 2730set path=C:/Program Files/J ... -
ibaitis 级联查询
2011-04-12 13:10 2477使用iBatis开发已经有一年了,这一年来不管愿意不愿意,喜欢 ... -
关于struts2 遍历Map最全的总结
2011-04-06 16:44 962Struts2 中iterator标签遍 ... -
Struts2+JSON+jQuery实现异步交互数据时选择要序列化的属性(一注解方式)
2011-03-29 00:59 1581在使用Struts2的JSON插件,实现Action中的属性序 ... -
struts2 + jquery struts2 处理json
2011-03-28 14:10 2436<package name="default& ... -
cascade 与 inverse区别
2011-03-15 09:58 1011一、cascade 1.概述 ... -
hibernate fetch的select 和 join的区别
2011-03-11 17:15 3620join 查询的时候,是用一条语句查处所有记录,包括关联表记录 ... -
深入struts2的配置文件 struts2标签解释
2011-03-08 22:59 1704[color=darkred][/color]深入struts ... -
ajax访问SSH2返回connect异常的处理
2011-03-08 22:38 1502在struts2 pojo action中有对象属性的,并被h ... -
ssh dao设计
2011-03-07 23:45 1146spring和hibernate 泛型:http://lbxh ... -
ldap查询条件
2010-08-30 09:19 2588定义查询过滤器(Search Filter Definitio ... -
在CXF中用JAXB数据绑定支持HashMap类型
2010-07-22 10:00 1634在CXF中用JAXB数据绑定支持HashMap类型 ... -
java.lang.NoSuchMethodError: com.sun.xml.ws.api.server.WSEndpoint.getPolicyMap()
2010-07-20 16:42 4516在使用CXF 和spring发布WEB服务时出现了java.l ... -
jax ws 注释详解
2010-07-09 10:38 2694基于 XML 的 Web Service 的 Java A ... -
Rest 和 soap比较
2010-07-07 15:48 1144我有这样一个推断,在计算机世界中,但凡那些让开发人员记住的重要 ... -
serviceMix发布webservice服务
2010-07-07 09:44 2884利用serviceMix对外发布外部的webservice服务 ...
相关推荐
整合了Spring、SpringMVC、Hibernate三大框架,成功实现了Spring管理Hibernate事务并实现基本增删查改。用maven管理jar包,数据库用的Mysql。
java事务管理&ssh整合笔记
通过自己的努力,终于把SSH2整合起来并测试通过了,现在呢,把它拿出来和大家分享一下,使得正在接触这个东西的朋友和正在困难中的朋友们能少走弯路,在spring配置文件里,我没有添加事务,要是需要的话,大家可以再...
SSH整合的例子 带SQL语句 很全的一个例子. 增加AOP事务处理
SSH整合,纯注解,包含事务,零配置,代码高度复用
这是我在找工作时候总结的关于ssh的所有东西,希望对大家有所帮助,很详细很具体,看了不会后悔的...
Struts2、Spring与Hibernate整合应用 ————学生成绩管理系统 要求: (1) 整合Struts2、Spring和...掌握Spring的开发步骤,理解依赖注入、AOP、事务管理等 掌握Struts2、Spring和Hibernate框架的整合 掌握分页技术
J2EE SSH2架构设计 Struts2.1.8+Spring2.5.6+Hibernate3.3整合,采用AOP事务管理方式
简单的SSH项目整合案例,功能:客户信息的增,删,改,查,使用注解,事务,dataSource, C3P0 数据源
struts2+spring+hibernate ssh 整合+spring声明式事务管理
项目实现了三大框架整合(含jar包), 实现了登录权限拦截 实现了分页功能 实现了公共dao 使用dbcp数据源 spring事务管理 log4j日志管理
SSH框架整合录像 解决包冲突 sessionFactory 问题 project的命名经验 事务的配置
ssh整合(图)+J2EE规范+申明事务
java基于SSH框架的学生成绩管理系统源码。要求: (1) 整合Struts2、Spring和Hibernate框架 (2) 实现“登录”功能 (3) 实现“学生信息管理”功能 (4) 实现“学生成绩管理”功能 (5) 实现分页功能 目的...
1. 导入jar包 2. 搭建struts2环境 3. 搭建Hibernate环境 4. 搭建Spring环境 5. struts2和spirng整合 6. spring和hibernate整合 7. 在dao中使用HibernateTemplate的对象 8. 配置事务
集成了Spring 3.2.2 Hibernate 3.3.2 Struts 2.3.4 用JPA的注解实现orm 不用创建数据库表 只需本机上有oracle即可 用JSR注解进行Spring的...用Spring Test整合Junit4 进行测试并自动事务回滚 不对数据库造成持久化操作
spring3,hibernate3,struts2整合所需的全部jar包(包括spring事务管理)
NULL 博文链接:https://dreamoftch.iteye.com/blog/1935668
Srping+SpringMVC+hibernate搭建,其中包含了详细的配置文件的功能注释,例如:声明式事务管理的两种实现方式(注解式与配置式),还有不同连接池的配置(apache.dbcp/alibaba.druid.pool),不同数据库连接(Oracle/...
SSH整合完成了Dept、Emp两张表的CRUD,有事务+日志记录异常。