先从总体来讲,系统用了典型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