论坛首页 入门技术论坛

Struts+Hibernate+Spring整合要素

浏览 10565 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-02  
 

一说起传说中的SSH(Struts+Spring+Hibernate)架构,许多人的心里面就没有底。

依照本人来看,所谓的整合没有什么神秘的,只不过就是让三个框架在一起协同的工作,我们做的主要工作就是让其知道彼此的存在,打成“统一战线联盟”以后,再各自为战,互不干扰。

下面就本人知道的一些整合方法一一叙述。

1  Struts+Spring

主要就是让Struts知道Spring的存在,我们可以采用两种办法。

(1) 运用Struts的插件方法,添加struts-congif.xml的<plug-in>节点。

示例代码如下:

xml 代码
  1. <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">  
  2.         <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />  
  3.     </plug-in>   

上段代码意图很简单:把Struts的配置文件和Spring的配置文件联系起来,这样Struts就知道了Spring的存在。

另外,在web.xml里面需要配置一个Spring的监听器,示例代码如下:

xml 代码
  1. <listener>  
  2.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  3.     </listener>   

第一种方法完毕。

(2) 直接在web.xml里面进行加载。

这种方法与上种方法的不同之处在于Spring的配置文件加载的位置不同,上种方法是在struts-cong.xml中声明,而这种方法是在web.xml里面进行声明,示例代码如下:

xml 代码
  1. <context-param>  
  2.         <param-name>contextConfigLocation</param-name>  
  3.         <param-value>  
  4.             /WEB-INF/applicationContext-module1.xml,   
  5.             /WEB-INF/applicationContext-module2.xml  
  6.         </param-value>  
  7.     </context-param>  

这样我们就实现了第二种方法的SS整合。

问题至于我们还要遇到一个小问题,那就是Struts如何实用Spring的特性?Struts怎么就知道Spring注入的Bean呢?当然,这需要我们进行编程式的声明,众所周知,在Strus的Action里面有一个setServlet方法,我们此时就需要覆盖这个方法,当ActionServlet把请求转发到此Action时,Action就可以实用Spring的特性。

示例代码如下:

 

java 代码
  1. import org.springframework.context.ApplicationContext;   
  2. import org.springframework.web.context.support.WebApplicationContextUtils;   
  3.   
  4. public void setServlet(ActionServlet actionServlet) {   
  5.         try {   
  6.             super.setServlet(actionServlet);   
  7.             ServletContext servletContext = actionServlet.getServletContext();   
  8.             context = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);   
  9.         } catch(Exception e) {   
  10.             e.printStackTrace();   
  11.         }   
  12.     }  

 

其中context是ApplicationContext的实例,有了上串代码以后我们就可以以下面的方式进行Spring的特性利用了!

java 代码
  1. protected IXjdjService getXjdjServiceImp(){   
  2.         return (IXjdjService) context.getBean("xjdj");   
  3.     }  

到此OK,Struts与Spring的整合成功。

2 Spring+Hibernate

可以说Spring与Hibernate的整合是非常完善的,具体要素如下:

在Hibernate中,最重要的无非就是两点,一是配置数据库连接池,二是配置实体类的映射文件。现在我贴出上述两点在Spring里面是怎么配的,配置完毕以后,我们完全可以删除hibernate.cfg.xml文件。示例代码如下:

xml 代码
  1. <bean id="dataSource"     
  2.         class="org.springframework.jdbc.datasource.DriverManagerDataSource">     
  3.         <property name="driverClassName">     
  4.             <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>     
  5.         </property>     
  6.         <property name="url">     
  7.             <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=EXAM</value>     
  8.         </property>     
  9.         <property name="username">     
  10.             <value>sa</value>     
  11.         </property>     
  12.         <property name="password">     
  13.             <value>135780</value>     
  14.         </property>     
  15.     </bean>     
  16.     <!-- 配置Hibernate会话工厂 -->     
  17.     <bean id="sessionFactory"     
  18.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">     
  19.         <property name="dataSource">     
  20.             <ref bean="dataSource" />     
  21.         </property>     
  22.         <!-- 在此可以配置Hibernate会话工厂的属性 -->     
  23.         <property name="hibernateProperties">     
  24.             <props>     
  25.                 <prop key="hibernate.dialect">     
  26.                     org.hibernate.dialect.SQLServerDialect      
  27.                 </prop>     
  28.                 <prop key="hibernate.show_sql">true</prop>     
  29.                      
  30.              </props>     
  31.         </property>     
  32.         <!-- 在此可以匹配*.hbm.xml映射文件 -->     
  33.         <property name="mappingDirectoryLocations">     
  34.             <list>     
  35.                 <value>     
  36.                     classpath:/com/wjh/comm/framework/bean      
  37.                 </value>     
  38.                    
  39.             </list>     
  40.         </property>     
  41.         <property name="mappingResources">  
  42.            <list>  
  43.                 <value>com/wjh/example/User.hbm.xml</value>  
  44.           </list>  
  45.  </property>  
  46. </bean>   

OK,到此就完成了Spring+Hibernate的整合,纵观整个过程,我们可以发现一点,那就是所谓的整合就是他们配置文件的融合,只要抓住这一点,再复杂的程序也会变的简单。

网友经常说,我也是这么做的,但是总是不成功。说实在的这个东西理论很简单,但是实际操作起来确实要费一番周折,大家在整合过程中出现了什么问题,不妨贴出来,我们一起讨论讨论!

   发表时间:2007-10-04  
在下最近也在学习struts与spring,对于楼主所说深有感触。楼主所介绍的2种方法在下也都用在了最近的练习中,但在使用第一种方法的时候遇到了一些问题,再三检查也未能找出问题所在,能否帮在下指点一下。多谢。
http://www.iteye.com/topic/129024
0 请登录后投票
   发表时间:2007-10-08  
能否再加一个
Struts+Spring+Hibernate
的?
0 请登录后投票
   发表时间:2007-10-08  
所谓的整合就是这个样子。
当然如果想要比较优雅的使用这种整合,也要看你的应用程序架构怎么样!!!
0 请登录后投票
   发表时间:2008-03-06  
有没有一下例子下载呀?
0 请登录后投票
   发表时间:2008-04-23  
先谢谢楼主了。 如果用MyEclipse 自代的功能进行整合是不是很好呢?
0 请登录后投票
   发表时间:2008-09-24  
楼主别误人子弟了。。。你好好看看你的代码 错误的地方很多 这种东西怎么能放到网上》?
0 请登录后投票
论坛首页 入门技术版

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