整合spring2 + struts1.2 + hibernate3(转载)

好久没有做过java的项目了,关于java的技术也就显得生疏了。于是便跑到java社区逛了逛,其中有个目前各种framework的调查,struts作为经典的MVC框架还是遥遥领先,45%左右,而spring和habernate便是以绝对的优势压倒群雄,分别在80%以上,显然2008还是SSH的天下,于是乎,我重温旧梦,再次对其整合。

1 可恶的myeclipse 为了开发方便,我选择了myeclipse,因为它集成了很多框架,而不致于自己去倒入很多lib。但就是因为这一点,成了我这次组合的致命伤。SSH因为其是开源框架,自然需要倒入很多lib,而且他们各自为政,结果就导致了lib之间的冲突。当我自启动tomcat时,总是报错 org.hibernate.MappingException: Unknown entity:我还以为是自己映射没有做好。但是映射是myeclipse自带工具映射的,我也检查了很多次,因该没有问题。于是百度了下,帖子很多,可就是没有解决实际问题的。折腾了几个小时,还是没有搞定,都想放弃了睡觉了,可是就因为这个问题没有解决睡不着,有爬起来google。最后皇天不负有心人,终于解决了这个问题,但是我也差点吐血。原来是倒入的包有问题,asm-3.这个包删除掉,就ok了。无语!!不过还是得感谢那位无名的大哥,大家把自己的成果分享出来确实不错。

2 web.xml 在web配置文件中,加入以下内容。

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/action-servlet.xml /WEB-INF/applicationContext.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

3 struts-conf.xml spring 对struts的支持有3种模式,分别是代理模式,控制器继承和插件模式,这里我选用控制器模式。即不再使用struts原有的controller处理器,而采用spirng的controller处理器,实际上spring的处理器继承了struts.所以我说它是继承模式。修改的struts如下

<controller>
<set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/>
</controller> 如果有需要,我们自己也可继承这个处理器,添加自己的方法。配置好处理器后,struts的action配置,其中type可要可不要。

<action
attribute="loginForm"
input="/login.jsp"
name="loginForm"
path="/login"
scope="request"
type="com.tlb.web.action.LoginAction" >
<forward name="success" path="/view/music/listMusic.jsp"></forward>
<forward name="failure" path="/error.jsp" ></forward>
</action>

applicationContent.xml文件中的bean的name属性一定要和action的path的名称相同

<bean name="/login" class="com.tlb.web.action.LoginAction" scope="prototype" autowire="byName">
<property name="service" ref="service"></property>
</bean>

就这样struts的action便可以使用spring的IOC特性了。



4 spring集成hibernate 首先看看配置文件

<bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/music"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</bean>

<bean name="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="mappingResources">
<list>
<value>com/tlb/db/domain/User.hbm.xml</value>
<value>com/tlb/db/domain/Song.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<bean name="userDao" class="com.tlb.db.dao.UserDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

配置好后,我们就可在DAO中调用sessionFactory进行各种操作。不再需要自己写一大堆数据库的共通类。HibernateDaoSupport 提供了丰富的方法,足够我们使用。而且由于spring对异常的封装机制,我们的程序代码,再也不需要很多的try catch 了。

public class UserDao extends HibernateDaoSupport implements IUserDao {

public void insUser(User user) throws DataAccessException {
// TODO Auto-generated method stub
this.getHibernateTemplate().save(user);
}

}

SSH的整合工作就几乎结束了,各自发挥自己的功能。虽然介绍的不详细,不过也算是自己的笔记,自己的心得罢了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值