首页 > PHP资讯 > JAVA培训 > Struts+Hibernate+Spring组合简单范例

Struts+Hibernate+Spring组合简单范例

JAVA培训

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"?> 
    < web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    
     < context-param> 
      < param-name>contextConfigLocation< /param-name> 
      < param-value>classpath*:applicationContext.xml< /param-value> 
     < /context-param> 
    
     < listener> 
      < listener-class> 
       org.springframework.web.context.ContextLoaderListener  
      < /listener-class> 
     < /listener> 
    
     < filter> 
      < filter-name>struts2< /filter-name> 
      < filter-class> 
       org.apache.struts2.dispatcher.FilterDispatcher  
      < /filter-class> 
     < /filter> 
     < filter-mapping> 
      < filter-name>struts2< /filter-name> 
      < url-pattern>/*< /url-pattern> 
     < /filter-mapping> 
    
     < welcome-file-list> 
      < welcome-file>index.jsp< /welcome-file> 
     < /welcome-file-list> 
    < /web-app> 
       
    UsersDAO的接口如下:
    
    public interface UsersDaoInter {  
    
     public abstract void save(Users transientInstance);  
    
     public abstract void delete(Users persistentInstance);  
    
     public abstract void delete(final int uId);  
    
     public abstract Users findById(java.lang.Integer id);  
    
     public abstract List findByExample(Users instance);  
    
     public abstract List findByProperty(String propertyName, Object value);  
    
     public abstract List findAll();  
    
     public abstract Users merge(Users detachedInstance);  
    
    }  
       
    UsersService接口如下:
    
    public interface UsersServiceInter {  
    
     public abstract void save(Users transientInstance);  
    
     public abstract void delete(Users persistentInstance);  
    
     public abstract void delete(final int uId);  
    
     public abstract Users findById(java.lang.Integer id);  
    
     public abstract List findByExample(Users instance);  
    
     public abstract List findByProperty(String propertyName, Object value);  
    
     public abstract List findAll();  
    
     public abstract Users merge(Users detachedInstance);  
     /**  
      * 导出用户列表的Excel  
      * @return  
      */ 
     public abstract InputStream exportUsers();  
    
    }  
       
    Spring的applicationContext.xml配置如下:
    
    < ?xml version="1.0" encoding="UTF-8"?> 
    < beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd  
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd  
         "> 
     < !-- 数据源 --> 
     < bean id="MyDataSource" 
      class="org.apache.commons.dbcp.BasicDataSource"> 
      < property name="driverClassName" 
       value="com.microsoft.jdbc.sqlserver.SQLServerDriver"> 
      < /property> 
      < property name="url" 
       value="jdbc:microsoft:sqlserver://localhost:1433"> 
      < /property> 
      < property name="username" value="sa">< /property> 
     < /bean> 
     < !-- SessionFactory配置 --> 
     < bean id="MySessionFactory" 
      class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
      < property name="dataSource"> 
       < ref bean="MyDataSource">< /ref> 
      < /property> 
      < property name="hibernateProperties"> 
       < props> 
        < prop key="hibernate.dialect"> 
         org.hibernate.dialect.SQLServerDialect  
        < /prop> 
       < /props> 
      < /property> 
      < property name="mappingResources"> 
       < list> 
        < value>com/mengya/entity/Users.hbm.xml< /value> 
       < /list> 
      < /property> 
     < /bean> 
     < !-- 事务管理器 --> 
     < bean id="transactionManager" 
      class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
      < property name="sessionFactory"> 
       < ref bean="MySessionFactory">< /ref> 
      < /property> 
     < /bean> 
     < !-- 定义事务的属性 --> 
     < tx:advice id="txAdvice" transaction-manager="transactionManager"> 
      < tx:attributes> 
       < tx:method name="save*" propagation="REQUIRED" /> 
       < tx:method name="delete*" propagation="REQUIRED" /> 
       < tx:method name="merge*" propagation="REQUIRED" /> 
       < tx:method name="*" read-only="false" /> 
      < /tx:attributes> 
     < /tx:advice> 
     < !-- 使用Spring的AOP管理Hibernate的Transaction --> 
     < aop:config> 
      < !-- 定义AOP切面 --> 
      < aop:pointcut id="allManagerMethod" 
       expression="execution(* com.mengya.service.*.*(..))" /> 
      < !-- 在AOP切面中配置事务 --> 
      < aop:advisor advice-ref="txAdvice" 
       pointcut-ref="allManagerMethod" /> 
     < /aop:config> 
       
     < !-- 如下是DAO,Service,Action的配置 --> 
       
     < bean id="UsersDAO" class="com.mengya.dao.imple.UsersDAO"> 
      < property name="sessionFactory"> 
       < ref bean="MySessionFactory">< /ref> 
      < /property> 
     < /bean> 
       
     < bean id="userService" class="com.mengya.service.imple.UsersService"> 
      < property name="usersdao"> 
       < ref bean="UsersDAO">< /ref> 
      < /property> 
     < /bean> 
       
     < !-- 对于Struts2与Spring集成时,Strtus2的Action是有状态的故这个的scope必须为prototype,Spring默认的是单例模式 --> 
     < bean id="saveUserAction" class="com.mengya.usersAction.SaveUsersAction" scope="prototype"> 
      < property name="usersService"> 
       < ref bean="userService">< /ref> 
      < /property> 
     < /bean> 
       
     < bean id="listUserAction" class="com.mengya.usersAction.ListUsersAction" scope="prototype"> 
      < property name="userService"> 
       < ref bean="userService">< /ref> 
      < /property> 
     < /bean> 
       
     < bean id="deleteUserAction" class="com.mengya.usersAction.DeleteUsersAction" scope="prototype"> 
      < property name="usersService"> 
       < ref bean="userService">< /ref> 
      < /property> 
     < /bean> 
       
     < bean id="updateUserAction" class="com.mengya.usersAction.UpdateUsersAction" scope="prototype"> 
      < property name="userService"> 
       < ref bean="userService">< /ref> 
      < /property> 
     < /bean> 
       
     < bean id="exportUsersAction" class="com.mengya.usersAction.ExportUsersAction" scope="prototype"> 
      < property name="userService"> 
       < ref bean="userService">< /ref> 
      < /property> 
     < /bean> 
       
    < /beans> 
      
    struts.xml配置如下:
    
    < !DOCTYPE struts PUBLIC  
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
        "http://struts.apache.org/dtds/struts-2.0.dtd"> 
    < struts> 
       
     < package name="mengya" extends="struts-default"> 
      < action name="saveUser" class="saveUserAction"> 
       < result name="success" type="redirectAction">listUser.action< /result> 
       < result name="input">/add2.jsp< /result> 
      < /action> 
      < action name="listUser" class="listUserAction"> 
       < result name="success">/userList.jsp< /result>    
      < /action> 
      < action name="deleteUser" class="deleteUserAction"> 
       < result name="success" type="redirectAction">listUser.action< /result> 
      < /action> 
      < action name="getUser" class="updateUserAction" method="getUserById"> 
       < result name="success">/view.jsp< /result> 
      < /action> 
      < action name="updateUser" class="updateUserAction" method="updateUser"> 
       < result name="success" type="redirectAction">listUser.action< /result> 
       < result name="input">/view.jsp< /result> 
      < /action> 
      < !-- 将用户信息用Excel导出 --> 
      < action name="exportUsers" class="exportUsersAction"> 
       < result name="success" type="stream"> 
        < param name="contentType">application/vnd.ms-excel< /param> 
        < !-- 对于第一个参数默认值为inline这样的话若在线打开的话会生成两个xls文件 --> 
        < param name="contentDisposition">attachment;filename="allUsers.xls"< /param> 
        < param name="inputName">downloadFile< /param> 
       < /result> 
      < /action> 
        
     < /package> 
    < /struts> 
      
    jsp页面:用户列表
    
      < table border="1" align="center" width="60%"> 
          < tr> 
              < td colspan="6" align="center"> < s:text name="UserListInfo">< /s:text> < /td> 
          < /tr> 
          < tr> 
              < td> 
                  < s:text name="UId">< /s:text> 
              < /td> 
              < td> 
                  < s:text name="UFristName">< /s:text> 
              < /td> 
              < td> 
                  < s:text name="ULastName">< /s:text> 
              < /td> 
              < td> 
                  < s:text name="UAge">< /s:text> 
              < /td> 
              < td> 
                  < s:text name="UpdateOperaction">< /s:text> 
              < /td> 
              < td> 
                  < s:text name="DeleteOperaction">< /s:text> 
              < /td> 
          < /tr> 
          < s:iterator value="#request.listUser" var="user"> 
              < tr> 
                  < td> 
                      < s:property value="#user.uid"/> 
                  < /td> 
                  < td> 
                      < s:property value="#user.ufristName"/> 
                  < /td> 
                  < td> 
                      < s:property value="#user.ulastName"/> 
                  < /td> 
                  < td> 
                      < s:property value="#user.uage"/> 
                  < /td> 
                  < td> 
                      < s:a href="getUser.action?users.uid=%{#user.uid }"> 
                          < s:text name="UpdateOperaction">< /s:text> 
                      < /s:a> 
                  < /td> 
                  < td> 
                      < s:a href="deleteUser.action?uid=%{#user.uid }"> 
                          < s:text name="DeleteOperaction">< /s:text> 
                      < /s:a> 
                  < /td> 
              < /tr> 
          < /s:iterator> 
      < /table> 
    < tr/> 
    < tr/> 
    < tr/> 
    < div align="center"> 
        < s:a href="exportUsers.action">Excel导出< /s:a> 
    < /div> 
    用户信息修改页面:
    
    < s:form action="updateUser" method="post"> 
              < s:hidden name="users.uid">< /s:hidden> 
              < s:textfield name="users.ufristName" key="UFristName">< /s:textfield> 
              < s:textfield name="users.ulastName" key="ULastName">< /s:textfield> 
              < s:textfield name="users.uage" key="UAge">< /s:textfield> 
              < s:submit key="submit">< /s:submit> 
          < /s:form> 
    

     

Struts+Hibernate+Spring的组合范例就介绍到这里。

常州java培训

本文由欣才IT学院整理发布,未经许可,禁止转载。