SSH框架整合

时间:2024-03-29 17:35:05

SSh=struts2+spring+hibernate

struts2 2.3.24

spring 4.2.4

hibernate 5.0.7

关于xml配置文件的整合方式

SSH整合jar包

Struts2框架需要jar包

SSH框架整合

Asm 是关于字节码操作

Commons-fileupload 关于文件上传

Commons-io 关于io流操作工具

Commons-lang 也是一个工具,包含了关于数据与字符串操作

Freemaker 标签库模板文件

Javassist 它也是关于字节码操作,动态代理可以使用它实现(类似于cglib)

Log4j关于日志

Ognl 关于ognl表达式

Struts2-core xwork-cor struts2框架底层是使用xwork

 

SSH框架整合

Struts2与spring整合还需要这个包

 

如果需要使用struts2提供的json处理

SSH框架整合

 

注意:如果使用注解方案,我们还需要导入一个jar包

SSH框架整合

 

Hibernate框架需要的jar包

SSH框架整合

Antlr 语法解析包

Dom4j 解析xml

Geronimo-jta apache geronimo它是一个开源javaEE服务器 Geronimo-jta是这个开源项目提供jar包,在hibernate中是关于jta事务相关

Hibernate-commoins-annotations

这个包是我们在hibernate下来使用jpa相关的注解,这样它不依赖于hibernate

Hibernate-core 开发hibernate必须

Hibernate-jpa 它是关于hibernate对jpa的支持

Jandex 用于索引annotation

Javassist 关于字节码操作(注意:strtus2中也引入这个jar包了)

Jboss-logging 它是关于jboss统一日志处理

 

如果使用关于jpa相关操作需要导入jpa依赖jar包

SSH框架整合

 

C3p0连接池

SSH框架整合

还需要数据库相关的驱动jar包

SSH框架整合

 

还需要静态日志处理

SSH框架整合

Spring框架需要的jar包

Spring最基本jar包

SSH框架整合

SSH框架整合

AOP开发

SSH框架整合

SSH框架整合

Spring jdbc

SSH框架整合

Spring 事务管理需要tx

Spring整合hibernate

SSH框架整合

Spring整合web开发

SSH框架整合

如果使用到junit测试

SSH框架整合

 

还需要commons-loggin jar包

SSH框架整合

 

创建工程完成整合前期准备

需要的配置文件:

Strtsu2框架 src/strtus.xml

Hibernate框架 src/hibernate.cfg.xml 在domain有 Xxx.hbm.xml

Spring框架 src/applicationContext.xml

关于日志 log4j.properties

关于数据库连接 db.properties

 

Spring整合hibernate

    基本原理:就是由spring来管理hibernate的SessionFactory

方式一:零障碍整合(了解)

    我们只需要使用spring中提供的一个LocalSessionFacotry来加载Hibernate的配置文件。

    SSH框架整合

 

Ssh-xml工程加载到服务器后,如果可以自动创建表,就代表spring整合hibernate ok.

注意:我们必须配置spring的ContextLoaderListener

SSH框架整合

方式二(spring管理hibernate配置)

不在需要hibernate.cfg.xml文件,所有关于hibernate.cfg.xml文件中的配置都在spring的配置文件中来配置。

 

首先要配置数据源

SSH框架整合

接下来引入properties文件

SSH框架整合

SSH框架整合

创建LocalSessionFactoryBean来完成spring管理hibernate中的SessionFactory

SSH框架整合

上述的props可以简化成下面方案

SSH框架整合

 

加载hbm.xml配置文件

SSH框架整合

mappingResources它类似于我们之前<mapping resource="">

mappingLocations它加载时是根据类路径加载 classpath:路径

SSH框架整合

mappingJarLocations它会加载jar文件中的hbm.xml文件

mappingDirectoryLocations 它加载的目录

 

spring整合hibernate后的DAO

spring整合hiberante后,我们的dao只需要继承HibernateDaoSupport类

在HibernateDaoSupport中只需要注入SessionFactory就可以获得到HibernateTemplate,它是对hibernate操作的一个简单封装,可以让我们方便使用原来hibernate的操作.

SSH框架整合

 

SSH框架整合

编写service及测试

SSH框架整合

 

测试

SSH框架整合

事务管理

SSH框架整合

 

HibernateTemplate API介绍

保存操作 session.save()

SSH框架整合

修改操作 session.update()

SSH框架整合

删除操作 session.delete()

SSH框架整合

类似于session.saveOrUpdate()根据持久化对象的状态来判断执行save或update

SSH框架整合

获取操作 get() load()

SSH框架整合

SSH框架整合

 

Find操作 类似于session.createQuery().setParameter().list()

SSH框架整合

类似于hibernate中的QBC查询,完全的面向对象方案

SSH框架整合

SSH框架整合

SSH框架整合

下面这个可以执行命名查询

可以在User.hbm.xml文件中定义hql或sql

SSH框架整合

 

SSH框架整合

SSH框架整合

Spring整合struts2框架

前期准备

创建一个addUser.jsp页面

SSH框架整合

创建UserAction类

SSH框架整合

Struts.xml文件中配置

SSH框架整合

 

