SSH三大框架手动整合

1、 三大框架整合jar包筛选 
struts2 2.3.7 	
	* jar包 从apps/struts2_blank.war 找出最基本的开发jar包 
	* struts2-convention-plugin-2.3.7.jar 进行struts2注解开发 (如果不用注解开发,不要导入)
	* struts2-json-plugin-2.3.7.jar  用于Ajax开发 ,自带json插件 
	* struts2-spring-plugin-2.3.7.jar 用来进行 struts2和Spring 框架整合 (内置整合策略)
	
在web.xml 配置核心Filter (StrutsPrepareAndExecuteFilter)
	<!-- Struts2 核心控制器的配置 -->
	  <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>/*</url-pattern>
	  </filter-mapping>
在src目录创建struts.xml 核心配置文件 
		
Spring 3.2 
	* 最基本jar包 spring-core spring-beans spring-context spring-expression  
	* 依赖日志 commons-logging  log4j   在src目录 创建 log4j.properties 
	
	AOP开发
		spring-aop-3.2.0.RELEASE.jar
		spring-aspects-3.2.0.RELEASE.jar
		com.springsource.org.aopalliance-1.0.0.jar
		com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
	整合Hibernate 
		spring-jdbc-3.2.0.RELEASE.jar
		spring-tx-3.2.0.RELEASE.jar
		spring-orm-3.2.0.RELEASE.jar
	web工程中配置Spring监听器 
		spring-web-3.2.0.RELEASE.jar
	测试集合junit 
		spring-test-3.2.0.RELEASE.jar
	
在src目录或者WEB-INf 创建 applicationContext.xml 	
	引入所有schema  : beans 、context、aop、 tx 
	<beans xmlns="http://www.springframework.org/schema/beans"
		   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		   xmlns:context="http://www.springframework.org/schema/context"
		   xmlns:aop="http://www.springframework.org/schema/aop"
		   xmlns:tx="http://www.springframework.org/schema/tx"
		   xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
	
	</beans>

* 在web.xml 配置Spring Listener , 加载Spring 框架 
  <!-- Spring 监听器 -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:applicationContext.xml</param-value>
  </context-param>

在Servlet/Filter中获得Spring上下文对象
	WebApplicationContext context= WebApplicationContextUtils.getWebApplicationContext(servletContext);
 
Hibernate 3.6 
	* 最基本jar hibernate3.jar 、 lib\required\*.jar 、 lib\jpa\hibernate-jpa-2.0-api-1.0.1.Final.jar 
	* 整合log4j日志 slf4j-log4j12-1.7.2.jar  log4j.jar  
	* 如果使用c3p0  lib\optional\c3p0\c3p0-0.9.1.jar
	* 导入数据库jdbc驱动 mysql-connector-java-5.0.8-bin.jar
	* 二级缓存 ehcache-1.5.0.jar commons-logging.jar backport-util-concurrent.jar
在src创建hibernate.cfg.xml 
	<!-- JDBC基本连接参数 -->
	<session-factory> <!-- 理解为连接池 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///spring3day3</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">abc</property>
		<!-- 配置方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		
		<!-- 常见其它配置 -->
		<property name="hibernate.show_sql">true</property> <!-- 控制台上打印SQL -->
		<property name="hibernate.format_sql">true</property> <!-- 控制台输出时,对SQL语句格式化 -->
		<!-- 测试环境 create/ create-drop 正式环境 update validate -->
		<property name="hibernate.hbm2ddl.auto">update</property> <!-- 自动建表 -->
		<!-- 事务自动提交 -->
		<property name="hibernate.connection.autocommit">true</property>
		<!-- 使用c3p0 -->
		<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
		<!-- 配置Session与线程绑定 -->
		<property name="hibernate.current_session_context_class">thread</property>
		
		<!-- 在核心配置文件中 引用 mapping 映射文件 -->
	</session-factory>
编程使用 HibernateUtils 工具类 	
	Configuration configuration = new Configuration().configure();
	SessionFactory sessionFactory = configuration.buildSessionFactory();
	Session session = sessionFactory.openSession() / getCurrentSession();
	Transaction transaction = session.beginTransaction();
	数据库操作
	transaction.commit();
----------------------------------------------------------------------------------------------------------------------------------

手工整合案例 ssh1 2 、 struts2 spring 内部都提供整合其他框架的插件, 通过插件 完成三大框架整合 struts2 内部提供 struts2-spring-plugin-2.3.7.jar 用来整合Spring * 导入整合jar包,struts 对象管理, 结合Spring spring 内部提供 spring-orm-3.2.0.RELEASE.jar 用来整合其他持久层框架 Hibernate 导入 struts2-spring-plugin-2.3.7.jar 在struts.xml 配置 <constant name="struts.objectFactory " value="spring"></constant> 方式一: 将struts.xml中 <action class=""> class属性值,定义伪类 ,指向applicationContext.xml <bean> 的 id <action name="addbook" class="addbook"> <result>/index.jsp</result> </action> <bean id="addbook" class="cn.itcast.action.AddBookAction" scope="prototype"> <property name="bookService" ref="bookService"></property> </bean> 常见错误:主要发生在有表单验证时 ,效果是第一次输出错误数据 无法通过,第二次输入正确数据 无法通过 原因分析 : struts2 管理Action ,默认多个实例 , 将Action配置到Spring的Bean ,默认scope是singleton , 在<bean>配置 scope="prototype " 方式二: 不需要在spring中配置 Action 实例管理 <action name="addbook" class="cn.itcast.action.AddBookAction"> <result>/index.jsp</result> </action> struts.objectFactory.spring.autoWire = name 即时你不将Action 配置到Spring ,Service也可以按照name 自动装配 Action代码 public void setBookService(BookService bookService) { this.bookService = bookService; } applicationContext.xml <bean id="bookService" class="cn.itcast.service.BookService"></bean> 常见错误 : 如果set方法名 和 Spring bean id 不一样,无法注入 3、 spring 整合 hibernate spring 提供 spring-orm-3.2.0.RELEASE.jar 用来整合 hibernate 方式一: 零障碍整合 目的: Hibernate 的SessionFactory 注入 ------ HibernateTemplate 模板工具类 通过HibernateTemplate完成常见操作 BookDAO extends HibernateDaoSupport ,完成注入 sessionFactory , 使用sessionFactory 创建 HibernateTemplate public void save(Book book){ this.getHibernateTemplate().save(book); } <!-- 配置DAO --> <bean id="bookDAO" class="cn.itcast.dao.BookDAO"> <!-- 注入 sessionFactory --> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 配置sessionFactory 整合 Hibernate --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- 加载hibernate.cfg.xml --> <property name="configLocation" value="classpath:hibernate.cfg.xml"></property> </bean> 对Service 进行事务管理 <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <!-- 针对sessionFactory进行事务管理 --> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> @Transactional public class BookService { } 方式二 : 将Hibernate的配置信息 完全写入applicationContext.xml Spring的配置文件 中 * 不会使用 hiberate.cfg.xml hibernate 配置信息 分为三部分 : JDBC连接参数、 hibernate常用属性 、hbm文件映射 JDBC连接参数 ---- 通过配置DataSource 连接池 <!-- 引用properties 属性文件 内容 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置数据库连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> </bean> 在Spring配置文件中 配置Hibernate属性,必须完整属性名 映射hbm <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- 加载连接池 --> <property name="dataSource" ref="dataSource"></property> <!-- hibernate常用属性 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.current_session_context_class">thread</prop> </props> </property> <!-- 映射hbm文件 --> <!-- <property name="mappingLocations"> --> <!-- <list> --> <!-- <value>classpath:cn/itcast/domain/Book.hbm.xml</value> --> <!-- </list> --> <!-- </property> --> <property name="mappingDirectoryLocations"> <list> <value>classpath:cn/itcast/domain</value> </list> </property> </bean>

1、 jar包筛选
2、 理解手动整合SSH框架 原理 (重要 ) ---- ssh1 (不需要动手实践)

3、 struts2 插件 整合Spring 两种 (重点 ---- 动手多实践) ssh2
  spring 整合 hibernate 两种

posted @ 2014-10-09 10:54  vaer  阅读(213)  评论(0编辑  收藏  举报