Spring MVC 架构分析

一、Spring MVC 介绍

Spring MVC 属于 Spring FrameWork 的后续产品,已经融合在 Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用 Spring 进行 WEB 开发时,可以选择使用 Spring 的 Spring MVC 框架或集成其他 MVC 开发框架,如 Struts1(现在一般不用),Struts2(一般老项目使用)等。

Spring web mvc 和 Struts2 都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来,如下图:

二、Spring MVC 架构

  • 框架结构:一个中心、三个基本点(一个前端控制器、三大组件)

    绿色部分由开发人员开发,红色部分框架已写好。

  • 架构流程(重点)
    1)、用户发送请求到前端控制器 DispatcherServlet
    2)、DispatcherServlet 收到请求后调用处理器映射器 HandlerMapping 查询对应的处理器 Handler
    3)、处理器映射器根据请求url找到具体的处理器,生成处理器对象和处理器拦截器(如果有则生成)一并返回给前端控制器;
    4)、前端控制器通过处理器适配器 HandlerAdapter 调用具体的处理器;
    5)、执行处理器 (Controller,也叫后端控制器);
    6)、处理器执行完后返回 ModelAndView
    7)、前端控制器将 ModelAndView 传给视图解析器请求解析视图;
    8)、视图解析器解析完后返回 view 对象给前端控制器;
    9)、前端控制器对 view 进行渲染视图(即将模型数据填充到视图中);
    10)、前端控制器响应用户。


  • 组件说明
    以下组件通常使用框架提供实现
    1)、DispatcherServlet:前端控制器(核心)
    用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。

    2)、HandlerMapping:处理器映射器
    HandlerMapping负责根据用户请求url找到Handler即处理器,spring mvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

    3)、HandlerAdapter:处理器适配器
    通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
    下图是许多不同的适配器,最终都可以使用usb接口连接


    4)、Handler:处理器
    Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler

    5)、ViewResolver:视图解析器
    View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。

    6)、View:视图
    springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

  • 默认加载的组件
    我们没有做任何配置,就可以使用这些组件
    因为框架已经默认加载这些组件了,配置文件位置如下图:

  • 组件扫描器(重点)
    使用组件扫描器省去在spring容器配置每个Controller类的繁琐。
    使用自动扫描标记@Controller的控制器类,在springmvc.xml配置文件中配置如下:



  • 注解处理器映射器和处理器适配器
    1)、配置处理器映射器
    注解式处理器映射器,对类中标记了@ResquestMapping的方法进行映射。根据@ResquestMapping定义的url匹配@ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器。(HandlerMethod对象中封装了url对应的方法Method)
    从spring3.1版本开始,废除了DefaultAnnotationHandlerMapping的使用,推荐使用RequestMappingHandlerMapping完成注解式处理器映射。
    springmvc.xml配置文件中配置如下:


2)、配置处理器适配器
注解式处理器适配器,对标记@ResquestMapping的方法进行适配。
从spring3.1版本开始,废除了AnnotationMethodHandlerAdapter的使用,推荐使用RequestMappingHandlerAdapter完成注解式处理器适配。
springmvc.xml配置文件中配置如下:



3)、注解驱动(代替上面两个步骤)(重点)
直接配置处理器映射器和处理器适配器比较麻烦,可以使用注解驱动来加载。
SpringMVC使用自动加载RequestMappingHandlerMappingRequestMappingHandlerAdapter
可以在springmvc.xml配置文件中使用替代注解处理器和适配器的配置。




  • 视图解析器(重点)
    视图解析器使用SpringMVC框架默认的InternalResourceViewResolver,这个视图解析器支持JSP视图解析
    springmvc.xml配置文件中配置如下:
    
    
    
       
       
       
       
    

逻辑视图名需要在controller中返回ModelAndView指定,比如逻辑视图名为ItemList,则最终返回的jsp视图地址:"WEB-INF/jsp/itemList.jsp"
最终 jsp 物理地址:前缀+逻辑视图名+后缀

你可能感兴趣的:(Spring MVC 架构分析)