Struts+Hibernate+Spring组合简单范例

开发 后端
本文介绍Struts+Hibernate+Spring组合需要注意的一些方面,并主要提供了简单的例子,各个框架的配置方法等等。

Struts+Hibernate+Spring组合相关的文章也很多了,本篇内容和Struts2.1+Hibernate3.1+Spring2.0组合相关。其实对于S2SH的组合,其实注意几点就可以了:

第一: 由于Struts2的Action是有状态,而Spring中的Bean默认为单例模式的,故一定要将Spring中配置Struts2的Action的scope设置为prototype 。而Struts1中的Action是无状态故在SSH时可以不用将Spring设置为prototype!

第二:Struts2与Spring的组合不像Struts1,它需要一个Struts2中一个struts2-spring-plugin-2.1.6.jar也不需要在struts.xml中加入其它的配置,只需将struts.xml中的action的class的值改成action在Spring中配置的Bean的id 就可以了!

简单的Struts+Hibernate+Spring例子如下:

(说明这个例子当中包括Struts2大部分的内容,主要是想体验一下Struts2的功能)

数据库如下:uid,ufristName,ulastName,uage四个字段

一,加入Spring的支持

二,加入Hibernate的支持(Hibernate的配置由Spring去管理)

三,加入Struts2的支持

四,加入Struts2对Spring的插件(struts2-spring-plugin-2.1.6.jar)

在web.xml中加入对Spring和Struts2的配置:

  1. < ?xml version="1.0" encoding="UTF-8"?> 
  2. < web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
  3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  5.  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
  6.  
  7.  < context-param> 
  8.   < param-name>contextConfigLocation< /param-name> 
  9.   < param-value>classpath*:applicationContext.xml< /param-value> 
  10.  < /context-param> 
  11.  
  12.  < listener> 
  13.   < listener-class> 
  14.    org.springframework.web.context.ContextLoaderListener  
  15.   < /listener-class> 
  16.  < /listener> 
  17.  
  18.  < filter> 
  19.   < filter-name>struts2< /filter-name> 
  20.   < filter-class> 
  21.    org.apache.struts2.dispatcher.FilterDispatcher  
  22.   < /filter-class> 
  23.  < /filter> 
  24.  < filter-mapping> 
  25.   < filter-name>struts2< /filter-name> 
  26.   < url-pattern>/*< /url-pattern> 
  27.  < /filter-mapping> 
  28.  
  29.  < welcome-file-list> 
  30.   < welcome-file>index.jsp< /welcome-file> 
  31.  < /welcome-file-list> 
  32. < /web-app> 
  33.    

UsersDAO的接口如下:

  1. public interface UsersDaoInter {  
  2.  
  3.  public abstract void save(Users transientInstance);  
  4.  
  5.  public abstract void delete(Users persistentInstance);  
  6.  
  7.  public abstract void delete(final int uId);  
  8.  
  9.  public abstract Users findById(java.lang.Integer id);  
  10.  
  11.  public abstract List findByExample(Users instance);  
  12.  
  13.  public abstract List findByProperty(String propertyName, Object value);  
  14.  
  15.  public abstract List findAll();  
  16.  
  17.  public abstract Users merge(Users detachedInstance);  
  18.  
  19. }  
  20.    

UsersService接口如下:

  1. public interface UsersServiceInter {  
  2.  
  3.  public abstract void save(Users transientInstance);  
  4.  
  5.  public abstract void delete(Users persistentInstance);  
  6.  
  7.  public abstract void delete(final int uId);  
  8.  
  9.  public abstract Users findById(java.lang.Integer id);  
  10.  
  11.  public abstract List findByExample(Users instance);  
  12.  
  13.  public abstract List findByProperty(String propertyName, Object value);  
  14.  
  15.  public abstract List findAll();  
  16.  
  17.  public abstract Users merge(Users detachedInstance);  
  18.  /**  
  19.   * 导出用户列表的Excel  
  20.   * @return  
  21.   */ 
  22.  public abstract InputStream exportUsers();  
  23.  
  24. }  
  25.    

