`

老到掉渣的Struts+hibernate+Spring 整合

阅读更多
Struts,Spring与hibernate集成:
1、在工程中导入spring支持,导入的Jar包有:
* Spring 2.0 Core Libraries
* Spring 2.0 ORM/DAO/Hibernate3 Libraries
* Spring 2.0 AOP Libraries
* Spring 2.0 Web Libraries
2、在Spring配置文件中配置dataSource和SessionFactory,将hibernate配置与Spring配置整合在一起(可以删除hibernate.cfg.xml文件);
3、导入数据库源所要使用的Jar包,如:DBCP所用的JAR包(commons-pool.jar);
4、修改所有DAO的hibernate实现,因为Spring中提供了一个HibernateDAOSupport类,可以简化数据库的操作。使用所有DAO类都继承自该类;
5、将DAO采用依赖注入的方式注入到Biz中,再将Biz采用依赖注入的方式注入到Action中,在Spring配置文件中做相应配置;
6、将Spring与Struts集成:
1)在spring配置文件配置Action:将Biz注入到Action中;
2)修改Struts的配置文件:将Action的type属性修改为:org.springframework.web.struts.DelegatingActionProxy;
3)在web.xml文件中配置监听器以及web应用的初始化参数:
<!-- 向监听器类中传递初始化参数,以获取beanFactory对象 -->
  <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml /WEB-INF/applicationContext-beans.xml</param-value>
  </context-param>
 
  <!-- 使用监听器初始化Spring的beanFactory,并将其放入到Context中,在使用时将其取出,以获取IOC容器中的bean -->
  <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
7、为了解决应用中的中文乱码问题,我们可以不用自己开发过滤器类,Spring为我们提供了一个,只需要配置一下即可:
<!-- 使用Spring中的过滤器解决中文乱码问题 -->
  <filter>
  <filter-name>characterEncodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.Charact[color=brown][/color]erEncodingFilter</filter-class>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
  </init-param>
  </filter>
 
  <filter-mapping>
  <filter-name>characterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
8、为了解决hibernate延迟加载的问题,使用Spring中提供的过滤器来解决,它能够让Session
在请求解释完成之后再关闭,配置方式如下:
<!-- 解决hibernate延迟加载带来的异常,配置过滤器使Session在请求完成之后再关闭 -->
  <filter>
  <filter-name>hibernate session manager filter</filter-name>
  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  </filter>
 
  <filter-mapping>
  <filter-name>hibernate session manager filter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>
9、因为OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为FlushMode.NEVER。故进行insert、
update和delete操作时会产生异常:org.springframework.dao.InvalidDataAccessApiUsageException:
Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
因此需要采用spring的事务声明,使方法受transaction控制:
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- 配置Advice(事务的传播特性) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="search*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>

<!-- 配置事务管理器应用的范围 -->
<aop:config>
<aop:pointcut id="affectMethods" expression="execution(* edu.accp.dao.hibImpl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="affectMethods"/>
</aop:config>
10、 部署应用程序,启动服务器,如果发现异常:
java.lang.NoSuchMethodError:
org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
这是由于整合时Jar包的冲突引起的。应将"Web应用程序/WEB-INF/lib/asm-2.2.3.jar"删除即可。
分享到:
评论

相关推荐

    gwt-2.0.3.rar

    老到掉牙的版本,不好找了,有需要的拿走。

    前端html+css 实现表白网页

    等我们老到哪儿也去不了, 还能满载着一生的幸福快乐。 我愿意爱你直到老去, 我会为我们的未来撑起一片天空, 为我们的将来担负起一生的责任, 愿意为你去做每一件能让你开心快乐的事。 所有我们经历的点点滴滴, ...

    Apollo-Pilot-Safety-Report-2018-安全报告.pdf

    经验老到的国宾司机-行为安全 3.1 ADS自动驾驶场景库 3.2 DPS策略库 3.3监控和诊断系统 3.4危险应对能力 站在巨人的肩膀上-功能安全 4.1安全流程 4.2功能安全设计 4.3预期功能安全 。。。 。。。 承担...

    NOD32自动换id免密码

    NOD32自动换id免密码,自己自动更换,不用老到网上找,麻烦死了

    佳能打印机通用清零程序

    含概从老到新的型号,使用操作方便,可对机器执行,清零,强力清洗等

    三层架构详解

    关于三层的详细解释,作者是以为经验老到的开发人员,内容与经验相结合,非常详尽!

    合肥盆地重力异常特征及其地质意义 (2005年)

    通过不同阶次小波细节特征的比较以及同布格异常总的特征比较,得到了一些盆地边界断裂及沉积范围随时代从老到新的动态变化信息.西界断裂周集一吴集断裂可以向南延伸至大别造山带;南部边界在舒城至晓天间随时代从...

    华工科技汽车白车身激光焊接技术详解.doc

    华工科技副总裁邓家科介绍,近期,在汽车白车身激光焊接上经验老到的华工激光,已瞄准了上海通用。该品牌企业某高端车型的激光焊

    《獾的礼物》绘本故事PPT模板

    儿童绘本故事PPT下载:《獾的礼物》PPT;...他已经很老了,老到几乎无所不知,老到知道自己快要死了。 獾并不怕死。死,仅仅是意味着他离开了他的身体,獾不在乎。因为随着岁月的流逝,他的身体早就不听使唤

    煤炭地址问题解析解答详情

    9地层单位:地层在整个地质时期,由老到新逐次形成的,因而便使有可能将地层按它们形成的先后次序进行分段,划分成若干个不同级别的分层单位,即地层单位。 10地质年代:研究地壳的历史,以反映各种地质事件发生的...

    柴达木盆地北缘前泥盆纪构造格架及欧龙布鲁克古陆块地质演化 (2004年)

    最近,越来越多的区域...综合区内沉积作用、岩浆活动、变质作用和构造运动等特征,将欧龙布鲁克古陆块地质演化由老到新分为7个演化阶段,即古元古代古陆块形成阶段、中元古代陆内沉降阶段、中-新元古代Rodinia超大陆汇聚

    金鸿山地区侏罗系地层划分和构造控煤分析-论文

    通过该区最近几年投入的一些地质工作,总结前人成果,通过岩石地层学、构造学等方法,对该区侏罗系地层划分、构造控煤规律进行综合分析,认为本区侏罗系地层由老到新划分为侏罗系中统大煤沟组(J2d)、侏罗系中统...

    linux rpm 安装文件

    linux rpm 安装文件 bzip2-devel-1.0.6-26.el8.x86_64.rpm cpp-8.3.1-4.5.el8.x86_64.rpm elfutils-libelf-devel-0.176-5.el8.x86_64.rpm expat-devel-2.2.5-3.el8.x86_64.rpm fontconfig-devel-2.13.1-3.el8....

    ediary-3.4.1.zip.7z

    eDiary (电子日记本) 软件 软件特点: ·界面简单清新,支持皮肤切换; ·严格的数据加密机制,充分保护用户隐私; ·强大的编辑功能,编辑器体验和 Word 一致; ·支持日记模板功能,并预置常用模板;...

    文字服务程序故障

    文字服务和输入语言检测到不兼容的键盘驱动程序该对话框已被停用故障解决方法

    破解电信送的E家无线猫

    破解电信送的E家无线猫,听说是可以用,不过我自己没用过

    putty-64bit-0.74-installer.msi.7z

    连接linux和上传文件至linux的轻量级工具

    Apache_OpenOffice_4.1.9_Win_x86_install_zh-CN.exe

    开源办公软件,新界面

    elastic-job-lite-console-2.1.5.tar.gz

    elastic-job控制台

    java-11-openjdk-11.0.9.11-3.windows.redhat.x86_64.msi

    openjdk11

Global site tag (gtag.js) - Google Analytics