SpringMVC工作流程

发布于:2023-01-04 ⋅ 阅读:(629) ⋅ 点赞:(0)

浅谈SpringMVC之架构与工作流程
MVC模式实现了页面展示与业务逻辑分离,是解耦的重要实现方式。
Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发。
SpringMVC的工作流程:
1、用户发送请求至前端控制器DispatcherServlet
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器根据请求的url找到具体的处理器,生成处理器对象及处理器拦截器,[返回处理器执行链]并将其一并返回给DispatcherServlet.
4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5、执行处理器(Controller,也叫后端控制器)
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispatcherServlet对View进行视图渲染视图(即就是将模型数据填充至视图中)
11、DispatcherServlet对用户进行响应。
简而言之,SpringMVC通过DispatcherServlet这个前端控制器(中央处理器),来调用MVC三大件:Controller、Model、View,这样就保证MVC的每一个组件只与DispatcherServlet耦合,而彼此之间独立运行,大大降低了程序的耦合性。
SpringMVC是如何实现MVC模式的?
注意SpringMVC中并没有涉及有关于Controller接口规范的实现,SpringMVC是通过调用Handler来实现Controller这一层的。
SpringMVC使用了适配器模式,前端控制器使用HandlerAdapter来调用不同的Controller,然后才是controller调用Model产生数据模型;产生的数据模型将会再次返回到前端控制器,并由前端控制器决定使用不同的模板引擎将页面进行渲染。

Spring深入挖掘的核心技术
整个Spring框架按其属性所属功能可以划分五个主要模块,这五个模块几乎为企业应用提供了所需的一切,从持久层、业务层到表现层都拥有相应的支持,这就是Spring为什么是一站式框架。IOC和AOP是Spring的核心。
* Spring的核心模块实现了IOC的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述。由IOC容器负责类的创建,管理,获取等。BeanFactory接口是Spring框架的核心接口,实现了容器很多的功能。
* Context模块构建于核心模块之上,扩展BeanFactory的功能,包括国际化,资源加载,邮件服务,任务调度功能,ApplicationContext是Context模块的核心接口。

——AOP模块
* Spring AOP模块提供了满足AOP 联盟规范的实现,还整合了AspectJ这种AOP语言级的框架。通过AOP能降低耦合。

——数据访问集成模块(该模块包括了JDBC、ORM、JMS和事务管理)
* 事务管理 : 该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明型的事务管理。
* JDBC模块:提供一个JDBC的样例模板,使用这些模板能消除传统的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。
* ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括Hibernate、JPA、Mybatis等,而且可以使用Spring事务管理,无需额外控制事务。
* JMS模块 :用于Java消息服务,提供一套“消息生产者、消息消费者”模块用于更加简单的使用JMS,JMS用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

Spring的IOC容器的详解
* 传统的程序设计中 ,我们需要使用某个对象的方法,需要先通过new 创建一个该对象,我们这时是主动行为,而IOC是我们将创建对象的控制权交给IOC容器, 这时是由容器帮忙创建及依赖对象,我们的程序被动的接受IOC容器创建的 对象,控制权反转,所以叫控制反转。
* 因为IOC不够开门见山,所以提供了DI(依赖注入),即让第三方来实现注入,以移除我们类与需要使用的类之间的依赖关系。
* IOC是目的,DI是手段。我们为了实现IOC,让生成对象的方式由传统(new)反转过来,需要创建相关对象时由IOC容器帮我们注入(DI)
* 简单的说,就是我们类里需要另一个类,只需要让Spring帮我们创建,这个叫做控制反转,然后Spring帮我们将需要的对象设置到我们的类中,这叫做依赖注入。
* 依赖注入:包括 a>构造器注入,b> 属性Set/Get注入

——Bean的所用域
Bean的作用域会对Bean的生命周期和 创建方式产生影响。
(1)Singleton :在Spring IOC容器中仅存在一个Bean实例,Bean以单例方式存在,默认值。
(2)prototype:每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean时,相当于执行new XxxBean()
(3)request:每次Http请求都会创建一个新的Bean,该作用域仅用于WebApplicationContext环境
(4)session:同一个Http Session共享一个Bean,不同Session使用不同Bean

SSM框架原理,作用及使用方法
作用:SSM框架是Spring MVC,Spring 和MyBatis 框架的整合,是个标准的MVC模式,将整个系统划分为表现层,controller层,service层,Dao层四层
使用Spring MVC负责请求的转发和视图管理
Spring实现业务对象管理,mybatis作为数据对象的持久化引擎。
Spring MVC:
1、客户端发送请求到DispatcherServlet(中央控制器)
2、由DispatcherServlet控制器查询HandlerMapping,找到处理请求的Controller
3、Controller调用业务逻辑处理(处理器适配器)后,返回ModelAndView。
4、DispatcherServlet查询视图解析器,找到ModelAndView指定的视图
5、DispatcherServlet对视图进行数据的填充,最后将结果显示到客户端
Spring:IOC容器,它可以装载bean(也就是我们Java中的类,包括service、dao里面的),有了这个机制,我们就不需要在每次使用这个类的时候为它初始化,很少看到关键字new,另外spring的AOP,事务管理等都是经常用到的。
Mybatis:Mybatis是对JDBC的封装,它让数据库底层操作变的透明。Mybatis的操作都是围绕一个SQLSessionFactory实例展开的。Mybatis通过配置文件关联到各个实体类的mapper文件,Mapper文件中配置了每个类中对数据库所需要进行的SQL语句映射。在每次与数据库交互时,通过SqlSessionFactory拿到SQLSession,再执行SQL命令。
Spring MVC 拥有控制器,作用跟Struts类似,接收外部请求,解析参数传给服务层
Spring 容器属于协调上下文,管理对象间的依赖,提供事务机制
mybatis 属于orm持久层框架,将业务实体 与数据表联合 起来

Spring MVC 控制层,想当与 Struts的作用
Spring 控制反转和依赖注入 创建对象交由容器管理,达到了解耦的作用
mybatis 主要用来操作数据库(数据库的增删改查)

IOC:控制反转,是一种降低对象之间耦合关系的设计思想,面试的时候最好能说出来个例子,加深理解。例子:租房子,以前租房子需要一个房子一个房子找,费时费力,然后现在加入一个房屋中介,把你需要的房型告诉中介,就可以直接选到需要的房子,中介就相当于spring容器。

AOP:面向切面编程,是面向对象开发的一种补充,它允许开发人员在不改变原来模型的基础上动态的修改模型以满足新的需求,如:动态的增加日志、安全或异常处理等。AOP使业务逻辑各部分间的耦合度降低,提高程序可重用性,提高开发效率。