精华帖 (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 工程生成POJO和hbm文件的时候,会在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> 红色部分就是添加POJO和hbm文件后自动加到这个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. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-12-15
直接学struts2吧。。。。。
|
|
返回顶楼 | |
发表时间:2008-12-15
是啊,struts2比struts1的配置要方便多了。
|
|
返回顶楼 | |
发表时间:2008-12-15
如果要实现单例模式则将“scope”设定为“prototype”
你这句写错了把 prototype 是按原型的 应该每次都产生不同的实例才对~! |
|
返回顶楼 | |
发表时间:2008-12-15
singleton是Spring以前版本的写法.
|
|
返回顶楼 | |
发表时间: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> |
|
返回顶楼 | |
发表时间:2008-12-16
luopw123 写道 如果要实现单例模式则将“scope”设定为“prototype” 你这句写错了把 prototype 是按原型的 应该每次都产生不同的实例才对~! 笔误,多谢斧正。 |
|
返回顶楼 | |
发表时间:2008-12-22
关于楼主的实践项目,我想知道楼主是如何管理 hibernate 中的session和事务的?
是交给spring 自动处理? |
|
返回顶楼 | |
发表时间:2009-01-13
suan2046 写道 关于楼主的实践项目,我想知道楼主是如何管理 hibernate 中的session和事务的? 是交给spring 自动处理? 对,交给Spring来管理。 |
|
返回顶楼 | |
浏览 6081 次