先從總體來講,系統用了典型MVC設計理念,前端和業務之間的交互採用jsp+struts2,數據庫的事務操做都使用hibernate實現,spring來管理二者之間的關係,提供依賴注入(DI)和切面事務(AOP),整個一個web項目總體上的配置主要體如今web.xml中,下面先說web.xml配置要點。前端
(1)、配置過濾器 OpenSessionInViewFilter,主要功能是用來把一個Hibernate Session和一次完整的請求過程對應的線程相綁定,但出現org.hibernate.LazyInitializationException錯誤的時候,須要配置這個filter。web
(2)、配置log4j,包括log4j的存放位置,配置文件默認刷新時間,監聽器等,spring
(3)、spring的XML配置文件和spring監聽器的配置,這裏配置的是整個項目的spring配置文件,多數業務都是這裏完成sql
(4)、配置Struts2的FilterDispathcer的Filter,前天頁面的跳轉必需要經過struts2數據庫
web.xml基本上就是這些重要的配置文件,若是須要使用到spring security權限驗證框架,也須要配置相應filter,配置玩web.xml,下面須要配置spring.xml,這裏我把配置文件再分爲相應action.xml、service.xml、dao.xml、db.xml,前面的三個配置文件主要是依賴注入發充分體現,action處理數據須要依賴service,service須要依賴dao,這樣分解可使得代碼結構更加清晰,dao只負責對db的操做,service是相應的業務邏輯處理,而action則是頁面數據的管道,基本上按照action ref相應的service,service ref相應的dao,dao ref sessionFactory。express
在db.xml中配置比較關鍵,這裏首先配置數據庫的配置文件和驅動源,再配置底層session工廠,依賴屬性包括(3個):數據源、hibernate屬性、映射文件列表,這些是基本的配置編程
<!-- 引入數據庫驅動配置文件 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean> <!-- 配置數據源,包括:數據庫驅動、url、username和password --> <bean id="dataSource" class="com.lccp.util.CustomDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 配置底層session工廠,依賴屬性包括(3個):數據源、hibernate屬性、映射文件列表 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> <property name="mappingResources"> <!-- 映射文件列表,每一個實體類一個映射文件,每一個映射文件都要在這裏給出,注意給出orm映射文件所在的路徑 --> <list> <value>實體路徑</value> </list> </property> </bean>
在配置事務,也就是spring提供的事務切面,實現全部方法的事務管理,這裏看來spring確實很優美,幾行配置就搞定數據的事務,切面編程的優勢。
session
<!-- 配置事務管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <!-- 配置事務特性 ,配置add、delete和update開始的方法,事務傳播特性爲required --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="upd*" propagation="REQUIRED"/> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="sav*" propagation="REQUIRED"/> <tx:method name="del*" propagation="REQUIRED"/> <tx:method name="*" propagation="REQUIRED" read-only="true"/> </tx:attributes> </tx:advice> <!-- 配置那些類的方法進行事務管理,當前com.lccp.dao包中的子包、類中全部方法須要,還須要參考tx:advice的設置 --> <aop:config> <aop:pointcut id="allManagerMethod" expression="execution (* com.lccp.service.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/> </aop:config> <tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
主要的配置就這些啦,還有hibernate的實體關係就不一一貼出來了,這些都是以配置文件的形式,相信不少人用完一次不再想用配置文件了,實在是太多了,使用註解會少不少配置,看起來也清楚明白,並且在接觸了spring MVC以後,發現struts2並很差使用,前端部分能夠換成spring mvc會更好。mvc
學生一枚,歡迎糾錯!!!app