Spring MVC简单执行流程

Spring MVC 一个简单的多文件上传 Spring解析文件到MultipartFile数组。返回'success' 阅读详情

本片博文主要复习下Spring MVC的执行流程,也方便自己面试的时候做简单的回顾;


以下执行流程图来此网络(动力节点图片)

这里写图片描述

近下来我们对Spring MVC的默认配置类 DispatcherServlet.properties类进行简单的分析:

DispatcherServlet.properties

com.springframework.web.servlet.DispatcherServlet.properties:
o.s.w.s = org.springframework.web.servlet 
//支持国际化,解析用户区域
osws.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

//提供了动态更换样式的支持
osws.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

//根据uri找到处理器handler和拦截器,并将其封装成处理器执行链,HandlerExecutionChain 返回给前端控制器;
osws.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

//HandlerAdapter的功能实际就是执行我们的具体的Controller、Servlet或者HttpRequestHandler中的方法;
osws.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

//HandlerExceptionResolver的功能实际就是执行我们的具体的Controller、Servlet或者HttpRequestHandler中的方法;
osws.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

//ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视图
osws.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

// flashmap 的作用是在redirect中传递参数。重定向会生成新的request,那传递参数就不能直接用request进行传递。
osws.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

1: HandlerMapping:

HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;

这里写图片描述


2: HandlerAdapter:

boolean supports(Object handler); 

ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)

long getLastModified(HttpServletRequest request, Object handler); 

这里写图片描述

1、SimpleServletHandlerAdapter实际就是执行HttpServlet的service方法
2、SimpleControllerHandlerAdapter实际就是执行Controller的handleRequest方法
3、HttpRequestHandlerAdapter实际就是执行HttpRequestHandler的handleRequest方法
4、RequestMappingHandlerAdapter实际就是执行@RequestMapping注解的方法。
5、AnnotationMethodHandlerAdapter已结被废弃,


3: ViewResolver:

View resolveViewName(String viewName, Locale locale) throws Exception;

这里写图片描述
SpringMVC用于处理视图最重要的两个接口是ViewResolver和View。ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视图,SpringMVC中用于把View对象呈现给客户端的是View对象本身,而ViewResolver只是把逻辑视图名称解析为对象的View对象。View接口的主要作用是用于处理视图,然后返回给客户端。

  1. AbstractCachingViewResolver:这是一个抽象类,这种视图解析器会把它曾经解析过的视图保存起来,然后每次要解析视图的时候先从缓存里面找。

  2. UrlBasedViewResolver:它是对ViewResolver的一种简单实现,而且继承了AbstractCachingViewResolver,主要就是提供的一种拼接URL的方式来解析视图,

  3. InternalResourceViewResolver: 它会把返回的视图名称都解析为InternalResourceView 对象,InternalResourceView会把Controller处理器方法返回的模型属性都存放到对应的request属性中,然后通过RequestDispatcher在服务器端把请求forword重定向到目标URL。存放在/WEB-INF/下面的内容是不能直接通过request请求的方式请求到的,为了安全性考虑,我们通常会把jsp文件放在WEB-INF目录下,而InternalResourceView在服务器端跳转的方式可以很好的解决这个问题。

  4. XmlViewResolver:它继承自AbstractCachingViewResolver抽象类,所以它也是支持视图缓存的。XmlViewResolver需要给定一个xml配置文件,该文件将使用和Spring的bean工厂配置文件一样的DTD定义,所以其实该文件就是用来定义视图的bean对象的。在该文件中定义的每一个视图的bean对象都给定一个名字,然后XmlViewResolver将根据Controller处理器方法返回的逻辑视图名称到XmlViewResolver指定的配置文件中寻找对应名称的视图bean用于处理视图。该配置文件默认是/WEB-INF/views.xml文件,如果不使用默认值的时候可以在XmlViewResolver的location属性中指定它的位置。XmlViewResolver还实现了Ordered接口,因此我们可以通过其order属性来指定在ViewResolver链中它所处的位置,order的值越小优先级越高。

  5. BeanNameViewResolver:这个视图解析器跟XmlViewResolver有点类似,也是通过把返回的逻辑视图名称去匹配定义好的视图bean对象。不同点有二,一是BeanNameViewResolver要求视图bean对象都定义在Spring的application context中,而XmlViewResolver是在指定的配置文件中寻找视图bean对象,二是BeanNameViewResolver不会进行视图缓存。

  6. ResourceBundleViewResolver:它和XmlViewResolver一样,也需要有一个配置文件来定义逻辑视图名称和真正的View对象的对应关系,不同的是ResourceBundleViewResolver的配置文件是一个属性文件,而且必须是放在classpath路径下面的,默认情况下这个配置文件是在classpath根目录下的views.properties文件,如果不使用默认值的话,则可以通过属性baseName或baseNames来指定。

  7. ViewResolverComposite我们介绍了一些springMVC提供的很多视图解析器ViewResolver,在开发的一套springMVC系统中是可以使用多个视图的,当然就需要配置多个视图解析器了简单来说就是使用简单的List来保存你配置使用的视图解析器,


