struts2+hibernate+spring配置管理(一)——配置文件 [转贴]

时间:2022-04-23 17:40:30

虽然是简单的用户登录,但东西一点不少,基于MVC原理实现,共分DAO层,SERVICE层,ACTION层和WEB层,其中DAO和SERVICE层都有各自的接口。

今天主要讲解配置文件的代码,我学习实例,喜欢从控制层出发,然后用到了哪些类或者JSP,再一一扯“蛋”扯出来。

当然,还是先看web.xml

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"  
  3.          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  4.     <!-- Spring ApplicationContext配置文件的路径�,可使用通配符,多个路径用�1,号分隔,此参数用于后面的Spring-Context loader -->  
  5.     <context-param>  
  6.         <param-name>contextConfigLocation</param-name>  
  7.         <param-value>classpath*:spring/*.xml</param-value>  
  8.     </context-param>  
  9.   
  10.        
  11.     <!-- 著名 Character Encoding filter -->  
  12.     <filter>  
  13.         <filter-name>encodingFilter</filter-name>  
  14.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  15.         <init-param>  
  16.             <param-name>encoding</param-name>  
  17.             <param-value>UTF-8</param-value>  
  18.         </init-param>  
  19.     </filter>  
  20.     <!--Hibernate Open Session in View Filter-->  
  21.     <filter>  
  22.         <filter-name>hibernateFilter</filter-name>  
  23.         <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
  24.     </filter>  
  25.     <!-- ExtremeTable 导出Excel和Pdf的Filter -->  
  26.     <filter>  
  27.         <filter-name>eXtremeExport</filter-name>  
  28.         <filter-class>org.extremecomponents.table.filter.ExportFilter</filter-class>  
  29.     </filter>  
  30.     <filter-mapping>  
  31.         <filter-name>encodingFilter</filter-name>  
  32.         <url-pattern>*.do</url-pattern>  
  33.     </filter-mapping>  
  34.     <filter-mapping>  
  35.         <filter-name>encodingFilter</filter-name>  
  36.         <url-pattern>*.jsp</url-pattern>  
  37.     </filter-mapping>  
  38.     <filter-mapping>  
  39.         <filter-name>hibernateFilter</filter-name>  
  40.         <url-pattern>*.do</url-pattern>  
  41.     </filter-mapping>  
  42.   
  43.   
  44.     <!--Spring ApplicationContext 载入 -->  
  45.     <listener>  
  46.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  47.     </listener>  
  48.   
  49.     <!-- Spring 刷新Introspector防止内存泄露 -->  
  50.     <listener>  
  51.         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
  52.     </listener>  
  53.   
  54.        
  55.     <!-- session超时定义,单位为分钟 -->  
  56.     <session-config>  
  57.         <session-timeout>10</session-timeout>  
  58.     </session-config>  
  59.   
  60. </web-app>  
  61.   

 

东西很简单,无非是配置一些过滤器呀,监听器的。主要讲一下openSessionInViewFilter吧,假设在你的应用中Hibernate是通过spring 来管理它的session.如果在你的应用中没有使用OpenSessionInViewFilter或者OpenSessionInViewInterceptor。session会在transaction结束后关闭,此时会抛出session is close 的异常。关于这方面的知识,值得大家去找一下相关资料仔细阅读。

strut2.xml

xml 代码
  1.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  2.         "http://struts.apache.org/dtds/struts-2.0.dtd">    
  3. <struts >    
  4.     <include file ="struts-default.xml"/>       
  5.        
  6.     <package name ="default" extends ="struts-default">    
  7.         <action name="login" method="login" class="userAction">  
  8.             <result>/login_success.jspresult>  
  9.             <result name="input">/login.jspresult>  
  10.         action>  
  11. package>  
  12.        
  13. struts>  

可能注意到了,这里的Action交给SPRING来管理了。所以我们看一下application.xml的代码吧

xml 代码
  1. xml version="1.0" encoding="UTF-8"?>      
  2. >      
  3.      
  4. <beans>      
  5.     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">         
  6.         <property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />         
  7.         <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:oracleDB" />         
  8.         <property name="user" value="xxx" />         
  9.         <property name="password" value="xxx" />              
  10.                     
  11.         <property name="minPoolSize" value="3" />       
  12.                  
  13.         <property name="maxPoolSize" value="30" />       
  14.                        
  15.         <property name="maxIdleTime" value="1800" />       
  16.                        
  17.         <property name="acquireIncrement" value="3" />        
  18.         <property name="maxStatements" value="0" />         
  19.         <property name="initialPoolSize" value="3" />         
  20.                
  21.         <property name="idleConnectionTestPeriod" value="60" />         
  22.                
  23.         <property name="acquireRetryAttempts" value="30" />         
  24.         <property name="breakAfterAcquireFailure" value="true" />             
  25.         <property name="testConnectionOnCheckout" value="false" />         
  26.     bean>      
  27.           
  28.     <bean id="sessionFactory"     
  29.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">      
  30.         <property name="dataSource">      
  31.             <ref bean="dataSource" />      
  32.         property>      
  33.         <property name="hibernateProperties">      
  34.             <props>      
  35.                 <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialectprop>      
  36.                 <prop key="hibernate.show_sql">trueprop>      
  37.                 <prop key="hibernate.generate_statistics">trueprop>      
  38.                 <prop key="hibernate.connection.release_mode">autoprop>      
  39.                 <prop key="hibernate.autoReconnect">trueprop>                   
  40.             props>      
  41.         property>      
  42.         <property name="mappingDirectoryLocations">       
  43.         <list>      
  44.             <value>      
  45.                 classpath:com/caitong/pingou/bean      
  46.             value>      
  47.         list>                               
  48.         property>      
  49.     bean>       
  50.           
  51.     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">          
  52.           <property name="sessionFactory">          
  53.               <ref bean="sessionFactory"/>          
  54.           property>          
  55.     bean>        
  56.               
  57.     <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">          
  58.         <property name="transactionManager" ref="transactionManager"/>          
  59.         <property name="transactionAttributes">        
  60.             <props>        
  61.                        
  62.                 <prop key="add*">PROPAGATION_REQUIREDprop>        
  63.                 <prop key="find*">PROPAGATION_REQUIRED,readOnlyprop>        
  64.             props>        
  65.         property>        
  66.     bean>          
  67.                  
  68.    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">          
  69.         <property name="beanNames">        
  70.             <value>*Servicevalue>        
  71.         property>        
  72.         <property name="interceptorNames">          
  73.             <list>          
  74.                 <value>transactionInterceptorvalue>          
  75.                            
  76.             list>          
  77.         property>          
  78.     bean>          
  79.           
  80.     <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">          
  81.           <property name="transactionInterceptor" ref="transactionInterceptor"/>          
  82.     bean>        
  83.           
  84.     <bean id="baseDAO" class="com.caitong.pingou.dao.impl.BaseDAO" abstract="true">      
  85.         <property name="sessionFactory">      
  86.             <ref bean="sessionFactory"/>      
  87.         property>      
  88.     bean>      
  89.     <bean id="userDAO"       
  90.         class="com.caitong.pingou.dao.impl.UserDAO" parent="baseDAO">      
  91.     bean>      
  92.           
  93.     <bean id="userService" class="com.caitong.pingou.service.impl.UserService"       
  94.         autowire="byName">      
  95.     bean>      
  96.           
  97.     <bean id="userAction" class="com.caitong.pingou.action.UserAction"            
  98.         autowire="byName">      
  99.     bean>      
  100. beans>    

应该说SPRING太强大了,以至于一个配置文件可以解决任何一件事情。简单介绍一下这个配置文件吧,例子用的是c3p0的数据库链接池,hibernate的配置文件也都集成在这里了,如果细心的读者,可能注意到了事务管理模块。是的,本例的事务管理是由spring来管理,而且集中在service层

xml 代码
  1. <property name="beanNames">     
  2.             <value>*Servicevalue>     
  3.         property>   

有人可能提出问题,为什么非得要放在service层,而不是dao层,应该说,事务管理有一个不成文的规定,尽量将问题放在上层处理。
然后每个类由SPRING来管理,并且autowire="byName"来寻找依赖注入的bean。

 

所有的xml文件都已经配置完了,其实最重要也是这个,XML文件将是框架的一个趋势,掌握了它,其实你已经打开了这个框架的门。