SSH整合原理:
导包:共40个jar包,其中:40=41-1(重复)
Hibernate5(9):
hibernate解压目录/lib/required
struts2.3(14):
struts2解压目录/apps/blank.war(空白项目)
注意:struts2.3与hibernate5中有一个重复的jar包,将较低版本删除。
struts2-spring-plugin-xxx.jar (spring整合struts2),
一旦导入该包,struts2框架启动时就会寻找spring容器。如果找不到将会报错。所以在搭建框架时.如果导 入了该包.需要先配置spring。再配置struts。
spring4(17):
4+2;
spring-jdbc、spring-tx、spring-orm;
C3P0连接池、数据库驱动;
spring-aop、spring-aspects;
aop联盟、aspectJ织入;
spring-test、junit4;
spring-web(让spring容器的创建与项目的启动绑定)
web(1):
jstl.jar
Spring整合Web项目:
在Web项目启动时创建Spring容器,只创建一次
原理:spring提供了ApplicationContextListener.。ServletContext对象的创建与销毁监听器。
spring在监听器的监听创建ServletContext对象的方法中,创建了spring容器。
在监听器的销毁方法中关闭spring容器。
换句话讲,就是将spring容器的生命周期与ServletContext进行绑定。
配置监听器&指定配置文件路径:
准备Spring配置文件:
创建applicationContext.xml文件,src目录下,并导入约束(NameSpace)。
Struts2整合Web项目:
编写Action:
配置struts.xml:src目录下
配置入口过滤器:
Spring整合Struts2:
整合原理:
整合方式1(不使用):Action依然由struts2创建。Action对象中的依赖由Spring注入。
配置常量:
struts.objectFactory=spring,开启使用spring对象工厂
struts.objectFactory.spring.autoWire=name,使用spring容器自动注入依赖属性,根据属性名自动注入 依赖
自动注入属性:属性名与bean的name名一致,spring就可以自动注入属性。
整合方式2:由spring创建action以及组装依赖关系。struts2只负责从spring获取action
配置常量:struts.objectFactory=spring,开启使用spring对象工厂
将Action和Service配置到spring容器:
修改struts2中class属性:
Action中的class属性,填写完整类名,struts2会获得类并创建对象;
填写bean的name,struts2会从spring容器中获取对应的bean name的对象
单独配置Hibernate框架:
先创建实体类和映射文件。
主配置文件:必选配置(jdbc、方言)、可选配置(打印..)、导入映射文件。
注意:整合spring不配置current_session_context_class,spring在自己准备的sessionFactory中已经通 过ThreadLocal完成session与线程绑定;
也不配置C3P0连接池,会将C3P0连接池交给spring来管理
测试:配置
将SessionFactory交给Spring管理:
方式1(不使用):配置信息放在hibernate.cfg.xml中,然后在spring配置sessionFactory时,注入 hibernate的配置信息。
方式2:省略hibernatecfg.xml,在spring中直接配置:
配置C3P0连接池:
准备db.properties配置文件,键值对存放 数据库信息
在spring中读取db.properties:
配置C3P0连接池对象,并引用db.properties中的配置:
将C3P0连接池注入sessionFactory:
将Service配置到Spring容器:
创建Dao对象:在ssh整合环境中,推荐使用hibernate模板对象,HibernateDaoSupport。
将Dao对象交给Spring管理:
创建Service对象
将service对象配置到spring容器中:
测试Service。
AOP事务管理:
配置transactionManager:
事务管理配置方式:
注解:
开启注解"开关":
在Service类中使用注解管理事务:
XML:
配置事务通知:
配置切面(织入):
解决懒加载使用时的no-session问题:
首先,Hibernate查询优化:使用懒加载策略效率更高。
问题解决:
确保在JSP环境中session处于开启状态。
(Spring已实现)在使用session的service层不关闭session。将session的关闭转移到过滤器的后处理代码 中。
配置过滤器:
未完待续……