Spring整合struts2原理分析

  1. spring整合struts2框架必须导入一个jar包

    struts2-spring-plugin.jar

     

  2. struts2框架配置文件加载顺序
    1. default.properties
    2. struts-default.xml
    3. strtus-plugin.xml
  3. 在struts2框架中所有的action interceptor result全是bean,在struts2框架中默认是使用strtus2自己bean初化操作.

    SSH框架整合

    SSH框架整合

     

  4. 当我们在工程中导入struts2-spring-plugin.jar文件

    就会加载这个包下的strtus-plugin.xml

    SSH框架整合

    这时bean的创建由spring来管理。

     

  5. 这时在创建Action时它执行的代码

    SSH框架整合

    上述代码,在执行时,首先会从spring容器中来获取,如果获取不到,会buildBean

     

    通过上述分析,spring整合struts2框架它的方式有两种

    1. spring管理action(简单说就是在applicationContext.xml文件中来声明action)
    2. action自动装配service

 

spring整合struts2框架方式一(掌握)

这种方案是基于spring管理action

  1. 在applicationContext.xml文件中配置

    SSH框架整合

     

  2. 在action类中

    SSH框架整合

     

  3. 在struts.xml文件

    SSH框架整合

    Class的值就是bean的id值

     

    注意:必须在web.xml文件中配置struts2框架的Filter

    SSH框架整合

Spring整合struts2框架方式二(action中自动注入service)

Struts.xml文件中

SSH框架整合

Class还是类的全名

 

这时就会将action类中需要的注入servcie自动注入

SSH框架整合

在default.properties中有一段配置

SSH框架整合

这时就会根据名称进行autoWires

 

我们可以修改注入的方式

SSH框架整合

我们在struts.xml文件中修改了注入的方式,根据type进行注入

 

Spring整合struts2框架总结

  1. 如果在struts.xml文件中<action class="cn.itheima.action.UserAction">如果写的是全类名,我们使用action自动装配service方案
  2. 如果在struts.xml文件中<action class="userAction">这时,在applicationContext.xml文件中要配置<bean id="userAction" class=" cn.itheima.action.UserAction">
  3. 以上操作的前提是必须导入struts2-spring-plugin.xml文件

    在这个文件中它改变struts2的bean工厂

  4. 默认情况下如果采用action自动装配service方案,这时每一次请求都会新创建一个action,并且service的装配类型是by name
  5. 如果我们采用的是spring管理action这种方案我们必须在<bean>声明中添加scope=prototype",原因是struts2框架的action每一次请求都应该是一个新的action

关于annotation整合方式

Jar包导入

在原来的xml基础上在多导入一个jar包

SSH框架整合

只有导入这个jar包后,我们才能使用struts2框架的注解 @Namespace @Action

 

配置文件

Web.xml文件中要配置

SSH框架整合

Spring的配置文件 applicationContext.xml

Struts2的配置文件 struts.xml

 

使用JPA注解来定义PO类

@Entity 定义实体类

@Table 定义表

@Id 主键

@GeneratedValue 生成主键策略

@Column 定义列

SSH框架整合

Spring整合hibernate

SSH框架整合

Dao编写

如何在dao中得到HibernateTemplate对象,原来是在applicationContext.xml文件中通过配置方案注入了一个SessionFactory对象,UserDao的父类HibernateDaoSupport,会帮助我们根据SessionFactory来得到HibernateTemplate

 

SSH框架整合

Service编写

SSH框架整合

 

SSH框架整合

 

问题:service需要事务管理,怎样处理?

SSH框架整合

 

SSH框架整合

 

SSH框架整合

Action编写

SSH框架整合

使用@Controller @Scope

以上注解的作用是由spring管理action,它是一个多例的。

 

问题:如何完成struts2框架的流程?

SSH框架整合

 

基于annotation的ssh整合总结

在ssh的annotation整合时,必须要多导入的一个包

SSH框架整合

对于dao,service,action我们使用

@Repository @Service @Controller来完成bean注册。

在dao中我们使用以下方案将SessionFactory注入,在dao中就可以使用HibernateTemplate

SSH框架整合

在service及action中使用@Autowire来注入dao及service

SSH框架整合

SSH框架整合

一定要在applicationContext.xml文件中开启注解扫描

SSH框架整合

对于PO类我们使用JPA的注解 @Entiry @Table @Id @GeneratedValue @Column

要在applicationContext.xml文件中配置SessionFactory时来确定扫描包

SSH框架整合

 

对于Struts2框架,我们需要@Namespace @Action @ParentPakcage @Result来定义struts2流程

SSH框架整合

要求action类必须是在action actions struts struts2这样的包中才会扫描struts2相关注解

 

SSH整合延迟加载问题解决

  1. 修改UserDao中的findById

    SSH框架整合

  2. 添加一个user.jsp页面

    SSH框架整合

     

  3. 在UserAction中处理user_findById请求

    SSH框架整合

     

    以上程序在执行后,报错

    SSH框架整合

     

    解决no session问题:

    1. 不使用延迟加载
    2. 手动将延迟加载初始化 Hibernate.initialize(延迟对象)
    3. 使用spring提供的一个OpenSessionInViewFilter来解决

    SSH框架整合

    基本的原理就是将session的关闭操作不在service层完成,而是在web层才关闭session.

    注意:openSessionInViewFilter一定要在Struts2 Filter前配置.