• Spring MVC(一)--SpringMVC的初始化和流程


    SpringMVC是Spring提供给WEB应用的MVC框架,MVC框架一般来说由三部分组成:

    • Model:模型层,一般由java bean完成,主要是进行数据库操作;
    • View:视图层,用于前端展示,比如jsp、html等;
    • Controller:控制层,链接前后端,处理用户请求,起着承前启后的作用;

    早期的MVC模式中,Model由java bean扮演,View由jsp扮演,Controller由Servlet扮演,三者组成一个三角形的MVC框架,使得前后端有了一定的分离,而且控制器和模型层的分离使得很多java代码得以重用,但是随着前端设备的多样化和前端各种技术的兴起,前端和后段的交互只变成json数据的交互,导致后端对于jsp的依赖减少,这就出现了Spring MVC的架构。它的最大特点是结构比较松散,在Spring MVC中能够使用JSP、JSON、XML、PDF等各类视图,所以它能满足手机、PC、平板等不同设备中的WEB请求。

    一、Spring MVC组件和流程

    Spring MVC是基于Servlet的技术,它提供了核心类DispatcherServlet和相关的组件,围绕这个核心类有一个完整的流程,所有的WEB请求都是沿着它所规定的流程进行,所以流程就是它最神秘也是我们所好奇的运行原理。下看一个流程图(备注:图片摘自《JavaEE互联网轻量级框架整合开发-SSM框架》)

    Spring MVC执行流程

    从上图中可以看出,Spring MVC就是围绕着DispatcherServlet进行的,这个类是继承了WEB容器所提供的Servlet类,所以当WEB容器启动的时候,随着Servlet的初始化,它会执行过程为:

    1、首先SpringMVC会根据配置信息,得到URI和处理器之间的映射关系,即处理器映射HandlerMapping,因为处理器上还能加拦截器,从而会形成一个处理器执行链;

    2、其次它还会根据上下文初始化视图解析器ViewResolver;

    上面两步是初始化时的一些准备工作,当用户发起一个请求时,首先会根据准备好的HandlerMapping找到对应的处理器Handler ,这样就开始执处理器和拦截器组成的执行链,这个执行链的环境需要找处理器适配HandlerAdapter提供,当处理器返回模型和视图的时候DispatcherServlet会把它们交给视图解析器ViewResolver进行解析。需要注意的是,这一步要区分是不是逻辑视图,如果是逻辑视图,那么试图解析器会把模型渲染到视图中,然后响应给用户;如果不是逻辑视图,则直接通过视图渲染数据。

    二、Spring MVC的初始化

    Spring MVC的初始化主要有两部分组成:

    1⃣️初始化Spring IOC

    通过配置ContextLoderListener完成

    2⃣️初始化映射请求上下文

    通过配置DispatcherServlet完成

    注意⚠️:如果没有配置Spring IOC的初始化类ContextLoderListener,那么DispatcherServlet在它初始化的时候会对Spring IOC进行初始化,一般来说最好在DispatcherServlet初始化之前就完成Spring IOC初始化。

    下面是DispatcherServlet的设计(通过源码可知它们的关系):

    从上图可以看出,DispatcherServlet最终是继承由WEB容器提供的HttpServlet实现的。它里面有以下几个组件,这些组件就是Spring MVC的核心部分:

    • MultipartResolver:文件解析器,用于支持服务器的文件上传;
    • LocaleResolver:国际化解析器,用来提供国际化功能;
    • ThemeResolver:主题解析器,用来提供皮肤主题功能;
    • HandlerMapping:映射URI和处理器,使控制器得以运行;
    • HandlerAdapter:处理器适配器,为不同的处理器提供上下文运行环境;
    • HandlerExceptionResolver:处理器异常解析器,用来解析处理器产生的异常;
    • RequestToViewNameTranslator:视图逻辑名称转换器,根据逻辑视图的名称找到具体的视图。注意⚠️:当处理器没有返回逻辑视图名时,将请求的URL自动映射为逻辑视图名;
    • ViewResolver:视图解析器,当控制器返回后,通过试图解析器会把逻辑视图名进行,从而定位实际视图;

    在WEB容器启动的时候,Spring MVC就会初始化上面的这些组件,所以我们不需要对他们进行配置就可以用了。本文先记录以下Spring MVC的流程和初始化,下一篇文章将举个实例说明。

  • 相关阅读:
    算法导论 第一章
    20155312 2016-2017-2 《Java程序设计》第七周学习总结
    Visual Studio 2005 搭建Windows CE 6.0环境之准备
    C#在winform中调用系统控制台输出
    C# 目录(文件夹)复制实现
    关于加强数据库安全的一些实践
    运维小白部署网站踩坑全过程
    jQuery学习之二 jQuery选择器
    运维系列之二 Linux文件种类和扩展名
    运维系列之一 Linux的文件与目录权限解析
  • 原文地址:https://www.cnblogs.com/hellowhy/p/9737885.html
Copyright © 2020-2023  润新知