Spring MVC 分析
文章平均质量分 59
本专栏记录本人对Spring MVC的理解和分析,如果有网友感兴趣,可以读一读,兴许对你加深了解Spring MVC有些帮助。
安迪源文
小步快走
展开
-
基于Tomcat 的Spring MVC 应用中响应数据压缩原理分析
在一个基于Tomcat的Spring MVC应用中,当我们配置了参数server.compression.enabled=true时,我们会发现,服务端返回给浏览器的js格式的文件被压缩了。这背后的原理是什么呢?我们做个简单的分析。本文所分析的例子项目如下 :Spring Boot 2.1.9.RELEASESpring MVCServlet容器使用缺省的Tomcat文章目录1. W...原创 2019-10-22 17:54:19 · 1400 阅读 · 1 评论 -
Spring MVC 响应结果输出情景分析和总结
访问静态资源访问的是一个静态资源文件(比如静态html,js,pdf,image,xls等文件)资源特点 : 请求发起时,目标资源发已经以文件形式存在,并且获取过程中不会动态修改文件内容,只需要读取其内容返回给客户端。结果输出情况 : 通过 ResourceHttpRequestHandler/ResourceHttpMessageConverter 输出结果访问动态资源资...原创 2019-08-09 17:12:41 · 540 阅读 · 0 评论 -
DispatcherServlet 请求处理主逻辑 : 4. 处理 Handler 执行结果
本系列上一篇 : DispatcherServlet 请求处理主逻辑 : 3. 通过 HandlerAdapter 执行 Handler经过DispatcherServlet请求处理主逻辑#doDispatch以上各个步骤的执行(Handler选择和执行),现在请求已经被处理。处理分为两种情况 :处理过程没有遇到错误/异常,处理结果为一个ModelAndView mv;处理过程遇到错误...原创 2019-08-09 15:02:25 · 463 阅读 · 0 评论 -
DispatcherServlet 请求处理主逻辑 : 3. 通过 HandlerAdapter 执行 Handler
该系列上一篇 : DispatcherServlet 请求处理主逻辑 : 2. 选择 Handler 对应的 HandlerAdapter本文代码版本 : spring-webmvc-5.1.5.RELEASEDispatcherServlet请求处理主逻辑(#doDispatch)找到针对当前请求的Handler以及HandlerAdapter之后,就是使用HandlerAdapt...原创 2019-08-08 16:52:00 · 716 阅读 · 0 评论 -
DispatcherServlet 请求处理主逻辑 : 2. 选择 Handler 对应的 HandlerAdapter
该系列上一篇 : DispatcherServlet 请求处理主逻辑 : 1. 选择 Handler 对象DispatcherServlet请求处理主逻辑在找到能处理当前请求的handler之后,接下来就需要执行该handler了以处理请求了。那么,DispatcherServlet是直接执行该handler吗?非也。这里Spring MVC引入了HandlerAdapter的概念。在Sp...原创 2019-08-08 09:17:21 · 1271 阅读 · 0 评论 -
DispatcherServlet 请求处理主逻辑 : 1. 选择 Handler
一个handler对象可以理解为处理用户请求的方法。此方法可能最终对应一个开发人员定义的Controller方法,也可能是Spring MVC框架根据开发人员配置自动提供的某个方法。handler对象处理请求结果一般会是一个ModelAndView对象。该对象会被接下来的步骤进行其他处理,比如根据视图名称渲染视图,进行页面调转等等。handler对象处理请求过程中也可能发生异常,这些异常信息也会被...原创 2019-08-07 17:35:54 · 671 阅读 · 0 评论 -
Spring MVC : DispatcherServlet请求处理的主逻辑(文字版)
Spring MVC前置控制器DispatcherServlet对请求进行处理的主要逻辑体现在其方法doDispatch,该方法的主要逻辑如下 :找到可以处理该请求的 Handler找到的 Handler 以 HandlerExecutionChain 形式封装任务执行主要代码行 : #getHandler(processedRequest)如果没有能处理该请求的 Handler,则...原创 2019-07-08 20:28:23 · 779 阅读 · 0 评论 -
Spring Boot : Servlet Web 相关的自动配置
ServletWebServerFactoryAutoConfigurationDispatcherServletAutoConfigurationHttpEncodingAutoConfigurationMultipartAutoConfigurationWebMvcAutoConfigurationErrorMvcAutoConfigurationHttpMessageConve...原创 2019-07-07 18:33:55 · 284 阅读 · 0 评论 -
Springboot Web应用请求处理流程概述 1 -- Tomat 准备ApplicationFilterChain
本流程分析基于 :springboot 2.1.1Tomcat 9.0.13缺省配置请求处理 : socket => coyote.RequestAbstractProtocal$ConnectionHandler#process(SocketWrapperBase<S> wrapper, SocketEvent status)创建一个Processor Ht...原创 2018-12-16 18:09:58 · 3573 阅读 · 1 评论 -
Spring MVC : 配置器概念模型 WebMvcConfigurer
概述对于基于Java的配置方式,使用注解@EnableWebMvc会引入缺省Spring MVC配置。而WebMvcConfigurer则是针对Spring MVC配置的配置器的概念模型接口。被@EnableWebMvc注解的配置类可以实现该接口的方法用于定制Spring MVC配置。如下所示 :@EnableWebMvc@Configurationpublic class WebMvcC...原创 2019-06-08 19:52:56 · 905 阅读 · 0 评论 -
Spring Boot Servlet : RegistrationBean
概述功能介绍Spring Boot提供的针对Servlet 3.0+容器的注册bean基类。该类的目的是用于向Servlet容器(Tomcat,Jetty等)注册工作组件,比如Servlet,Filter或者EventListener。这是一个抽象基类,实现了接口ServletContextInitializer。ServletContextInitializer约定了当前Registrat...原创 2019-05-22 08:45:22 · 5297 阅读 · 1 评论 -
Spring MVC HandlerAdapter : RequestMappingHandlerAdapter
RequestMappingHandlerAdapter是Spring MVC用来执行控制器方法的HandlerAdapter。RequestMappingHandlerAdapter继承自抽象基类AbstractHandlerMethodAdapter,AbstractHandlerMethodAdapter主要是定义了一些抽象方法和禁止了一些方法的继承。AbstractHandlerMeth...原创 2019-05-06 18:30:54 · 715 阅读 · 0 评论 -
Spring boot 自动配置 : MultipartAutoConfiguration
概述EnableAutoConfiguration是Spring Boot的一个自动配置类,配置Spring MVC应用中如何使用MVC控制器进行错误处理。Spring MVC应用遇到错误时浏览器上看到的Whitelabel Error Page错误白页,就是在这里定义的。因为是针对Spring MVC应用的配置机制,所以EnableAutoConfiguration必须在以下条件下才生效 :...原创 2019-04-03 19:48:10 · 4536 阅读 · 0 评论 -
Spring Web HTTP缓存支持系列3: 对 Cache-Control头部的支持
为了支持HTTP缓存机制Cache-Control头部,Spring MVC提供了如下支持 :使用CacheControl概念建模Cache-Control针对控制器方法的Cache-Control响应头部设置针对静态资源的Cache-Control响应头部设置CacheControl类CacheControl其实是一个链式构建器(builder),它接收使用者的各种参数,用于最终生...原创 2019-04-24 22:19:34 · 2696 阅读 · 0 评论 -
Spring Web HTTP缓存支持系列4: WebRequest#checkNotModified支持验证器机制
为了支持HTTP缓存机制强/弱验证器机制,Spring MVC提供了WebRequest#checkNotModified方法供控制器方法使用。典型用法举例如下 : @RequestMapping(value = "/document", method = RequestMethod.GET) public String getDocument(ServletWebRequest...原创 2019-04-25 21:37:57 · 1119 阅读 · 0 评论 -
Spring Web HTTP缓存支持系列2: 支持概述
通过上篇文章的分析,我们不难看出,HTTP缓存机制集中体现在以下几个方面 :Cache-Control 头部验证器头部强验证器头部 ETag/If-None-Match弱验证器头部 Last-Modified/If-Modified-Since实际上,Spring MVC对以上这几个方面都有支持,在接下来的系列文章中,我们将逐一讲解Spring MVC对以上HTTP缓存机制几...原创 2019-04-22 08:20:34 · 428 阅读 · 0 评论 -
Spring Web HTTP缓存支持系列1: HTTP缓存机制简介
在介绍Spring MVC对HTTP缓存机制的支持之前,我们有必要了解一下HTTP都有哪些缓存机制,然后再看Spring MVC对它们提供了什么样的支持,这样你才能更好地理解和掌握这方面的知识点。1.HTTP缓存类型简单来讲,HTTP缓存机制可以分为如下几类 :私有浏览器缓存 (Private Cache)仅供浏览器用户私有的缓存机制,一般指的就是浏览器缓存机制。这种缓存主要目的是避免...原创 2019-04-17 20:44:05 · 701 阅读 · 0 评论 -
Spring 概念模型 : CacheControl
Spring对HTTP缓存机制提供了支持,使用类CacheControl概念建模HTTP缓存机制中的Cache-Control响应头部。类CacheControl其实是一个链式构建器(builder),它接收使用者的各种参数,用于最终生成一个Cache-Control响应头部的值字符串。其用法如下例子所示 :CacheControl cc = CacheControl.maxAge(1, T...原创 2019-04-24 20:52:38 · 1011 阅读 · 0 评论 -
Spring MVC : 缺省使用的 HttpMessageConverter
HttpMessageConverter启用条件介绍StringHttpMessageConverter总是启用ByteArrayHttpMessageConverter总是启用ResourceHttpMessageConverter总是启用ResourceRegionHttpMessageConverter总是启用SourceHttp...原创 2019-04-14 17:01:56 · 916 阅读 · 0 评论 -
Spring MVC : 400 错误是怎么发生的 ?
1. 异常的产生和抛出Spring MVC前置处理器DispatcherServlet处理一个请求时,会尝试捕获handler匹配过程,handler adapter匹配过程和handler执行过程中的异常,该异常记做dispatchException,如下代码所示 : protected void doDispatch(HttpServletRequest request, HttpServ...原创 2019-04-14 16:08:42 · 2593 阅读 · 0 评论 -
Spring MVC : 概念模型 HandlerAdapter
HandlerAdapter是Spring MVC框架的SPI(服务提供者接口),用来参数化核心MVC工作流。对于处理一个请求的每种handler类型,都要有一个对应的HandlerAdapter实现(一个HandlerAdapter可以支持多种handler)。该接口的一个目的是让前置DispatcherServlet可以被无限扩展。因为DispatcherServlet对handler的访问...原创 2019-04-14 13:18:22 · 507 阅读 · 0 评论 -
Spring MVC : 工具 DefaultHandlerExceptionResolver
DefaultHandlerExceptionResolver是Spring MVC对接口org.springframework.web.servlet.HandlerExceptionResolver的缺省实现,用来解析标准Spring MVC异常,将其翻译成相应的HTTP状态码 :Spring MVC 标准异常HTTP状态码介绍HttpRequestMethodNotS...原创 2019-04-14 12:06:37 · 8006 阅读 · 0 评论 -
Spring MVC : 概念模型 ServletInvocableHandlerMethod
Spring MVC中,HandlerMethod类在应用启动过程中搜集Web控制器方法阶段用于记录每个控制器方法,而InvocableHandlerMethod是HandlerMethod的扩展,它基于一组HandlerMethodArgumentResolver从请求上下文中解析出控制器方法参数值。ServletInvocableHandlerMethod是对InvocableHandlerM...原创 2019-04-13 22:29:03 · 865 阅读 · 0 评论 -
Spring MVC : 概念模型 InvocableHandlerMethod
InvocableHandlerMethod是对HandlerMethod的扩展,基于一组HandlerMethodArgumentResolver从请求上下文中解析出控制器方法的参数值,然后调用控制器方法。除此之外,InvocableHandlerMethod和HandlerMethod的不同在于:HandlerMethod被容器在启动过程中搜集控制器方法阶段用于记录每个控制器方法,而I...原创 2019-04-13 13:10:31 · 3932 阅读 · 0 评论 -
Spring MVC : 概念模型 HandlerMethodArgumentResolver
HandlerMethodArgumentResolver是Spring MVC从指定请求上下文中,将方法参数MethodParameter解析为参数值的策略接口。HandlerMethodArgumentResolver接口约定了两个方法 :boolean supportsParameter(MethodParameter parameter)是否支持parameter指定的方法参数。...原创 2019-04-13 11:35:54 · 373 阅读 · 0 评论 -
Spring MVC : 概念模型 HandlerMethod
Spring MVC应用启动时会搜集并分析每个Web控制器方法,从中提取对应的"<请求匹配条件,控制器方法>“映射关系,形成一个映射关系表保存在一个RequestMappingHandlerMapping bean中。然后在客户请求到达时,再使用RequestMappingHandlerMapping中的该映射关系表找到相应的控制器方法去处理该请求。在RequestMappingHan...原创 2019-04-11 10:21:00 · 4327 阅读 · 1 评论 -
Spring MVC : ViewControllerRegistry/ViewControllerRegistration/RedirectViewControllerRegistration
ViewControllerRegistry/ViewControllerRegistration/RedirectViewControllerRegistration是Spring MVC关于视图注册的概念模型类,它们配合使用。ViewControllerRegistry表示一组URL pattern和视图控制器(view controller)映射关系的注册信息,这一组注册信息中的每一条信息...原创 2019-04-09 21:10:36 · 1845 阅读 · 0 评论 -
Spring MVC : 概念模型 ResourceHandlerRegistry/ResourceHandlerRegistration
ResourceHandlerRegistry/ResourceHandlerRegistration是Spring MVC的概念模型类,二者配合使用。ResourceHandlerRegistry用于保存服务静态资源图片,css文件或者其他文件的资源处理器(resource handler)的注册信息,而ResourceHandlerRegistration就表示这样的"注册信息",它还包含了对...原创 2019-04-09 09:17:17 · 20876 阅读 · 4 评论 -
Spring boot Web MVC : 缺省错误视图解析器 DefaultErrorViewResolver
DefaultErrorViewResolver是Springboot缺省实现的一个错误视图解析器ErrorViewResolver。它基于一些常见的约定,尝试根据HTTP错误状态吗解析出错误处理视图。它会在目录/error下针对提供的HTTP错误状态码搜索模板或者静态资源,比如,给定了HTTP状态码404,它会尝试搜索如下模板或者静态资源:/<templates>/error/4...原创 2019-04-08 09:23:12 · 2029 阅读 · 1 评论 -
Springboot Spring MVC应用静态资源访问配置详解
在基于Springboot的Spring MVC 应用中,静态资源访问配置有以下几种方案 :使用缺省位置存取静态资源:classpath静态资源路径配置特定路径的资源存取位置:classpath静态资源路径或者文件系统静态资源文件路径本文基于Springboot + Tomcat + Spring MVC应用来看看以上几种方案如何实施 :1. 使用缺省位置存取静态资源缺省情况下,Sp...原创 2019-04-07 11:57:08 · 1563 阅读 · 0 评论 -
Spring MVC : 缺省 Servlet HTTP 请求处理器 DefaultServletHttpRequestHandler
DefaultServletHttpRequestHandler是Spring MVC提供的使用Servlet容器缺省Servlet处理静态文件的HttpRequestHandler实现。因为Spring MVC可以支持多种Servlet容器,比如Tomat,Jetty,JBoss,GlassFish,Resin,GAE,WebLogic,WebSphere等。而在这些容器中,缺省Servlet...原创 2019-04-06 21:10:18 · 2306 阅读 · 0 评论 -
Spring MVC 应用中异常处理流程分析 : sendError() vs setStatus()
sendError()Spring MVC应用处理某个请求时遇到异常的话,除非明确地指定setStatus(),否则都是面向sendError()的处理流程,总的来说概括如下 :1.请求 requestB 处理逻辑或者Spring MVC框架中发生异常 e;这里的处理逻辑指的是开发人员提供的请求处理控制器方法;Spring MVC框架指的是Spring MVC框架的通用过滤器,拦截器等;...原创 2019-04-06 20:57:15 · 1538 阅读 · 1 评论 -
Spring boot Web MVC : 缺省全局错误控制器 BasicErrorController
BasicErrorController是Spring boot提供的缺省全局错误控制器Controller。该控制器提供了两个控制器方法,这两个方法逻辑类似,都是处理请求上的错误属性,使用缺省的错误解析机制处理错误属性返回结果给客户端,但分别对应返回HTML格式和JSON格式。这里缺省的错误处理机制是指 :如果使用DefaultErrorViewResolver可以找到匹配特定HTTP错误...原创 2019-04-04 22:08:15 · 3857 阅读 · 1 评论 -
Spring boot 自动配置 : Servlet Web 应用有关 -- WebMvcAutoConfiguration
概述WebMvcAutoConfiguration 是Spring boot针对Web MVC的自动配置机制,其效果等同于开发人员自己使用@EnableWebMvc进行的Web MVC配置。WebMvcAutoConfiguration的启用是有条件的,它在如下条件都满足时才会起作用 :必须是Servlet Web应用环境;在classpath上必须有Servlet,Dispatcher...原创 2019-03-31 22:10:19 · 3465 阅读 · 0 评论 -
Spring Web 概念模型 : Web请求 -- WebRequest
对于来自Web的HTTP用户请求,Spring Web对其进行了抽象,其中典型的一个概念模型接口,就是WebRequest。但并不是所有有关HTTP Web请求的信息都是在接口WebRequest中定义的,而是在跟WebRequest有关的一组接口或者类中。本文我们对这些接口或者类做一个简单的介绍。下面是这组接口/类之间的层级关系图,以及它们各自的方法和属性。从该图可以看出 :Reque...原创 2019-03-30 21:36:12 · 2135 阅读 · 0 评论 -
Spring MVC 概念模型 : 注解 @RequestMapping 信息载体 RequestMappingInfo
概述之前我用一篇文章介绍了Spring MVC的概念模型接口RequestCondition及其一些基本的针对请求匹配某一方面的实现类。现在我们看看封装了一个请求匹配所有方面的实现类RequestMappingInfo。源代码分析RequestMappingInfo实现类的代码主体如下 :package org.springframework.web.servlet.mvc.method;...原创 2019-03-30 16:27:43 · 1141 阅读 · 0 评论 -
Spring MVC 概念模型 : 接口 RequestCondition
概述接口RequestCondition是Spring MVC对一个请求匹配条件的概念建模。最终的实现类可能是针对以下情况之一:路径匹配,头部匹配,请求参数匹配,可产生MIME匹配,可消费MIME匹配,请求方法匹配,或者是以上各种情况的匹配条件的一个组合。源代码分析RequestCondition接口定义package org.springframework.web.servlet.mvc...原创 2019-03-30 15:53:52 · 5760 阅读 · 0 评论 -
Spring MVC HandlerMapping : RequestMappingHandlerMapping 源代码解析
源代码版本 : spring-webmvc-5.1.4.RELEASE概述RequestMappingHandlerMapping是HandlerMapping的一个实现,主要用于针对控制器类(带有注解@Controller)中类级别或者方法级别的注解@RequestMapping创建RequestMappingInfo并管理。RequestMappingHandlerMapping的实...原创 2019-03-30 22:16:36 · 2122 阅读 · 1 评论 -
Spring MVC HandlerMapping : SimpleUrlHandlerMapping 源代码解析
概述SimpleUrlHandlerMapping是HandlerMapping接口的一个实现,用于映射URL到请求处理器bean实例或者bean名称。如果是映射到bean名称的,相应的bean实例不能是单例的。SimpleUrlHandlerMapping有一个属性Map<String, Object> urlMap用于接收外部指定的映射关系,比如通过XML定义方式中的map元素...原创 2019-03-26 20:51:05 · 430 阅读 · 0 评论 -
Spring MVC HandlerMapping : BeanNameUrlHandlerMapping 源代码解析
概述BeanNameUrlHandlerMapping实现了接口HandlerMapping用于映射URL到请求处理器handler,它独特的地方在于它扫描容器中所有名称以斜杠/开头的bean,然后将这些bean名称作为URL/URL pattern和该bean形成的映射对管理起来。也就是说,它所管理的映射对是这样的 :映射对内容为 : <bean name, bean> 或者...原创 2019-03-25 20:44:22 · 378 阅读 · 0 评论