SpringMVC工作原理概述

SpringMVC工作原理概述SpringMVC框架介绍SpringMVC属于SpringFrameWork的后续产品,已经融合在SpringWebFlow里面。Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,可以选择是使用内置的SpringWeb框架还是Struts这样的Web框架。通过策略接口,Spring框架是高度可配置的,而…

大家好,又见面了,我是你们的朋友全栈君。

SpringMVC框架介绍

  • Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。

Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。

        Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

  •  Spring的MVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。

SpringMVC原理图

 

SpringMVC工作原理概述

 

SpringMVC工作流程概述:

1、客户端向web服务器(如tomcat)发送一个http请求,web服务器对http请求进行解析,解析后的URL地址如果匹配了DispatcherServlet的映射路径(通过web.xml中的servlet-mapping配置),web容器就将请求交给DispatcherServlet处理。

2、DispatcherServlet接收到这个请求后,再对URL进行解析,得到请求资源标识符(URI)。然后调用相应方法得到的HandlerMapping对象,再根据URI,调用这个对象的相应方法获得Handler对象以及它对应的拦截器。(在这里只是获得了Handler对象,并不会操作它,在SpringMVC中,是通过HandlerAdapter对Handler进行调用、控制的)

3、DispatcherServlet根据得到的Handler对象,选择一个合适的HandlerAdapter,创建其实例对象,执行拦截器中的preHandler()方法。

4、在拦截器方法中,提取请求中的数据模型,填充Handler入参,所以所有准备工作都已做好,开始执行Handler(我们写的controller代码并不是能被直接执行,需要有刚才那些操作,才能转变为Handler被执行)。

5、Handler执行完毕后返回一个ModelAndView对象给DispatcherServlet。

6、这个ModleAndView只是一个逻辑视图,并不是真正的视图,DispatcherServlet通过ViewResolver视图解析器将逻辑视图转化为真正的视图(通俗理解为将视图名称补全,如加上路径前缀,加上.jsp后缀,能指向实际的视图)。

7、DispatcherServlet通过Model将ModelAndView中得到的处数据解析后用于渲染视图。将得到的最终视图通过http响应返回客户端。

SpringMVC工作原理概述

 

  • DispatcherServlet是整个Spring MVC的核心。它负责接收HTTP请求组织协调Spring MVC的各个组成部分。其主要工作有以下三项:

 

 

    1. 截获符合特定格式的URL请求。
    2. 初始化DispatcherServlet上下文对应的WebApplicationContext,并将其与业务层、持久化层的WebApplicationContext建立关联。
    3. 初始化Spring MVC的各个组成组件,并装配到DispatcherServlet中。

时序图(转载):

SpringMVC工作原理概述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146441.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pytest重试_pytest失败重跑

    pytest重试_pytest失败重跑安装:pip3installpytest-rerunfailures重新运行所有失败用例要重新运行所有测试失败的用例,请使用–reruns命令行选项,并指定要运行测试的最大次数:$py

    2022年7月30日
    14
  • 并查集例题_并查集算法

    并查集例题_并查集算法E – 带删除并查集 UVA – 11987 Almost Union-Find

    2022年4月20日
    38
  • 阿里云cdn要备案吗_未备案域名cdn

    阿里云cdn要备案吗_未备案域名cdncdn需要备案么?需要的,使用国内的cdn节点,必须要有备案才可以做cdn,相关部门为防止cdn滥用,要求必须先备案。国内节点只要是大型数据中心的,基本都要备案。使用CDN产品是需要备案的,但不限制在提供商处备案,只要那么,无备案的网站就无法使用CDN了吗?作为这些网站的站长就只能选择免备案的CDN服务商了,而免备案的CDN加速基本节点都是在海外的。1、选择安全可靠的CDN市面上也有一些提供免费C…

    2025年10月19日
    3
  • Python数据可视化工具软件_数据大屏可视化

    Python数据可视化工具软件_数据大屏可视化如何做Python的数据可视化?pyecharts是一个用于生成Echarts图表的类库。Echarts是百度开源的一个数据可视化JS库。主要用于数据可视化。一、安装pyecharts兼容Python2和Python3。目前版本为0.1.4pipinstallpyecharts二、入门首先开始来绘制你的第一个图表

    2022年4月19日
    41
  • 面试问题 集锦

    面试问题 集锦

    2021年5月25日
    109
  • mybatis map foreach_while的三个用法

    mybatis map foreach_while的三个用法MyBatis循环Map今天遇到一个比较特殊的业务,需要对传入的Map数据在映射文件中进行遍历,在之前的学习中,我们也知道MyBatis有默认对集合的操作list和array,但是没有默认的map,所有不能直接写collection=“map”,如果这么处理,它会当成是根据map.get(“map”)获取传递value只,大部分情况下是一个map中是不会有“map”这个key的,于是就是报错。如果你想用map标识来获取参数map,就需要保证传入的Map参数有@Param(“map”

    2022年8月30日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号