4: View:

void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) throws Exception;

这里写图片描述
图片来此网络(实际体系比此复制)
render中做的操作就是将model中的值全部存放到request和response中,这样就完成了请求的处理操作,最终就是返回response请求。


5:HandlerExceptionResolver:

ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex);

这里写图片描述

  1. DefaultHandlerExceptionResolver:
    解决标准的spring异常,并且将他们翻译成HTTP状态码;

  2. ResonseStatusExceptionResolver:
    解决使用@ResponseStatus注解把异常转换成相应的状态码;

  3. SimpleMappingExceptionResolver:
    解决异常类到view的映射与跳转问题;

  4. HandlerExceptionResolverComposite:
    作为容器使用,可以封装别的Resolver,它并不会解析具体的异常,而是调用其他的异常解析器处理异常

  5. ExceptionHandlerExceptionResolver:
    从spring mvc3 开始代替 AnnotationMethodHandlerException来处理注解异常;


菜鸟感觉,要想很好的理解运用spring mvc 还是理解思想,掌握流程,参看源码,以下几篇博文,对理解Spring mvc的流程很有帮助:
1. Sping mvc 源码分析
2. Spring mvc源码解析之异常解析

Spring MVC的执行流程(有图有真相) 所以我们要学习它,很重要的。DispatcherServlet接收到这个请求后,将根据请求的信息(包括URL、HTTP方法、请求报文头、请求参数、Cookie等)及HandlerMapping的配置找到处理请求的处理器(Handler)。最终客户端得到的响应消息可能是一个普通的HTML页面,也可能是一个XML或JSON串,甚至是一张图片或一个PDF文档等不同的媒体形式。我们先回顾一下MVC的概念,便于我们学习Spring MVC的执行流程。将软件分层的好处是,可以将对象之间的耦合度降低,便于代码的维护。 阅读详情

相关推荐

2023 年全国网络安全行业职业技能大赛-电子数据取证分析师-决赛WP_2023网络安全行业赛取证

数据库取证工具里面可以恢复删除掉的数据带红叉的就说删除过的,game库下面announcement_detail表里面update_time字段使用sql语句时间戳最大为1513243355转换时间为2017-12-14 17:22:35。

2401_89791684的博客 2091

springMVC源码解析--ViewResolverComposite视图解析器集合(二)

上一篇博客 springMVC源码分析--ViewResolver视图解析器(一)中我们介绍了一些springMVC提供的很多视图解析器ViewResolver,在开发的一套springMVC系统中是可以使用多个视图的,当然就需要配置多个视图解析器了,ViewResolverComposite简单来说就是使用简单的List来保存你配置使用的视图解析器。ViewResolverComposite中定

井底之蛙 2084

龙头复盘神器/复盘于导出工具最新版5.6

龙头复盘神器,复盘于导出工具

初入python踩过的坑 8226

SpringMVC常见组件之ViewResolver分析

本文我们尝试总结分析SpringMVC体系中的视图解析器-ViewResolver。其根据name解析视图View,通常鼓励实现类考虑国际化策略实现。 **接口只有一个抽象方法如下所示:** ```java @Nullable View resolveViewName(String viewName, Locale locale) throws Exception; ``` locale表示鼓励你支持国际化策略。如果当前实现类不能解析视图,那么请返回null以使得视图解析器链可以流转下去。 # 【1

小小默:进无止境 4536

OpenFoam实用技巧——starccm网格高效转换openfoam格式全解析

本文详细解析了如何利用OpenFOAM官方工具`ccm26toFoam`,将STAR-CCM+生成的高质量网格高效、稳定地转换为OpenFOAM格式。内容涵盖从STAR-CCM+正确导出网格、执行转换命令、解读转换日志,到转换后关键的边界条件修复与网格质量检查等全流程,旨在帮助用户规避常见错误,实现无缝工作流衔接。

weixin_28309571的博客 456

Excel-MCP实战指南:零代码实现大模型与Excel的智能交互

