SpringMVC框架学习—SpringMVC
SpringMVC框架是一个应用于表现层的框架
经典三层架构
在 B/S 架构中,系统标准的三层架构包括:表现层、业务层、持久层。
表现层
:
也就是我们常说的web 层。 它负责接收客户端请求,向客户端响应结果,通常客户端使⽤http 协议请求web 层,web 需要接收 http 请求,完成 http 响应。
- 表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
- 表现层依赖业务层,接收到客户端请求⼀般会调⽤业务层进⾏业务处理,并将处理结果响应给客户端。
- 表现层的设计⼀般都使⽤ MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系)
业务层
:
也就是我们常说的 service 层。 它负责业务逻辑处理,和我们开发项⽬的需求息息相关。
- web 层依赖业务层,但是业务层不依赖 web 层。
- 业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务⼀致性。(也就是我们说
的, 事务应该放到业务层来控制)
持久层
:
也就是我们是常说的 dao 层。
- 负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进⾏持久化的载体,数据访问层是业务层和持久层交互的接⼝,业务层需要通过数据访问层将数据持久化到数据库中。
- 通俗的讲,持久层就是和数据库交互,对数据库表进⾏增删改查的。
MVC设计模式
MVC 全名是 Model View Controller,是 模型(model)-视图(view)-控制器(controller) 的缩写, 是⼀种⽤于设计创建 Web 应⽤程序表现层的模式。MVC 中每个部分各司其职:
-
Model(模型)
:模型包含业务模型和数据模型,数据模型⽤于封装数据,业务模型⽤于处理业务。 -
View(视图)
: 通常指的就是我们的 jsp 或者 html。作⽤⼀般就是展示数据的。通常视图是依据模型数据创建的。 -
Controller(控制器)
: 是应⽤程序中处理⽤户交互的部分。作⽤⼀般就是处理程序逻辑的。 -
MVC提倡
:每⼀层只编写⾃⼰的东⻄,不编写任何其他的代码;分层是为了解耦,解耦是为了维护⽅便和分⼯协作。
什么是SpringMVC
-
SpringMVC 全名叫 Spring Web MVC
,是⼀种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级Web 框架,属于 SpringFrameWork 的后续产品。原来的Spring只有IOC和AOP,web模块都是后面加进来的
-
SpringMVC 已经成为⽬前最主流的 MVC 框架 之⼀
.它通过⼀套注解,让⼀个简单的 Java 类成为处理请求的控制器,⽽⽆须实现任何接⼝。同时它还⽀持RESTful 编程⻛格的请求。 -
总之
:Spring MVC为了解决表现层问题 的web框架,它们都是基于 MVC 设计模式的。⽽这些表现层框架的主要职责就是处理前端HTTP请求。 -
Spring MVC
本质可以认为是对servlet的封装,简化了我们serlvet的开发 作⽤
:
- 接收请求
- 返回响应,跳转⻚⾯
SpringMVC与原生servlet的区别
- 没有使用
SpringMVC
框架的时候客户端要发送很多请求,针对不同的业务,写很多不同的Servlet
- 使用
SpringMVC
框架的时候,可以看做全局只有一个Servlet,就是DispatcherServlet
—前端控制器
,前端控制器就类似一个包工头,将请求全部发给前端控制器
,之后前端控制器
就会将这些不同的请求发送给不同的执行业务逻辑的Handler
-
SpringMVC
对原生的Servlet
进行封装,所以也可以看成SpringMVC
就是一个Servlet
- 什么是Handler:一个普通的java类通过添加注解具有处理具体业务逻辑的功能,就是Handler
SpringMVC请求过程
SpringMVC的工作流程
- 配置DispatcherServlet前端控制器
在web.xml中
- 开发处理具体业务逻辑的Handler(@Controller、@RequestMapping)
- xml配置⽂件配置controller扫描,配置springmvc三⼤件
视图解析器,处理器映射器,处理器适配器
- 将xml⽂件路径告诉springmvc(DispatcherServlet)
SpringMVC的请求处理流程
第⼀步
:⽤户发送请求⾄前端控制器DispatcherServlet第⼆步
:DispatcherServlet收到请求调⽤HandlerMapping处理器映射器(存储了handler和url之间的映射关系)
,向处理器映射去找当前能处理这个请求的handler,
处理器映射器也可以看作是一个Map
,key
就是url
,value就是能处理这个url
的handler
第三步
:一旦发现有能处理当前url
的handler
就会返回一个处理器执行链HandlerExecutionChain,里面包含很多HandlerIntercepter拦截器和handler对象,Interceptor比filter好用
,处理器映射器根据请求Url找到具体的Handler(后端控制器),⽣成处理器对象及处理器拦截器(如果 有则⽣成)⼀并返回DispatcherServlet第四步
:DispatcherServlet
调⽤HandlerAdapter
处理器适配器去调⽤Handler
,所谓的适配器就是大家的表现形式不同但最终返回的结果是一样的第五步
:处理器适配器执⾏Handler
第六步
:Handler执⾏完成给处理器适配器返回ModelAndView第七步
:处理器适配器向前端控制器返回 ModelAndView,ModelAndView 是SpringMVC 框架的⼀个底层对象,包括 Model 和 View第⼋步
:前端控制器请求视图解析器去进⾏视图解析,根据逻辑视图名来解析真正的视图。第九步
:视图解析器向前端控制器返回View,通过下图中InternalResourceViewResolver
视图解析器拼接前缀和后缀,封装成view对象
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
第⼗步
:前端控制器进⾏视图渲染,就是将模型数据(在 ModelAndView 对象中)填充到 request 域
第⼗⼀步
:前端控制器向⽤户响应结果