对SpringMVC的工作原理以及其框架的详解

SpingMVC和Sturts都是java开发中常用到的一个框架,今天楼主先来说说SpringMVC框架的一些知识点以及其工作原理。愿对广大java学习以及从事初、中级java开发的从业者有所帮助,当然文章中若有不对之处或者雷同之处,愿广大笔友不吝赐教以及指责。下面开始进入正题,首先我们对SpringMVC做一个大体的了解:

      1)SpringMVC是Spring框架的一个模块,因此SpringMVC和Spring之间无需通过中间整合层来进行整合开发。

      2)SpringMVC是一个基础MVC的Web框架。

      3)Spring Web MVC和Sturts2都是表现层的框架,它是Spring框架的一部分,关于这一点我们可以通过Spring的整体结构

            图直观的看出来:


从上图中我们可以看出Spring中共包含6个功能模块,而我们平时开发中常用的框架也就只是其中某个模块而已。

SpringMVC的工作原理

说到SpringMVC的工作原理,有一个看起来很复杂的图给大家看看,如下:

上图就是关于SpringMVC工作原理的直观图(图解如下):

1) 用户发起请求到前端控制器(DispatcherServlet);

2)前端控制器请求HandlerMapping查找Handler,可以根据XML配置、注解进行查找;

3)处理器映射器HandlerMapping向前端控制器返回Handler;

4)  前端控制器调用处理器适配器去执行Handler;

5)  处理器适配器去执行Handler;

6)  Handler执行完成给适配器返回ModelAndView(ModelAndView是SpringMVC框架的一个底层对象,包括Model和View);

7)处理器适配器向前端控制器返回ModelAndView;

8)前端控制器请求视图解析器去进行视图解析(根据逻辑视图名称解析查看真正的视图{*.jsp});

9)视图解析器向前端控制器返回View;

10)前端控制器进行视图渲染(视图渲染就是将模型数据[在ModelAndView对象中]填充到request域中);

11)前端控制器向用户相应结果。

各个组件的简单介绍:

前端控制器DispatcherServlet(不需要开发人员进行开发),由框架提供

  作用:接受请求,相应结果,相当于转发、中央处理器。有了DispatcherServlet减少了其他组件之间的耦合度。

用户请求到达前端控制,它就相当于MVC中的C,DispatcherServlet是整个流程在控制的中心,由它来调用其他组件的请求,所以说DispatcherServlet大大降低了各个组件之间的耦合度。

处理器映射器HandlerMapping(不需要开发人员进行开发),由框架提供

作用:根据请求的URL查找对应的Handler

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

处理器适配器HandlerAdapter

   作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler

       通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。

处理器Handler(需要攻城狮开发)

        注意:编写Handler是按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler

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

视图解析器View resolver(不需要攻城狮开发),由框架提供

      作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

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

  一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由攻城狮根据业务需求开发具体的页面。

视图View(需要攻城狮开发jsp...)

        View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf等等)。


猜你喜欢

转载自blog.csdn.net/qq_37840993/article/details/80037687
今日推荐