江蘇520

          江蘇520

          常用鏈接

          統計

          最新評論

          集成struts2 spring hibernate的實例

          集成struts,spring,hibernate時,對于初學者來說最大的麻煩就其繁瑣的xml配置文件?,F在三者都對基于注解的配置提供了良好的支持。在struts2中,使用convent plugin,得益于annotation和規約,配置過程得以大大減少。在spring2.5也可以使用@Autowired,進行注入,使用@Controller,@Service,@Repository注解,自動定義bean,還支持annotation風格的聲明式事務支持,以及aspectJ類似的AOP。hibernate也可以使用JPA標準注解定義實體描述,避免使用mapping文件。

          當然,對于annotation和xml風格的配置,誰更好,更多依賴個人興趣。但使用annotation確實減少了很多配置工作量。本文采用annotation風格的配置,以TaskList為例子講解struts2 spring hibernate的集成。項目文件見附件。

          一:配置struts2。

          首先在web.xml文件中配置filter

          <filter>  
              
          <filter-name>struts2</filter-name>  
              
          <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
          </filter>  
            
          <filter-mapping>  
              
          <filter-name>struts2</filter-name>  
              
          <url-pattern>*.action</url-pattern>  
          </filter-mapping>  

          然后在classpath中創建struts.xml配置文件。

          <?xml version="1.0" encoding="UTF-8"?>  
          <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"   
                  " http://www.bt285.cn /dtds/struts-2.1.dtd"
          >  
          <struts>  
              
          <constant name="struts.devMode" value="true" />  
              
          <constant name="struts.convention.default.parent.package" value="default-package" />  
              
          <constant name="struts.convention.package.locators" value="action" />  
              
          <package name="default-package" extends="convention-default">  
            
                  
          <default-action-ref name="index" />  
            
                  
          <action name="index"  >  
                      
          <result>http://www.5a520.cn /WEB-INF/content/index.jsp</result>  
                  
          </action>    
            
              
          </package>  
          </struts>  

           

          struts.devMode屬性,配置啟用調試,將有更多的錯誤信息輸出,便于排錯。struts.convention.default.parent.package屬性,指定使用注解標注的控制器的默認包。可以在這個默認包中配置全局信息。

          struts.convention.package.locators屬性,為查找控制器包路徑的關鍵字。如com.mycompany.action,com.mycompany.action.user,都會被struts2掃描。里面有繼承至Action的類,或類名以Action結尾的類,都會做為Action處理。

          <default-action-ref name="index" />指定了默認action,如果指定的action不存在則訪問該action。

          把struts2-spring-plugin-2.1.6.jar添加到classpath中,struts2會自動掃描struts-plugin.xml文件,該文件自動注冊了com.opensymphony.xwork2.ObjectFactory,完成和spring的集成。

          二:配置spring

          在web.xml中加入ContextLoaderListener,用以啟動spring容器。用contextConfigLocation指定spring配置文件路徑,可以使用*通配符結尾。

           

          <listener>  
              
          <listener-class>org.springframework.web.context.ContextLoaderListener   
              
          </listener-class>  
          </listener>  
          <context-param>  
              
          <param-name>contextConfigLocation</param-name>  
              
          <param-value>http://www.bt285.cn :/applicationContext.xml</param-value>  
          </context-param> 

          配置applicationContext.xml

          <?xml version="1.0" encoding="UTF-8"?>  
          <beans>  
            
              
          <context:component-scan base-package="persistence,service,action,aop"/>  
                 
              
          <aop:aspectj-autoproxy  />  
            
              
          <tx:annotation-driven transaction-manager="transactionManager" />  
                 
              
          <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" >  
                  
          <property name="sessionFactory" ref="sessionFactory" />  
              
          </bean>  
            
              
          <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >       
                  
          <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
              
          </bean>  
            
              
          <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" >  
                  
          <property name="sessionFactory" ref="sessionFactory" />  
              
          </bean>  
                 
          </beans>  

          <context:component-scan />指定Bean掃描的包,多個包逗號隔開,任何標注了@Component,@Controller,@Service,@Repository的類,都會被自動識別為bean。

          <aop:aspectj-autoproxy />聲明aspectj動態代理,啟用注解驅動的aspectj配置。

          <tx:annotation-driven />啟用注解驅動的聲明事務支持。

          然后定義了sessionFactory和transactionManager,hibernateTemplate用來注入到Dao中,取代繼承的方式使用spring對hibernate的集成支持。

          三:hibernate配置

          hibernate配置獨立配置,方便修改。

           

          <?xml version="1.0" encoding="UTF-8"?>  
          <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
          <hibernate-configuration>  
              
          <session-factory>  
                  
          <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>  
                  
          <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
                  
          <property name="hibernate.connection.url">jdbc:mysql:// http://www.feng123.com :3306/sshdemo</property>  
                  
          <property name="hibernate.connection.username">root</property>  
                  
          <property name="hibernate.connection.password">root</property>  
                  
          <property name="hibernate.hbm2ddl.auto">update</property>  
                  
          <property name="hibernate.show_sql">true</property>  
                  
          <property name="hibernate.format_sql">true</property>  
                  
          <property name="hibernate.current_session_context_class">thread</property>         
            
                  
          <!-- 最大連接數 -->  
                  
          <property name="hibernate.c3p0.max_size">20</property>  
                  
          <!-- 最小連接數 -->  
                  
          <property name="hibernate.c3p0.min_size">5</property>  
                  
          <!-- 獲得連接的超時時間,如果超過這個時間,會拋出異常,單位毫秒 -->  
                  
          <property name="hibernate.c3p0.timeout">120</property>  
                  
          <!-- 最大的PreparedStatement的數量 -->  
                  
          <property name="hibernate.c3p0.max_statements">100</property>  
                  
          <!-- 每隔120秒檢查連接池里的空閑連接 ,單位是秒-->  
                  
          <property name="hibernate.c3p0.idle_test_period">120</property>  
                  
          <!-- 當連接池里面的連接用完的時候,C3P0一下獲取的新的連接數 -->  
                  
          <property name="hibernate.c3p0.acquire_increment">2</property>  
                  
          <!-- 每次都驗證連接是否可用 -->  
                  
          <property name="hibernate.c3p0.validate">true</property>  
            
                  
          <mapping class="domain.Task" />  
              
          </session-factory>  
          </hibernate-configuration>  


           

           

          posted on 2009-05-14 17:40 江蘇520 閱讀(4076) 評論(0)  編輯  收藏

          主站蜘蛛池模板: 礼泉县| 浦县| 通山县| 余庆县| 静宁县| 兴城市| 柞水县| 巴塘县| 青阳县| 晋江市| 治多县| 洱源县| 白山市| 米泉市| 余江县| 应用必备| 平果县| 开鲁县| 襄樊市| 阿拉尔市| 南京市| 拉萨市| 金溪县| 电白县| 都匀市| 瑞金市| 沁阳市| 资阳市| 礼泉县| 同德县| 彩票| 固原市| 孝义市| 朝阳区| 石柱| 会理县| 萍乡市| 遵化市| 搜索| 黄冈市| 营口市|