hibernate+spring+struts2整合

这三个都是java的知名框架(SSH)
struts2,作为控制器,也就相当于servlet,采用拦截器机制处理用户的请求。
hibernate,持久化框架。
spring,java分层的轻量级框架。用来管理,提供依赖注入,切面等。
如有错误,欢迎指正。
SSH框架整合
首先时web.xml配置,hibernate的一大亮点就是延迟加载,就是在你需要的时候才会真正的发送SQL语句。
加上OpenSessionInView是因为如果在首页需要在数据库加载数据时如果时延迟加载则会引发首页无数据的问题,只要使用了hibernate框架,就应该在web页面配置OpenSessionInView。

<!--web.xml配置-->
<!-- hibernateOpenSessionInView,交由spring管理,此类位与spring的orm包中,需要单独下载,openSessionInView需要配置在web.xml第一个,如果不是可能会引发问题。版本不一样,路径可能不一样-->
  <filter>
   <filter-name>openSessionInView</filter-name>
   <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>openSessionInView</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>
 
<!--struts的拦截器配置-->
  <!-- struts -->
  <filter>
   <filter-name>struts</filter-name>
   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>struts</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>
 
  <!-- tomcat启动时加载applicationContext.xml文件 -->
   <context-param> 
        <param-name>contextConfigLocation</param-name> 
        <param-value>classpath:applicationContext.xml</param-value> 
    </context-param> 
  <!-- spring监听 -->
   <listener> 
        <listener-class> 
            org.springframework.web.context.ContextLoaderListener 
        </listener-class> 
 </listener>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

applicationContext配置(我用的STS,自动增加命名空间,个人觉得方便)
<!--第一步就是配置dataSource,我这里配的时c3p0,配置大方式都是大同小异,-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  <!--驱动-->
  <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
  <!--连接地址,用户名,密码,这里使用的硬编码,也可以导入方式-->
      <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
      <property name="user" value="scott"/>
      <property name="password" value="scott"/>
   <!--连接池中保留的最大连接数。默认值: 15 -->   
           <property name="maxPoolSize" value="20"/>  
           <!-- 连接池中保留的最小连接数,默认为:3-->  
         <property name="minPoolSize" value="2"/>  
         <!-- 初始化连接池中的连接数,取值应在minPoolSize与maxPoolSize之间,默认为3-->  
         <property name="initialPoolSize" value="2"/>  
         <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0 -->   
         <property name="maxIdleTime">60</property>  
         <!-- 当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认: 0 -->   
         <property name="checkoutTimeout" value="3000"/>
         <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 -->
         <property name="acquireIncrement" value="2"/>  
         <!--定义在从数据库获取新连接失败后重复尝试的次数。默认值: 30 ;小于等于0表示无限次-->   
         <property name="acquireRetryAttempts" value="0"/>  
         <!--重新尝试的时间间隔,默认为:1000毫秒-->   
         <property name="acquireRetryDelay" value="1000" />  
         <!--关闭连接时,是否提交未提交的事务,默认为false,即关闭连接,回滚未提交的事务 -->   
         <property name="autoCommitOnClose">false</property>  
         <!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。默认值: null -->   
         <property name="automaticTestTable">Test</property>  
         <!--如果为false,则获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常,但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认: false-->   
         <property name="breakAfterAcquireFailure">false</property>  
         <!--每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 -->   
         <property name="idleConnectionTestPeriod">60</property>  
         <!--c3p0全局的PreparedStatements缓存的大小。如果maxStatements与maxStatementsPerConnection均为0,则缓存不生效,只要有一个不为0,则语句的缓存就能生效。如果默认值: 0-->   
         <property name="maxStatements">100</property>  
         <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。默认值: 0 -->   
         <property name="maxStatementsPerConnection"></property>
</bean> 
 <!-我这里使用的是用实体类生成表,实际中不是这样的,但是大同小异,我会写上注释->
 <!--sessionFactory,用来生成session,DAO(持久化层)的session就从这里获取-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <!--org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean这个类中有一个属性叫dataSource,需引用dataSource(上面配置的c3p0)数据源-->
  <property name="dataSource" ref="dataSource"></property>
  <!--全包扫描,根据entity包生成里面所有的实体类,注意,实体类如果有数据库关键字,或者实体类与表明重复,表有可能生成失败(重复一定会生成失败)-->
  <property name="packagesToScan">
   <list>
    <value>entity</value>
   </list>
  </property>
  <!--hibernate的属性配置-->
  <property name="hibernateProperties">
   <props>
    <!--第一次生成表的时候update应该改成create,之后在改为update,不然每次表都会重新生成-->
    <prop key="hibernate.hbm2ddl.auto">update</prop>
    <prop key="hibernate.format_sql">true</prop>
    <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
    <!-- <prop key="hibernate.current_session_context_class">thread</prop> -->
   </props>
  </property>
</bean>

<!--声明式事务-->
 <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory"></property>
 </bean>
<!--对事务进行管理,hibernate有五种事务机制,这里不一一说明,read-only="true"式只读事务,只能读,不能修改,name="login*"这里也使用了通配符-->
<tx:advice id="txadvice" transaction-manager="txManager">
  <tx:attributes>
   <tx:method name="login*" propagation="REQUIRED" rollback-for="java.lang.Exception" read-only="true"/>
   <tx:method name="query*" propagation="REQUIRED" rollback-for="java.lang.Exception" read-only="true"/>
   <tx:method name="Add*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
   <tx:method name="get*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
   <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
   <tx:method name="modify*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
   <tx:method name="del" rollback-for="java.lang.Exception"/>
  </tx:attributes>
 </tx:advice>
 <!--通过AOP进行事务增强,主要用于DAO层,expression="execution(* dao.*.*(..))"这里使用了通配符-->
