SSM整合完整流程
SSM整合完整流程
一、SSM整合说明
自从学了SpringBoot之后,已经很久没接触到SSM以及SSM项目相关的内容,这不最近新入职了一家公司,整合使用的是SSM相关技术,有很多知识点跟步骤都有些遗忘了,这里特别重复把他捡起来,特此记录一下,分享出来,大家共勉!
1、各个框架担任的角色
- SpringMVC:表述层框架,处理浏览器发送给服务器的请求,将一些数据响应到浏览器。
- MyBatis:持久层框架,连接数据库,访问数据库,操作数据库
- Spring:整合型框架,通过 IOC管理对象,比如MyBatis中操作数据库的SqlSession对象,MyBatis操作数据库时需要事务功能,也可以使用Spring中Aop的重要应用,声明式事务实现。
Spring 和 SpringMVC 本身就是同源的,作为 Spring 家族的一个框架,整合不整合都行,我们所说的不整合是指 Spring 和 SpringMVC 创建同一个 IOC 容器,整合是指 Spring 和 SpringMVC 各自创建自己的 IOC 容器,管理各自的组件。(建议整合)
既然是两个IOC容器,他们如何关联呢?
SpringMVC是子容器,Spring是父容器,子容器可以访问父容器的bean,父容器访问不了子容器。(具体在源码中体现,这里不再赘述)
2、IOC容器的创建顺序
SpringMVC 管理的是控制层组件,其他的组件交给 Spring 管理,控制层依赖于Service组件,又自动装配是在获取 IOC 容器时完成的,即 Controller 装配 Service组件就是在获取 SpringMVC 的 IOC 容器时完成的,那么Spring创建IOC容器要先与SpringMVC的创建时间 ,才能完成自动装配。
①SpringMVC中IOC容器的创建时间
SpringMVC的IOC容器是在 DispatcherServlet 初始化的过程中创建的,又 DispatcherServlet 注册的时候加入了 loadonstartup 标签,DispatcherServlet 初始化就提前到了服务器启动的时候。
②Spring中IOC容器的创建时间
服务器启动时三大组件执行顺序:监听器,过滤器,Servlet
SpringMVC 的 IOC 容器是在 Servlet 的初始化方法中执行的,那我们把获取 Spring 的 IOC 容器的代码放在过滤器或者监听器的初始化方法中执行,就可以保证在获取 SpringMVC 的 IOC 容器时, Spring 的 IOC 容器是提前创建好的,完成 Controller 中对 Service 自动装配。
但是,过滤器并不适合,过滤器是用来过滤当前的请求和响应,如果我们在过滤器的初始化方法中写了创建 Spring 的 IOC 容器的代码,那在执行过滤的方法中什么都不写,直接放行的话,那创建过滤器的意义就没有了。
创建过滤器的初始化方法,销毁方法我们完全可以不写,最主要的就是dofilter方法,但是现在我们的过滤器就执行了一个初始化方法,之后执行过滤的时候 dofilter 没有写任何代码,我们不能为了实现一个目的而忽视了组件的最初目的。
所以创建Spring的IOC容器只能交给监听器了。
③Spring提供的监听器ContextLoaderListener
监听器常见的分为三种:ServletContextListener,HttpSesionListener,HttpSessionAttributeListener,后两个是监听HttpSession的,只能使用第一种。
ServletContextListener里面有两个抽象方法ServletContext初始化方法,ServletContext销毁方法。
Spring提供了监听器ContextLoaderListener,实现ServletContextListener接口,可监听 ServletContext的状态,在web服务器的启动,读取Spring的配置文件,创建Spring的IOC容器。
web 应用中必须在web.xml中配置
二、SSM整合步骤
1、准备工作
①导入依赖
②创建表
③包结构
2、配置xml
相比单独的SpringMVC,整合时多配置了****ContextLoaderListener****,主要作用是Spring的监听器,在服务器启动的时候加载Spring的配置文件。
3、创建SpringMVC的配置文件并配置
需要什么组件在里面注册即可。
这里解释一下以下三者的关系,顺便复习一下前面的知识
配置 <mvc:default-servlet-handler/> 原因:SpringMVC 将接收到的所有请求都看作是一个普通的请求,包括对于静态资源的请求。这样以来,所有对于静态资源的请求都会被看作是一个普通的后台控制器请求,导致请求找不到而报 404 异常错误。
对于这个问题 Spring MVC 在全局配置文件中提供了一个 <mvc:default-servlet-handler/> 标签。在 WEB 容器启动的时候会在上下文中定义一个 DefaultServletHttpRequestHandler,它会对DispatcherServlet的请求进行处理,如果该请求已经作了映射,那么会接着交给后台对应的处理程序,如果没有作映射,就交给 WEB 应用服务器默认的 Servlet 处理,从而找到对应的静态资源,只有再找不到资源时才会报错。
只配置 <mvc:default-servlet-handler/> 表示浏览器发送的请求都由默认的servlet处理,控制层所写的请求映射就处理不了了。
只配置 <mvc:view-controller path="/" view-name="index"/> ,只有视图控制器所配置的路径才会被解析,控制层以及静态资源所写的请求映射就处理不了了。
配置 <mvc:annotation-driven/> ,让控制层所写的请求映射被处理。
4、搭建MyBatis环境
①创建属性文件jdbc.properties
②创建MyBatis的核心配置文件mybatis-config.xml
其余的配置都在Spring配置文件中,这里面的所有内容都可以在Spring配置文件中配置,我配置了一部分
③创建Mapper接口和映射文件
④创建日志文件log4j.xml
⑤创建Spring的配置文件并配置
SpringMVC扫描的是controller包,Spring就要把其他的包扫描了
⑥测试功能
1、创建组件
2、创建控制层组件EmpController
3、创建接口EmpService及其实现类
4、创建页面
index.html
emp_list.html
5、访问测试功能

三、总结
SSM整合核心有以下几点:
- Spring的IOC容器创建先于SpringMVC的IOC容器
- SpringMVC扫描的是controller包,Spring要把其他的包扫描了,两个框架管理各自的组件
- 了解 ContextLoaderListener 监听器的作用,在服务器启动的时候加载Spring的配置文件。Spring配置文件代替原来的 mybatis-config.xml
其余的配置与单独使用时基本一致。
#Java#