Spring的applicationContext.xml配置如下:

  1. < ?xml version="1.0" encoding="UTF-8"?> 
  2. < beans xmlns="http://www.springframework.org/schema/beans" 
  3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.  xmlns:aop="http://www.springframework.org/schema/aop" 
  5.  xmlns:tx="http://www.springframework.org/schema/tx" 
  6.  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
  7.            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd  
  8.            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd  
  9.      "> 
  10.  < !-- 数据源 --> 
  11.  < bean id="MyDataSource" 
  12.   class="org.apache.commons.dbcp.BasicDataSource"> 
  13.   < property name="driverClassName" 
  14.    value="com.microsoft.jdbc.sqlserver.SQLServerDriver"> 
  15.   < /property> 
  16.   < property name="url" 
  17.    value="jdbc:microsoft:sqlserver://localhost:1433"> 
  18.   < /property> 
  19.   < property name="username" value="sa">< /property> 
  20.  < /bean> 
  21.  < !-- SessionFactory配置 --> 
  22.  < bean id="MySessionFactory" 
  23.   class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
  24.   < property name="dataSource"> 
  25.    < ref bean="MyDataSource">< /ref> 
  26.   < /property> 
  27.   < property name="hibernateProperties"> 
  28.    < props> 
  29.     < prop key="hibernate.dialect"> 
  30.      org.hibernate.dialect.SQLServerDialect  
  31.     < /prop> 
  32.    < /props> 
  33.   < /property> 
  34.   < property name="mappingResources"> 
  35.    < list> 
  36.     < value>com/mengya/entity/Users.hbm.xml< /value> 
  37.    < /list> 
  38.   < /property> 
  39.  < /bean> 
  40.  < !-- 事务管理器 --> 
  41.  < bean id="transactionManager" 
  42.   class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
  43.   < property name="sessionFactory"> 
  44.    < ref bean="MySessionFactory">< /ref> 
  45.   < /property> 
  46.  < /bean> 
  47.  < !-- 定义事务的属性 --> 
  48.  < tx:advice id="txAdvice" transaction-manager="transactionManager"> 
  49.   < tx:attributes> 
  50.    < tx:method name="save*" propagation="REQUIRED" /> 
  51.    < tx:method name="delete*" propagation="REQUIRED" /> 
  52.    < tx:method name="merge*" propagation="REQUIRED" /> 
  53.    < tx:method name="*" read-only="false" /> 
  54.   < /tx:attributes> 
  55.  < /tx:advice> 
  56.  < !-- 使用Spring的AOP管理Hibernate的Transaction --> 
  57.  < aop:config> 
  58.   < !-- 定义AOP切面 --> 
  59.   < aop:pointcut id="allManagerMethod" 
  60.    expression="execution(* com.mengya.service.*.*(..))" /> 
  61.   < !-- 在AOP切面中配置事务 --> 
  62.   < aop:advisor advice-ref="txAdvice" 
  63.    pointcut-ref="allManagerMethod" /> 
  64.  < /aop:config> 
  65.    
  66.  < !-- 如下是DAO,Service,Action的配置 --> 
  67.    
  68.  < bean id="UsersDAO" class="com.mengya.dao.imple.UsersDAO"> 
  69.   < property name="sessionFactory"> 
  70.    < ref bean="MySessionFactory">< /ref> 
  71.   < /property> 
  72.  < /bean> 
  73.    
  74.  < bean id="userService" class="com.mengya.service.imple.UsersService"> 
  75.   < property name="usersdao"> 
  76.    < ref bean="UsersDAO">< /ref> 
  77.   < /property> 
  78.  < /bean> 
  79.    
  80.  < !-- 对于Struts2与Spring集成时,Strtus2的Action是有状态的故这个的scope必须为prototype,Spring默认的是单例模式 --> 
  81.  < bean id="saveUserAction" class="com.mengya.usersAction.SaveUsersAction" scope="prototype"> 
  82.   < property name="usersService"> 
  83.    < ref bean="userService">< /ref> 
  84.   < /property> 
  85.  < /bean> 
  86.    
  87.  < bean id="listUserAction" class="com.mengya.usersAction.ListUsersAction" scope="prototype"> 
  88.   < property name="userService"> 
  89.    < ref bean="userService">< /ref> 
  90.   < /property> 
  91.  < /bean> 
  92.    
  93.  < bean id="deleteUserAction" class="com.mengya.usersAction.DeleteUsersAction" scope="prototype"> 
  94.   < property name="usersService"> 
  95.    < ref bean="userService">< /ref> 
  96.   < /property> 
  97.  < /bean> 
  98.    
  99.  < bean id="updateUserAction" class="com.mengya.usersAction.UpdateUsersAction" scope="prototype"> 
  100.   < property name="userService"> 
  101.    < ref bean="userService">< /ref> 
  102.   < /property> 
  103.  < /bean> 
  104.    
  105.  < bean id="exportUsersAction" class="com.mengya.usersAction.ExportUsersAction" scope="prototype"> 
  106.   < property name="userService"> 
  107.    < ref bean="userService">< /ref> 
  108.   < /property> 
  109.  < /bean> 
  110.    
  111. < /beans> 
  112.   

struts.xml配置如下:

  1. < !DOCTYPE struts PUBLIC  
  2.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  3.     "http://struts.apache.org/dtds/struts-2.0.dtd"> 
  4. < struts> 
  5.    
  6.  < package name="mengya" extends="struts-default"> 
  7.   < action name="saveUser" class="saveUserAction"> 
  8.    < result name="success" type="redirectAction">listUser.action< /result> 
  9.    < result name="input">/add2.jsp< /result> 
  10.   < /action> 
  11.   < action name="listUser" class="listUserAction"> 
  12.    < result name="success">/userList.jsp< /result>    
  13.   < /action> 
  14.   < action name="deleteUser" class="deleteUserAction"> 
  15.    < result name="success" type="redirectAction">listUser.action< /result> 
  16.   < /action> 
  17.   < action name="getUser" class="updateUserAction" method="getUserById"> 
  18.    < result name="success">/view.jsp< /result> 
  19.   < /action> 
  20.   < action name="updateUser" class="updateUserAction" method="updateUser"> 
  21.    < result name="success" type="redirectAction">listUser.action< /result> 
  22.    < result name="input">/view.jsp< /result> 
  23.   < /action> 
  24.   < !-- 将用户信息用Excel导出 --> 
  25.   < action name="exportUsers" class="exportUsersAction"> 
  26.    < result name="success" type="stream"> 
  27.     < param name="contentType">application/vnd.ms-excel< /param> 
  28.     < !-- 对于第一个参数默认值为inline这样的话若在线打开的话会生成两个xls文件 --> 
  29.     < param name="contentDisposition">attachment;filename="allUsers.xls"< /param> 
  30.     < param name="inputName">downloadFile< /param> 
  31.    < /result> 
  32.   < /action> 
  33.     
  34.  < /package> 
  35. < /struts> 
  36.   