本文详细介绍了Excel-MCP工具如何实现大模型与Excel的无缝交互,无需编写代码即可完成数据读写、图表生成等复杂操作。通过实战案例展示了Excel-MCP在销售报表自动化、财务对账等企业级场景中的应用,大幅提升工作效率。文章还提供了安装指南、核心功能解析和常见问题解决方案。

weixin_29212429的博客 432

SpringMVC执行流程

DispatcherServlet 前端控制器是 SpringMVC 的核心组件之一,它接收客户端的请求并将请求分派到对应的处理器(Handler)进行处理。在接收到请求后,DispatcherServlet 会将请求 URL 传递给 HandlerMapping 映射器进行处理,并根据请求 URL 匹配对应的 HandlerExecutionChain 处理器执行链。HandlerExecutionChain 包含了一个或多个 Interceptor 拦截器和一个 Handler 处理器,拦截器可以在请求

weixin_58724261的博客 9828

EEGNet 网络代码解析与实战复现指南

本文详细解析了EEGNet这一轻量级卷积神经网络的结构与设计思想,重点阐述了其利用深度可分离卷积高效处理脑电信号的原理。文章提供了基于PyTorch的完整代码复现指南,包括网络搭建、数据模拟、训练调试及关键参数解析,旨在帮助读者掌握EEGNet的代码复现技巧,并将其应用于脑机接口等实际场景。

honey的博客 532

SpingMVC组件之ViewResolver

目录 1. ViewResolver概述 2. BeanNameViewResolver 3. ContentNegotiatingViewResolver 4. ViewResolverComposite 5. AbstractCachingViewResolver 6. 总结 1. ViewResolver概述 ViewResolver作为SpringMVC的组件之一,当然还是要从Dispa...

qq_15802379的博客 396

GameFramework 框架详解之 Network网络模块 工具链

GameFramework(下面简称GF)Demo中,已经给我们提供了Network模块使用的protobuf使用的动态链接库protobuf-net.dll,但是GF并没有给我们提供protobuf相关的工具链,比如:1.proto文件自动导出对应c#的Packet类和PacketHandler类2.导出Packet类继承IReference以便使用引用池。3.自动生成Packet类和PacketHandler的Id,且保持和服务器Id一一对应。

TxNet 2900

EMB电子机械制动系统和EHB电子液压制动系统控制功能的对比

EMB电子机械制动系统相比EHB液压制动系统具有显著优势:响应速度更快(<100ms)、控制精度更高(±2N·m)、能实现单轮独立控制,支持0.1%级制动力调节。在ABS、ESC等安全功能上表现更优,制动平顺性和NVH性能更好,同时提升能量回收效率15%-20%。特别适合智能驾驶需求,可使AEB等系统响应时间缩短50ms,紧急制动距离减少1米以上。EMB系统完美契合高阶自动驾驶对快速响应和精准控制的要求。

m0_59012156的博客 885

ViewResolver组件原理解析

到此有关ViewResolver的视图解析器组件相关源码分析已经结束。本篇博文主要针对ViewResolver接口三种类型的子类BeanNameViewResolver、ContentNegotiatingViewResolver、AbstractCachingViewResolver的resolveViewName的核心方法进行分析,同时附赠例子的github地址。每个子类都通过示例和源码分析并行的方式进行分析,核心还是介绍了我们真实开发场景中最常用的AbstractCachingViewResolve

liushangzaibeijing的博客 6万+

广东省道路工程检测练习试题(判断题)真题

按下式计算小于某粒径颗粒质量百分数:X=(A/B)x100( )49.、挖坑灌砂法适用于在现场测定基层(或底基层)、砂石路面及路基土的各种材料压实层的密度和压实度,但不适用于填石路堤等有大孔洞或大孔隙材料的压实度检测。95.挖坑灌砂法适用于在现场测定基层(或底基层)、砂石路面及路基土的各种材料压实层的密度和压实度,但不适用于填石路堤等有大孔洞或大孔隙材料的压实度检测( )107.以干密度 pd 为纵坐标,含水率w为横坐标,绘 pd-w 关系曲线,曲线上峰值点的纵、横坐标分别为最大干密度和最佳含水率( )

ZShy001238的博客 681

Spring MVC执行流程的简单理解

Spring MVC的架构图: Spring MVC理解: 1.前端发送请求到前端控制器。 前端控制器实际上是一个servlet,servlet是随着tomcat等容器而启动的,初始化过程为: ① Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。 ② 装载并创建该Servlet的一个实例对象。 ③ 调用Servlet实例对象的init()方法。 ④ 创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响

