SSh 三大框架整合之應用篇

       學完三個框架,感覺需要記憶的東西太多 ,很多東西即使現在記住了,過一段時間也會忘記,因此 總結了一下搭建框架的基本步驟,並把測試過的代碼保存下來,也分享給大家,如果以後要搭建框架直接Copy這些代碼就OK了。

一、 加入類庫

   spring:(3) spring.jar
              cglib-nodep-2.1_3.jar
              dom4j-1.6.1.jar
              
   struts:(6) freemarker-2.3.15.jar
              ognl-2.7.3.jar
              struts2-core-2.1.8.jar
              xwork-core-2.1.6.jar
              commons-fileupload-1.2.1.jar
              commons-io-1.3.2.jar
              
   hibernate:(7) antlr-2.7.6.jar
              commons-collections-3.1.jar
              hibernate3.jar
              javassist-3.9.0.GA.jar
              jta-1.1.jar
              slf4j-api-1.5.8.jar
              slf4j-nop-1.5.8.jar
              
   額外:(8)   mysql-connector-java-5.0.4-bin.jar
              struts2-spring-plugin-2.1.8.1.jar
              junit4.10.zip====單元測試
              org.hamcrest.core_1.1.0.v20090501071000.jar
              log4j-1.2.15.jar    =========日誌
              commons-logging.jarr
              aspectjrt.jar   =========事務管理包
              aspectjweaver.jar
              commons-dbcp.jar=======連接池   在spring代替hibernate.cfg.xml時用到
              commons-pool.jar
              
二、  配置web.xml
   <filter>
    <filter-name>struts</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    <init-param>
               <param-name>config</param-name>
         <param-value>
          struts-default.xml,struts-plugin.xml,config/struts/struts.xml
        </param-value>
        </init-param>
  </filter>
    
  <filter-mapping>
    <filter-name>struts</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
<!--配置openSessionInViewFilter解決懶加載問題-->
 <filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    <init-param>
             <!--openSessionInViewFilter默認數據源名字叫sessionFactory
                如果數據源名字不叫sessionFactory,必須制定
                sessionFactoryBeanName的value值
              -->
            <param-name>sessionFactoryBeanName</param-name>
            <param-value>sessionFactory</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>openSessionInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

    <!-- 添加spring監聽器 -->
  <listener>
       <listener-class>
    org.springframework.web.context.ContextLoaderListener
       </listener-class>
  </listener>
    <!-- 指定spring配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:config/spring/applicationContext.xml</param-value>
  </context-param>
    
    
    
    <!--過濾器  解決漢字編碼問題-->
      (1)struts2
        <constant name="struts.i18n.encoding" value="UTF-8"/>
    (2)其他框架(除struts2框架)
      使用spring過濾器,在web.xml文件中配置filter
      <filter>
         <filter-name>characterEncodingFilter</filter-name>
           <filter-class>
               org.springframework.web.filter.CharacterEncodingFilter
           </filter-class>
           <init-param>
              <param-name>encoding</param-name>
              <param-value>UTF-8</param-value>
           </init-param>
          
           <init-param>
              <param-name>forceEncoding</param-name>
              <param-value>true</param-value>
           </init-param>
      </filter>
      <filter-mapping>
           <filter-name>characterEncodingFilter</filter-name>
         <url-pattern>/*</url-pattern>
      </filter-mapping>
     
三   由spring 加載hibernate 的配置方式
   applicationContext.xml    包括:
     (applicationContext.xml、
     applicationContext-web.xml、
     applicationContext-biz.xml、
     applicationContext-dao.xml)
 <!-- 配置加載hibernate文件  即:讓spring來管理hibernate -->
  <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">=====applicationContext.xml
    <property name="configLocations">
        <list>
                 <value>classpath:config/hibernate/cfg/hibernate.cfg.xml</value>
        </list>
    </property>
  </bean>
    
    <<!-- 配置spirng聲明事務管理 -->
    <!-- spring事務事務管理 -->
    <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    
    <!--事務通知-->
   <tx:advice id="logAdvice" transaction-manager="hibernateTransactionManager">
        <!--定義規則*統配 -->
        <tx:attributes>
            <tx:method name="update*" propagation="REQUIRED"/>
              <tx:method name="delete*" propagation="REQUIRED"/>
              <tx:method name="save*" propagation="REQUIRED"/>
              <tx:method name="get*"  propagation="NOT_SUPPORTED"/>
              <tx:method name="find*"  propagation="NOT_SUPPORTED"/>
        </tx:attributes>
    </tx:advice>
    
    <aop:config>
        <!--定義一個切入點-->====就是告訴biz層的方法以怎樣的事務方式運行
        <aop:pointcut id="tranPointCut" expression="execution(* com.tarena.biz.*.*(..))"/>======實際一般                                                                             是配置在Biz層 完成一個事務的整體操作
        <!--定義方面:  通知織入到切面-->
        <aop:advisor advice-ref="logAdvice" pointcut-ref="tranPointCut"/>
    </aop:config>
    
     
  一般的不需要注入屬性的Action  <!--web-->======applicationContext-web.xml
    <bean id="mainAction" class="com.tarena.web.action.MainAction" />=========表現層
  需要注入屬性的Action  
    <!-- web -->
    <bean id="userAction" class="com.tarena.web.action.UserAction">
        <property name="iUserServ" ref="userServImpl" />
    </bean>

     <!-- service -->==================applicationContext-biz.xml
    <bean id="userServImpl" class="com.tarena.server.impl.UserServImpl">========Serv層
        <property name="iUserDao" ref="userDaoImpl" />
    </bean>
    <!--  dao-->=======================applicationContext-dao.xml
    <bean id="userDaoImpl" class="com.tarena.dao.impl.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />=========該Dao類要繼承HibernateDaoSupport  如果用spring的JDBC需要extends  JdbcDaoSupport
    </bean>
    
   
三 (2)完全由spring管理的配置方式:
 (配置加載hibernate文件)
    <!--配置讀取屬性文件-->用${key}方式讀取
      <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
              <property name="locations">
                    <list>
                         <value>classpath:config/props/db.properties</value>
                    </list>
              </property>
       </bean>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${driverClassName}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
        <!-- 配置連接池參數 -->
        <!-- 初始化連接數:默認0
            使用完不去關閉,而是放回到連接池中,等待下次調用
        -->
        <property name="initialSize" value="${initialSize}" />
        <!-- 最大併發數:默認8個 -->
        <property name="maxActive" value="${maxActive}" />
        <!-- 最大等待連接數 默認爲8 負數表示無限制連接數,不建議使用 -->
        <property name="maxIdle" value="${maxIdle}" />
        <property name="minIdle" value="${minIdle}" />
        <!-- 等待時常默認爲無限期,建議不能使用,一般是60000ms -->
        <property name="maxWait" value="${maxWait}" />
        <property name="removeAbandoned" value="${removeAbandoned}" />
        <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />
    </bean>

    <!-- spring管理hibernate名字必須使用:sessionFactory-->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <!-- spring管理數據源 -->
        <property name="dataSource" ref="dataSource" />
        <!-- spring管理hibernate屬性 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQLDialect
                </prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
       <!-- 管理orm映射文件 -->
        <property name="mappingLocations">
            <list>
                <value>
                    classpath:config/hibernate/hbm/User.hbm.xml
                </value>
            </list>
        </property>
    </bean>
    
   
 struts.xml文件就把class指向applicationContext.xml中相應Action的id就行
 hibernate.cfg.xml文件原樣不動
   之後就依據各個配置文件建立相應的類(web--Dao--action)
 
 


發佈了24 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章