SSM框架梳理(一)SpringMVC工作流程

550 阅读3分钟

一.基础概念

首先,SSM不是一个框架,而是一个框架集合,集合了Spring和MyBatis两个开源框架,SSM=Spring+SpringMVC+Mybatis,那么这个SpringMVC又是啥呢?可以这么理解,Spring是一个底层框架,是一个大工厂。MVC大家也都知道,是一种WEB架构,我之前没学习java的时候,用VS写C#,也都是用的MVC三层架构。那么SpringMVC其实就是在Spring框架的基础上,添加的Web架构,必须依赖于Spring。换句话说,SpringMVC是一个基于Spring的WEB开发框架,使用MVC模式。

整个SSM将系统分为了view表现层,controller控制层,service实现层,DAO数据层。

1.SpringMVC

既然我们先以SpringMVC为切入点了,那就顺便来复习一下MVC。Model-View-Controller组成了MVC,这是一种架构模式。View视图,是指用户看到并与之交互的界面。Model模型,是处理具体业务的,负责返回数据给View,一个模型可以给多个视图提供数据。Controller控制器,负责接收用户的输入请求,并调用模型和视图取完成用户的需求,其中调用模型可以处理业务请求,调用视图用来显示model返回的数据。控制器本身不做业务处理,也不会输出任何数据,它只是接受用户请求并且自行决定调用哪个模型和视图。

上图就是mvc的流转模式。

回顾了MVC的知识,我们再来理解SpringMVC就会容易一些。SpringMVC有一个前端控制器,也叫分发器,叫做DispatcherServlet,具体内容是一个处理请求的算法,DispatcherServlet的作用就是非常专心地接收用户的请求,然后根据请求(一般来讲是url里面的内容)来找到对应的后台控制器,后台控制器其实就是controller,然后后台控制器就可以去调用业务方法了。DispatcherServlet是怎么找到Controller的呢?见下图:

 这是来自SpringMVC官网的图,就是这个HandlerMapping中的配置,此处就融合了Spring框架的方法,每一个controller都写上一个mapping,这个mapping就是分发器找到对应controller的依据,例如我自己的代码:

@Controller
@RequestMapping(value = "/spotCheck")

@ResponseBody
    @RequestMapping(value = "/selectHealthList", method = { RequestMethod.POST, RequestMethod.GET })
    public ResultEntity selectHealthList(@RequestBody CheckPlanInfo checkplaninfo, HttpServletRequest request,
            HttpServletResponse response, Model model) {
    ResultEntity reult =new ResultEntity();

    return result;
}

这是我每一个controller文件主体前都要写的注解,@Controller是告诉框架,我这是一个controller文件,两个@RequestMapping是我将这个找寻的过程分成了两个部分,其实可以不写成两部分,controller注解下不写也可以,直接在controller里具体调用方法体前头写就行,不管怎么写,目的是告诉分发器,我的mapping是什么,到时候你别找错人了。例如我代码里的spotCheck,用户请求过来的url里,就含有这部分,比如说下面的这个请求:

 这是一个接口,http请求,打码部分是ip地址+端口号,第二部分是项目名称,第三部分就是我前面在controller里写的mapping“spotCheck”+"getCheckOrderList",当然如果只用一个注解,就可以直接写成“SpotCheck-getCheckOrderList”效果是一样的。以上,这个DispatcherServlet分发器,就成功地找到了我们后台的controller。

其实严格来说,不止有一个DispatcherServlet和HandlerMapping映射器,还有一个HandlerAdapter适配器,DispatcherServlet前端控制器调用HandlerMapping后,HandlerMapping返回执行链给DispatcherServlet,DispatcherServlet拿着执行链去请求HandlerAdapter执行,这才调用到了后台的controller。

Controller调用service层的的业务逻辑处理代码,service层调用DAO层的数据库映射,然后执行了SQL语句,最终由Controller将数据结果return回去,这个时候数据其实就是modelAndView,还是返回给DispatcherServlet,DispatcherServlet又将modelAndView传给了ViewReslover(视图解析器),最终解析后返回具体的View给DispatcherServlet,然后DispatcherServlet再给到用户。

以上我讲的MVC执行流程见下图,会直观一些:

在这里插入图片描述

我们回顾整个过程,不难发现,其实DispatcherServlet是一个核心的组件,整个MVC的执行流程都是围绕着DispatcherServlet前端控制器来进行的,它确实不干具体的事,但是它像大脑,需要调度其他组件去完成各种事。

我这里再加上一张SpringMVC接收到请求之前的图,相当于整个WEB请求的过程了:

SpringMVC流程

 写着写着我发现跑偏了,我们本来要着手于SSM框架整体来讲机制和架构的,但是写着写着写到SpringMVC的处理流程上去了,好像就没有Spring和MyBatis啥事儿了,你看上图,这不就已经是一次WEB请求的全过程了吗?SpringMVC不是都给你把活都干完了吗?

确实,SpringMVC在整个SMM中实现的作用非常大,负责整个过程中请求的处理、请求的反馈。Spring和Mybatis的作用篇幅问题,我留到下一篇文章再讲,文章所有文字都是手敲,个别图片借鉴网络资料,毕竟让我一个手残党去画图,实在是没有天赋啊