str_tang的博客 205

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring MVC执行流程及简单问题

流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、 DispatcherServlet通过HandlerAdapter处理器适配器调用处理器。 5、 执行处理器(Controller,也叫后端控制器)。 6、 Controller.

baidu_28370189的博客 254

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

简单了解一下Spring MVC的执行流程

客户端发送请求,Spring MVC把该请求提交给DispatcherServlet DispatcherServlet开始轮询HandlerMapping,通过请求的url路径找到能够处理请求的Controller DispatcherServlet把请求提交给目标Controller Controller开始处理业务逻辑,然后返回一个ModelAndView对象 DispatcherServlet轮询ViewResolver视图解析器,找到ModelAndView对象对应的视图对象 视图对象负责渲染,.

硅脂味咖啡的博客 205

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Spring mvc执行流程简单理解图

(5)处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。(2)DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。(4)HandlerAdapter会根据Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。(1)客户端(浏览器)发送请求,直接请求到DispatcherServlet。(6)ViewResolver会根据逻辑View查找实际的View。

Songkl123的博客 480

Spring MVC 的核心以及执行流程

Spring MVC 的核心以及执行流程

weixin_46619605的博客 1114

Spring MVC

MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分:Model(模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中,JavaBean对象,业务模型等都属于Model。View(视图):用于展示模型中的数据的,一般为jsp或html文件。Controller(控制器):是应用程序中处理用户交互的部分。接受视图提出的请求,将数据交给模型处理,并将处理后的结果交给视图显示。

hhj25802580的博客 1509

spring mvc流程_Spring MVC介绍之 Spring MVC体系结构与执行流程

点关注,不迷路;持续更新Java相关技术及资讯!!!pring MVC是Spring的一个模块,包含Web MVC、Framework,Web Views,JSP等等。 其中MVC分别对应:Model,View,Controller,本质上SpirngMVC还是使用Servlet进行处理,并在其基础上进行了封装,简化了开发流程,提高易用性,并使得逻辑结构变得非常清晰。Spring MVC对比Ser...

weixin_39876645的博客 79

java简单的mvc例子_一个简单的springmvc例子 入门(1)

首先说下springmvc:和Struts2 都是一个mvc的框架 属于spring 的后续产品springmvc和Struts2的对比:个人理解,从朋友和同事的了解 目前 使用springmvc 的用户多余struts2的用户,springboot 是基于springmvc上,从技术上来说 springmvc是基于servlet 而Struts2是基于fifter 所以开飞springmvc和S...

weixin_30366107的博客 351

【 Spring MVC】二、什么是 Spring MVC?

二、什么是 Spring MVC? 2.1 概述: Spring MVC 是Spring Framework 的一部分,是基于 Java 实现的 MVC 轻量级的 Web 框架。 官方生肉: https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web 翻译版本:(翻译版本是4.2.4的)(https://www.w3cschool.cn/spring_mvc_documentation_lin

你是我の唯一博客 137

Spring MVC的执行流程简述

啥都不说,直接上图: 1. 用户发起请求到前端控制器(DispatcherServlet),该控制器会过滤出哪些请求可以访问Servlet、哪些不能访问。就是url-pattern的作用,并且会加载springmvc.xml配置文件。 2. 前端控制器会找到处理器映射器(HandlerMapping),通过HandlerMapping完成url到controller映射的组件,简单来说,就是...

某某灬 7339

springmvc执行流程_来来来, 一张图教你看懂Spring MVC执行流程,还不赶紧收藏?...

前言今天主要给大家分享的是关于Spring MVC的知识内容,刚好是最近用到的知识点,所以今天就来给大家安利安利了!那么,老规矩,话不多说!上干货.....DispatcherServlet的设计DispatcherServlet的父类是FrameworkServlet,FrameworkServlet的父类则是HttpServletBean。HttpServletBean继承了Web容器所提供的...

weixin_39543773的博客 73

springMVC执行流程及简单搭建实例

首先我们先来了解一下什么是 SpringMVC ? 我们可以看到,在 Spring 的基本架构中,红色圈起来的 Spring Web MVC ,也就是本系列的主SpringMVC,它是属于Spring基本架构里面的一个组成部分,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面,所以我们在后期和 Spring 进行整合的时候,几乎不需要别的什么配置。   ...

有梦想的码农 620
上一篇: Java异常机制与 finally 与return的关系;
下一篇: Maven实战笔记
Coder-Qian
博客等级 码龄11年 63粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值