Maven学习笔记—整合SSH框架
1、搭建struts2环境
1.1创建strut2配置文件:struts.xml
1.2在web.xml中配置strut2的核心过滤器
<!-- 配置Struts核心过滤器 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、搭建Spring环境
2.1创建spring配置文件applicationContext.xml
2.2在web.xml中配置监听器:ContextLoaderListener
<!-- 配置监听器:默认加载WEB-INF/applicationContext.xml -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 通过上下文参数指定spring配置文件路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
3、搭建Hibernate环境
3.1创建Hibernate核心配置文件hibernate.cfg.xml(可以不需要,完全交给Spring管理就好)
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- 会话工厂 -->
<session-factory>
<!-- 数据库方言,根据数据库选择 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!--为了方便调试是否在运行hibernate时在日志中输出sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 是否对日志中输出的sql语句进行格式化 -->
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
4、struts2和Spring整合
整合关键点:action对象创建,交给spring创建
(1)创建action类
(2)将action对象配置到spring配置文件中
(3)在struts.xml中在action节点中class属性配置为spring工厂中action对象bean的id
5、Spring跟Hibernate框架整合
整合关键点:1、数据源dataSource交给spring 2、SessionFactory对象创建交给spring创建 3、事务管理
5.1配置dataSource
<!-- 加载属性文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!--配置c3p0连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
5.2配置SessionFactory对象
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocations" value="classpath:applicationContext.xml"></property>
</bean>
5.3事务管理
a) 配置事务管理器: PlatFormTransactionManager:接口
i. Jdbc:DataSourceTransactionManager
ii. Hibernate:HibernateTransactionManager
(1)xml配置普通方式(非注解)
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- xml方式管理事务 -->
<!-- 配置通知:具体增强逻辑 -->
<tx:advice id="txAdvice">
<tx:attributes>
<!-- 匹配业务类中方法名称 -->
<tx:method name="save*" />
<tx:method name="update*" />
<tx:method name="delete*" />
<tx:method name="find*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 配置aop -->
<aop:config>
<!-- 配置切点:具体哪些方法要增强(真正被增强的方法)-->
<aop:pointcut expression="execution(* cn.itcast.service.*.*(..))" id="cut"/>
<!-- 配置切面:将增强逻辑作用到切点 (通知+切入点) -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="cut"/>
</aop:config>
<!-- xml方式管理事务 -->
(2)配置注解方式的事务(常用,写起来简洁)
<!--配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 开启事务扫描 -->
<tx:annotation-driven transaction-manager="transactionManager"/>