jsp页面:用户列表

  1.   < table border="1" align="center" width="60%"> 
  2.       < tr> 
  3.           < td colspan="6" align="center"> < s:text name="UserListInfo">< /s:text> < /td> 
  4.       < /tr> 
  5.       < tr> 
  6.           < td> 
  7.               < s:text name="UId">< /s:text> 
  8.           < /td> 
  9.           < td> 
  10.               < s:text name="UFristName">< /s:text> 
  11.           < /td> 
  12.           < td> 
  13.               < s:text name="ULastName">< /s:text> 
  14.           < /td> 
  15.           < td> 
  16.               < s:text name="UAge">< /s:text> 
  17.           < /td> 
  18.           < td> 
  19.               < s:text name="UpdateOperaction">< /s:text> 
  20.           < /td> 
  21.           < td> 
  22.               < s:text name="DeleteOperaction">< /s:text> 
  23.           < /td> 
  24.       < /tr> 
  25.       < s:iterator value="#request.listUser" var="user"> 
  26.           < tr> 
  27.               < td> 
  28.                   < s:property value="#user.uid"/> 
  29.               < /td> 
  30.               < td> 
  31.                   < s:property value="#user.ufristName"/> 
  32.               < /td> 
  33.               < td> 
  34.                   < s:property value="#user.ulastName"/> 
  35.               < /td> 
  36.               < td> 
  37.                   < s:property value="#user.uage"/> 
  38.               < /td> 
  39.               < td> 
  40.                   < s:a href="getUser.action?users.uid=%{#user.uid }"> 
  41.                       < s:text name="UpdateOperaction">< /s:text> 
  42.                   < /s:a> 
  43.               < /td> 
  44.               < td> 
  45.                   < s:a href="deleteUser.action?uid=%{#user.uid }"> 
  46.                       < s:text name="DeleteOperaction">< /s:text> 
  47.                   < /s:a> 
  48.               < /td> 
  49.           < /tr> 
  50.       < /s:iterator> 
  51.   < /table> 
  52. < tr/> 
  53. < tr/> 
  54. < tr/> 
  55. < div align="center"> 
  56.     < s:a href="exportUsers.action">Excel导出< /s:a> 
  57. < /div> 

用户信息修改页面:

  1. < s:form action="updateUser" method="post"> 
  2.           < s:hidden name="users.uid">< /s:hidden> 
  3.           < s:textfield name="users.ufristName" key="UFristName">< /s:textfield> 
  4.           < s:textfield name="users.ulastName" key="ULastName">< /s:textfield> 
  5.           < s:textfield name="users.uage" key="UAge">< /s:textfield> 
  6.           < s:submit key="submit">< /s:submit> 
  7.       < /s:form> 
  8.  

Struts+Hibernate+Spring的组合范例就介绍到这里。原文链接:http://zmx.javaeye.com/blog/477423

【编辑推荐】

  1. Spring的Hibernate事务管理机制
  2. 解读Hibernate高级集合映射
  3. Hibernate传播性持久化攻略
  4. 深入了解Hibernate自动状态检测
  5. 精通Hibernate管理缓存
责任编辑:yangsai 来源: JavaEye博客
相关推荐

2009-03-06 14:34:31

StrutsHibernateSpring

2015-05-05 11:06:02

JavaJava框架Struts+Hibe

2009-09-22 14:46:18

struts-spri

2009-09-24 09:52:20

Spring Hibe

2009-06-19 15:28:03

SpringHibernate

2009-09-24 09:18:18

2009-06-23 18:18:13

SpringHibernate

2009-06-03 09:16:03

Hibernate工作原理使用

2009-09-21 18:13:11

Hibernate S

2009-09-28 15:14:45

Hibernate S

2009-12-25 09:34:50

WPF显示HTML

2009-11-30 16:52:19

PHP简单程序范例

2011-05-19 09:52:48

SSH

2009-06-04 10:44:34

StrutsHibernate配合

2009-08-14 09:40:55

MyEclipse整合

2009-06-04 10:58:15

strutshibernate分页

2009-09-28 15:38:12

Hibernate P

2009-09-24 10:06:42

Hibernate实例

2009-09-22 11:16:27

Hibernate经验

2009-09-28 10:14:08

Hibernate基础
点赞
收藏

51CTO技术栈公众号