<aop:config>
  <aop:pointcut id="allTestServiceMethod" expression="execution(* dao.*.*(..))"/>
  <aop:advisor pointcut-ref="allTestServiceMethod" advice-ref="txadvice" />
</aop:config>

<!--struts2.xml配置-->
<!--交由spring管理,高版本的struts2默认就是交给spring管理,可以打开struts的配置文件查看-->
<constant name="struts.objectFactory" value="spring"/>
<!--这里的action有两种写法-->
<!--第一种,action对应的类不用写出完全限定名,但是在applicationContext.xml里面的bean就是这里的类的名字,bean所对应的类需要写出完全限定名-->
<action name="loginAction" class="loginAction">
   <result name="success">loginOk.jsp</result>
   <result name="ERROR">index.jsp</result>
</action>

<!--第二种,action对应的类写出完全限定名,但是在applicationContext.xml里面的bean就是引用struts.xml的action的名字-->
<action name="loginAction" class="loginAction">
   <result name="success">loginOk.jsp</result>
   <result name="ERROR">err.jsp</result>
</action>
<!--DAO,BIZ,Service,impl全部都写在bean里面-->

以上就是SSH整合。SSH整合需要下载相应jar包。
如有错误,请指正。

时间: 2024-11-10 11:22:08

hibernate+spring+struts2整合的相关文章

Hibernate+Spring+Struts2整合开发中的一个分页显示方案(转载)

分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流. 1.DAO层接口的设计,在MemberDao接口中定义了如下两个方法: public interface MemberDao{        //省略了其他的代码        /**     * 分页查询     * @

struts2+hibernate+spring简单整合且java.sql.SQLException: No suitable driver 问题解决

最近上j2ee的课,老师要求整合struts2+hibernate+spring,我自己其实早早地有准备弄的,现在都第9个项目了,无奈自己的思路和头绪把自己带坑了,当然也是经验问题,其实只是用myeclipse进行整合的,本来也没那么多问题,看视频吧居然好多要手打,我不喜欢看不下去放弃了,教程把就是一堆坑,最最让人不解的是明明有一个冲突是需要解决的,但我看到的教程居然都没有提到,还有一个错误居然好多人都好像自动忽略一样,能解决我问题的都是要漫长的找,所以我一定一定要把这个过程记录下来,给第一次搞

Spring Struts2 整合

一.在Web下使用Spring原理:之前加载Spring的IoC容器是用代码ApplicationContext context = new ClasspathXml......("beans.xml");加载的.在Web中加载需要放在应用程序启动的时候加载,这可以使用监听器来实现. 1.添加jar包.2.spring配置文件.同前3.在web.xml加入配置--在web.xml空白处直接按alt+/选择 #contextloadlistener会生成代码片断. <!--配置Sp

spring,hibernate,spring框架整合

SSH框架作为javaEE最经典的框架, 初学者整合这几个框架可能也是一件比较头痛的事情(包括我自己), 下面来进行框架的整合!   一:   准备   SSH框架介绍 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet, 处于MVC的控制层,Struts 2是Struts的下一代产品,个人认为: struts2~~struts+xwork; Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表

Spring Struts2 整合出错

前天解决了Spring和Hibernate的整合 在我信心满满的时候,开始做Spring和Struts2的整合,我写了一个Action和网页,浏览器运行action时居然报错,原来是我web.xml没有增加Struts2的信息,增加后还是报错,原来不增加的时候,还可以访问index.jsp,增加了以后不能了,花了我近两天的时间,下午问了李霞,结果他也没有找出来,晚上看了好声音后只有再继续找. 我按照错误提示百度,越来越多的提示是说jar包重复,我本着这个点出发,看到项目里有Hibernate4.

Hibernate之struts2整合hibernate以及MVC分层架构的使用

 一.学习案例:通过实现会员注册功能整合struts2和hibernate,同时了解hibernate的API的使用. 二.案例分析:这章主要是MVC分层架构以及struts2和hibernate的整合思路.代码请查看演示项目. a)这次的演示项目使用了MVC分层架构.大家一定要下载演示项目进行分析. b)导入struts2和hibernate所需要的jar包 c)创建struts.xml和hibernate.cfg.xml d)在web.xml配置struts2 e)创建注册页面(regi

Hibernate + Spring (quartz) 整合懒(延迟)加载问题

开发项目的时候 在一个Job中执行了数据库操作, 用的是懒加载,但是如下错误 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: ......., no session or session was closed 项目中使用 hibernate 注解的方式配置懒加载, 不是xml配置文件, 下面列出从网上搜集到的解决方案 1, 报如下错误 org.hibernat

《Spring学习笔记》:Spring、Hibernate、struts2的整合(以例子来慢慢讲解,篇幅较长)

<Spring学习笔记>:Spring.Hibernate.struts2的整合(以例子来慢慢讲解,篇幅较长) 最近在看马士兵老师的关于Spring方面的视频,讲解的挺好的,到了Spring.Hibernate.struts2整合这里,由于是以例子的形式来对Spring+Hibernate+struts2这3大框架进行整合,因此,自己还跟着写代码的过程中,发现还是遇到了很多问题,因此,就记录下. 特此说明:本篇博文完全参考于马士兵老师的<Spring视频教程>. 本篇博文均以如下这

spring+hibernate+Struts2 整合(全注解及注意事项)

最近帮同学做毕设,一个物流管理系统,一个点餐系统,用注解开发起来还是很快的,就是刚开始搭环境费了点事,今天把物流管理系统的一部分跟环境都贴出来,有什么不足的,请大神不吝赐教. 1.结构如下 2.jar包如下 3.首先是spring.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"