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)
上一篇 2022年5月15日 上午9:40
下一篇 2022年5月15日 上午9:40


相关推荐

  • dreamweaver导入站点_站点创建成功咋办

    dreamweaver导入站点_站点创建成功咋办
    在“文件”面板中,单击“文件”下方列表框的下拉箭头,从下拉列表框中单击“管理站点”菜单项,如下图所示。
    弹出“管理站点”对话框,如下图所示。
    点击“新建”-“站点”,如下图所示。
    弹出“未命名站点1的站点定义为”对话框,在“基本”选项卡,“您打算为您的站点起什么名字?”一栏输入站点的名字,如:Fuersen。在“您的站点的HTTP地址(URL)是什么?”输入“http://www.Fuersen.com/mysite”,如下图所示。
    点击“下

    2022年10月21日
    6
  • 数据库外键可以为空

    数据库外键可以为空一 nbsp nbsp 关于数据库的外键 以前我一直以为不允许为空的 今天看到一个项目中使用了空的数据库外键 很惊讶 后来才发现是自己以前错误了 数据库外键是可以为空的 不过为空的数据跟与之相关联的表就没有关系了 一般不采用 二 nbsp nbsp 按照数据库理论上说的应该是外键可以为空 为空表示其值还没有确定 如果不为空 刚必须为主键相同 举个例子 有两张表 系信息表 学生信息表 学生信息表

    2026年3月18日
    3
  • Activiti初学者教程

    Activiti初学者教程http://wenku.baidu.com/view/bb7364ad4693daef5ff73d32.html1.初识Activiti1.1.工作流与工作流引擎工作流(workflow)

    2022年7月1日
    25
  • c++视频转字符画_c++字符数组转化为字符串

    c++视频转字符画_c++字符数组转化为字符串运行此程序需要有graphics图形库#include <stdio.h>#include <graphics.h> // 图形库的头文件#define HEIGHT 8 // 转换后的高度#define WIDTH 8 // 转换后的宽度#define ASCII1 32 // 转换ASCII数量struct ASCII{ char as…

    2022年8月18日
    9
  • LIS

    LIS

    2021年9月14日
    64
  • pycharm pip版本不对_python没有pip

    pycharm pip版本不对_python没有pip我在pycharm的Terminal中,更新pip的时候,出现了以下错误:原因:可能与最近的Windows10更新有关。我的版本如下:在cmd中输入msinfo32,回车,可以看到版本信息。解决办法:直接运行cmd,输入python-mpipinstall-Upip,就可正常升级pip了。PS:查到的另外一个解决办法是安装win_unicode_consol…

    2025年7月16日
    8

发表回复

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

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