SpringMVC-简单总结

要学习一项技术,首先要知道, 它是什么, 为什么要用它 , 它由哪些东西组成, 每个东西是干什么的, 它们怎么综合在一起的

参考博客: 平凡希: https://www.cnblogs.com/xiaoxi/p/6164383.html

                 幸运草铃兰: https://blog.csdn.net/xingyuncaojun/article/details/80633495

参考书籍:《JavaEE 互联网轻量级框架整合开发 SSM框架和Redis实现》

一.SpringMVC是什么?

  SpringMVC是Spring框架后续开发的一个模块, 它是一个基于MVC模式的开发框架.

  早期的MVC由Servlet, JavaBean, JSP组成, 用户请求先到达Servlet, Servlet作为控制器接收请求,然后调度JavaBean来读写数据库的数据,最后将处理结果放在JSP中,返还展现给用户.

   这样的模式就是MVC模式, Servlet扮演Controller(控制器)角色, JavaBean扮演Model(模型)角色, JSP扮演View(视图)角色. 这样设计的好处就是, 前后端有了一定的分离, 前端与后端只有一定的数据交流, 减少了一定的耦合(依然有耦合), 而控制器和模型的分离,使得大量代码有了重用的可能.

   传统的MVC框架还是存在着一定的耦合性, 比如模型层夹杂着业务层和数据库的访问, 所以SpringMVC把传统的模型层拆分为了:Service(业务层)和DAO(数据访问层). 在Service下可以通过Spring的声明式事务操作数据访问层, 而在业务层上还允许我们访问NoSQL,这样能满足现代互联网系统的性能.

   SpringMVC最大的特点是结构松散, 耦合度较低, 对各个模块进行了分离,使得各自负责各自的逻辑.

二.为什么要用SpringMVC?

   SpringMVC的特点已经在上面描述过了, 就是在传统MVC模式下,将Model层拆分为 Service和DAO. 其最大的特色就是结构松散, 比如几乎可以在SpringMVC中使用各类视图, 包括JSON,JSP,XML,PDF等,所以它能满足手机端,页面端和平板电脑端的各类请求. 

   SpringMVC和Struts对比:

   ①SpirngMVC的入口是Servlet, Struts是Filter

   ②SpringMVC是基于方法设计的,而Struts是基于类设计的,每次发一次请求都会实例一个Action

   ③SpringMVC更加简洁,开发效率比Struts高, 能够处理ajax请求

三.SpringMVC的组件与流程

    1.组件:

      ①核心控制器 DispatcherServlet :

          作用: 接收请求, 响应结果 , 降低组件之间的耦合度

          SpringMVC框架是围绕DispatcherServlet工作的, 它是整个流程控制的中心. 它负责协调和组织不同组件完成请求处理并返回响应工作.

      ②处理器映射器 HandlerMapping:

          作用: 根据请求路径找到相应的处理器

          HandlerMapping根据用户的请求找到对应的Handler(它可能是一个Controller方法, 也可能是一个Controller对象,Servlet对象 或者 HttpRequestHandler对象), 并将Handler与一堆HandlerInterceptor(拦截器)封装到HandlerExecutionChain对象中

          SpringMVC可以根据不同的方式来进行处理器的映射 , 如:配置文件方式, 注解方式, 实现接口方式等.

      ③处理器适配器 HandlerAdapter:

          作用: 根据Handler找到支持它的HandlerAdapter, 然后通过这个HandlerAdapter来执行这个Handler和其拦截器, 最终得到ModelAndView对象.

           就像上面的Handler种类说的, 根据Handler的不同,适配的HandlerAdapter的种类也不同. 他可能是SimpleControllerHandlerAdapter(Controller类型的Handler), 也可能是SimpleServletHandlerAdapter(Serlvet类型的Hand;er), 或者HttpRequestHandlerAdapter(HttpRequestHandler类型的Handler)

       ④视图解析器 ViewResolver :

           作用:进行视图解析, 把一个逻辑上的视图名称解析为一个真正的视图(View对象)

            ViewResolver负责将处理结果生成View视图, ViewResolver首先根据逻辑视图名称解析成物理视图名即具体的页面地址, 再生成View视图对象, 最后对View进行渲染将处理结果通过页面展示给用户. SpringMVC提供了很多View视图类型, 包括:jstlView , freemarkerView, pdfView等.

       ⑤处理器 Handler :

            作用: 处理具体的用户请求

            可以理解为广义上的Controller, 和在HandlerAdapter中所描述的一样, Handler有很多种,它可能是一个Controller的方法, 一个Controller, 一个Servlet, 一个HttpRequestHandler, 但是它们的作用都是为了处理具体的用户请求.

         

        ⑥视图 View :

            作用: View接口的主要作用是用于处理视图, 然后返回给客户端.

      2.组件控制流程:

        图片转自:https://www.cnblogs.com/xiaoxi/p/6164383.html

流程简介:

1.用户发送请求>>>>>DispatcherServlet:

    DispatcherServlet受到请求后,自己不做处理,而是首先委托HandlerMapping进行第一步处理,自己只作为统一访问点, 进行全局的流程控制

2.DispatcherServlet>>>>>>>HandlerMapping:

    HandlerMapping根据请求查找对应的Handler, 并将Handler对象和其多个HandlerInterceptor(拦截器)对象包装为一个HandlerExecutionChain(执行链)对象 并返回给DispatcherServlet

3.DispatcherServlet>>>>>>>HandlerAdapter:

     HandlerAdapter根据Handler的种类,找到支持对应类型的适配器,如SimpleControllerHandlerAdapter支持Controller类型的Handler, 这样Handler就可以在适合的运行环境下运行. 对应类型HandlerAdapter会执行对应的Handler, 以及执行目标方法前后需要执行的拦截器. 最终完成功能处理, 并返回一个ModelAndView对象到DispatcherServlet;

4.DispatcherServlet>>>>>>>ViewResolver:

    根据ModelAndView的逻辑视图名, ViewResolver将其解析为具体的View对象.

5.View >>>>> 渲染

    View对象会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

6.返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

猜你喜欢

转载自www.cnblogs.com/wqq-blog/p/10687981.html