论坛首页 Java企业应用论坛

struts+Spring+hibernate实践总结

浏览 6081 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (1)
作者 正文
   发表时间:2008-12-13  

   最近在学struts+spring+hibernate,想做个教务支持系统,先去网上查了查资料,做了个最简单的登陆操作,熟悉下整体结构和环境配置,期间还是遇到了不少挫折的。经过2天的奋战,终于把这个简单的登陆操作给实现了。主要的实施步骤可见上上篇帖子《struts+spring+hibernate实践》,也是从网上找来的。针对实践中遇到的问题做如下总结:

1.       myelipse6.5环境下(其他版本的myeclipse没试过),改动java文件和配置文件,如:web.xml, strut-config.xml,applicationContext.xml,是需要重新deploy一下才能起作用的。

2.       导入spring库的时候,最好把同一个版本的库都导进来,为方便后面使用,比如对plugIn的添加:org.springframework.web.struts.ContextLoaderPlugIn

3.       使用struts1.2+spring1.2+hibernate3.1搭配比较好,其他的版本搭配的时候会出问题,就是在使用database reverse 工程生成POJOhbm文件的时候,会在applicationContext.xml中的sessionFactory bean里面添加一个mappingResource,就是这个hbm文件,格式如下:

   <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>

           </props>

       </property>

       <property name="mappingResources">

           <list>

              <value>com/tss/beans/User.hbm.xml</value></list>

       </property></bean>

 红色部分就是添加POJOhbm文件后自动加到这个bean里面的,这句会导致servlet action不可用。使用struts1.2+spring1.2+hibernate3.1就不会出现这个问题。

4.       singleton属性只有在spring1.2中的bean里面才有,在spring2.0中,bean没有“singleton”这个属性,而是在“scope”中对它进行设定。“scope”可以设定为“singleton”“prototype”默认情况下是“singleton”即和原先的“singleton=true”性质一样,如果要实现单例模式则将“scope”设定为“prototype”,即和原先版本的“singleton=false”一样。

5.       在一个bean里面,property是指这个bean对应的类里面定义的一个对象,你得在这个bean对应的那个类里面定义setter这个对象的方法,比如你在loginAction这个类里面定义了userDAO,那么你就要有setUserDAO()方法;userDAO的类型在ref种定义,格式如下:

<bean name="/login" class="com.seta.struts.action.LoginAction" singleton="false">

       <property name="userDAO">

           <ref bean="userDAO" />

        </property>  

    </bean>

Ref 后可以有bean=或者local=,区别在于bean=是在这个contextapplication中搜索,local只是在本文件中搜索这个bean的定义,后者效率较高。 你也可以通过中间代理来管理对数据库的增删改查的操作, 如下:

<bean name="/login" class="com.seta.struts.action.LoginAction" singleton="false">

       <property name="userDAO">

           <ref bean="userDAOProxy" />

        </property>  

    </bean>

这个proxy的定义如下:

<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

    <property name="transactionManager">

   <ref bean="transactionManager" />

    </property>

    <property name="target">

   <ref local="userDAO" /><!—这里调用我们自己实现的userDAO bean,对应的class是它的实现类à

    </property>

    <property name="transactionAttributes">

     <props>

    <prop key="insert*">PROPAGATION_REQUIRED</prop>

    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>

    <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>

     </props>

    </property>

    </bean>

6.   

   发表时间:2008-12-15  
直接学struts2吧。。。。。
0 请登录后投票
   发表时间:2008-12-15  
是啊,struts2比struts1的配置要方便多了。
0 请登录后投票
   发表时间:2008-12-15  
如果要实现单例模式则将“scope”设定为“prototype”
你这句写错了把 prototype 是按原型的 应该每次都产生不同的实例才对~!
0 请登录后投票
   发表时间:2008-12-15  
singleton是Spring以前版本的写法.
0 请登录后投票
   发表时间:2008-12-15  
这段代码太熟悉了
<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

    <property name="transactionManager">

   <ref bean="transactionManager" />

    </property>

    <property name="target">

   <ref local="userDAO" /><!—这里调用我们自己实现的userDAO bean,对应的class是它的实现类à

    </property>

    <property name="transactionAttributes">

     <props>

    <prop key="insert*">PROPAGATION_REQUIRED</prop>

    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>

    <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>

     </props>

    </property>

    </bean>
0 请登录后投票
   发表时间:2008-12-16  
luopw123 写道

如果要实现单例模式则将“scope”设定为“prototype” 你这句写错了把 prototype 是按原型的 应该每次都产生不同的实例才对~!

笔误,多谢斧正。
0 请登录后投票
   发表时间:2008-12-22  
关于楼主的实践项目,我想知道楼主是如何管理 hibernate 中的session和事务的?

是交给spring 自动处理?
0 请登录后投票
   发表时间:2009-01-13  
suan2046 写道

关于楼主的实践项目,我想知道楼主是如何管理 hibernate 中的session和事务的? 是交给spring 自动处理?

对,交给Spring来管理。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics