当前位置: 首页 > news >正文

SpringMVC 自动配置

SpringMVC 自动配置

  • 一、WebMvcAutoConfiguration(SpringMVC自动配置)
  • 二、DisPatcherServletAutoConfiguration.class(中央调度器自动配置)
  • 三、WebMvcConfigurationSupport(SpringMVC组件配置类)
  • 四、ServletWebServerFactoryAutoConfiguration(Web服务器配置类)
  • 五、SpringMVC 配置文件


  • SpringMVC 有关的自动配置,SpringMVC 自动配置会创建很多对象,重点的有:
    • ContentNegotiatingViewResolver 和 BeanNameViewResolver bean
    • 支持提供静态资源,包括对 WebJars 的支持
    • 自动注册 Converter、GenericConveter 和 Formatter bean
    • 对 HttpMessageConverters 的支持
    • 自动注册 MessageCodesResolver
    • 静态 index.html 支持
    • 自动使用 ConfigurableWebBindingInitializer bean

一、WebMvcAutoConfiguration(SpringMVC自动配置)

  • WebMvcAutoConfiguration 是 SpringMVC 自动配置类。
    @AutoConfiguration(after = { DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class })
    @ConditionalOnWebApplication(type = Type.SERVLET)
    @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
    @ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
    @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
    @ImportRuntimeHints(WebResourcesRuntimeHints.class)
    public class WebMvcAutoConfiguration {//...
    }
    
    • DispatcherServletAutoConfiguration.class 自动配置 DispatcherServlet。
    • WebMvcConfigurationSupport.calss 配置 SpringMVC 组件。
    • ValidationAutoConfiguration.class 配置 JSR-303 验证器。
    • @ConditionalOnWebApplication(type = Type.SERVLET):应用是基于 Servlet 的 web 应用时有效。
    • @ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class }):当项目有 Servlet.class,DispatcherServlet.class 时起作用。

二、DisPatcherServletAutoConfiguration.class(中央调度器自动配置)

  • web.xml 在 SpringMVC 以 xml 文件配置 DispatcherServlet,现在有自动配置完成。
    <servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring/dispatcher.xml</param-value></init-param><load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern>
    </servlet-mapping>
    
  • DispatcherServletAutoConfiguration 自动配置 DispatcherServlet 。作用:
    • ① 创建 DispatcherServlet。
      • @Bean 创建 DispatcherServlet 对象,容器中的名称为 dispatcherServlet。作为 Servlet 的 url-pattern 为 “/”。在这里插入图片描述
    • ② 将 DispatcherServlet 注册成 bean,放到 Spring 容器,设置 load-on-startup=1。
    • ③ 创建 MultipartResolver,用于上传文件。
    • ④ 它的配置类 WebMvcProperties.calss前缀是 spring.mvc

三、WebMvcConfigurationSupport(SpringMVC组件配置类)

  • Spring MVC 组件的配置类,JavaConfig 方式创建 HandlerMappings 接口的多个对象,HandlerAdapters 接口多个对象, HandlerExceptionResolver 相关多个对象 ,PathMatchConfigurer, ContentNegotiationManager,OptionalValidatorFactoryBean, HttpMessageConverters 等这些实例。
    • HandlerMappings:RequestMappingHandlerMapping
    • HandlerAdapter:RequestMappingHandlerAdapter
    • HandlerExceptionResolver:DefaultHandlerExceptionResolver、ExceptionHandlerExceptionResolver(处理 @ExceptionHandler 注解)

四、ServletWebServerFactoryAutoConfiguration(Web服务器配置类)

  • ServletWebServerFactoryAutoConfiguration 配置嵌入式 Web 服务器。

    • EmbeddedTomcat
    • EmbeddedJetty
    • EmbeddedUndertow
  • SpringBoot 检测 classpath 上存在的类,从而判断当前使用的是 Tomcat/Jetty/Undertow 中的哪一个 Servlet Web 服务器,从而决定定义相应的工厂组件。也就是 Web 服务器。

  • 配置类:ServerProperties.class,配置 web server 服务器。

    server.port=3133  #服务器端口(默认8080)
    server.servlet.context-path=/api #(上下文访问路径)
    server.servlet.encoding.charset=utf-8 #request、response 字符编码
    server.servlet.encoding.force=true #强制 request、response 设置 charset 字符编码server.tomcat.accesslog.directory=D:/logs #日志路径
    server.tomcat.accesslog.enabled=true #启用访问日志
    server.tomcat.accesslog.prefix=access_log #日志文件名前缀
    server.tomcat.accesslog.file-date-format=.yyyy-MM-dd #日志文件日期时间
    server.tomcat.accesslog.suffix=.log #日志文件名称后缀
    server.tomcat.max-http-form-post-size=2000000 #post 请求内容最大值,默认 2M
    server.tomcat.max-connections=8192 #服务器最大连接数
    

五、SpringMVC 配置文件

# 配置中央调度器的访问路径(默认 / 所有路径)
spring.mvc.servlet.path=/course
#Servlet 的加载顺序,越小创建时间越早
spring.mvc.servlet.load-on-startup=0
#时间格式,可以在接受请求参数使用
spring.mvc.format.date-time=yyyy-MM-dd HH:mm:ss
//测试日期参数
@GetMapping("/param/date")
@ResponseBody public String paramDate(LocalDateTime date){return "日期:" + date;
}
//http://localhost:8001/api/course/param/date?date=2024-02-02 12:10:10
//@DateTimeFormat 格式化日期,可以方法,参数,字段上使用。
//示例:控制器方法接受日期参数@GetMapping("/test/date")
@ResponseBody public String paramDate(@DateTimeFormat(pattern = "yyyy-MM-ddHH:mm:ss") LocalDateTime date){return "日期:" + date;
}//无需设置:spring.mvc.format.date-time=yyyy-MM-dd HH:mm:ss
//测试:http://localhost:8001/api/test/date?date=2002-10-02 11:22:19

相关文章:

  • 【学网攻】 第(13)节 -- 动态路由(OSPF)
  • Windows Server 2003 Web服务器搭建
  • Mac 上 Ln 指令使用说明
  • WebSocket实现HTML+SpringBoot聊天功能,小程序+SpringBoot聊天功能
  • 谷歌人工智能视频生成器-LUMIERE(未开源)
  • 笔记 | Clickhouse 命令行连接及查询
  • 代码随想录算法训练营Day38|动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • elasticsearch优化总结
  • Linux下Mysql的小版本升级
  • 【C/C++ 01】初级排序算法
  • RabbitMQ之三种队列之间的区别及如何选型
  • 自然语言处理(NLP)技术使用
  • C#-正则表达式
  • Python PDF转换为图片的解决方案
  • 【leetcode100-077到080】【贪心】四题合集
  • 收藏网友的 源程序下载网
  • 【Amaple教程】5. 插件
  • avalon2.2的VM生成过程
  • CSS魔法堂:Absolute Positioning就这个样
  • es6(二):字符串的扩展
  • JavaScript 奇技淫巧
  • Java深入 - 深入理解Java集合
  • jQuery(一)
  • js写一个简单的选项卡
  • Mocha测试初探
  • Vue ES6 Jade Scss Webpack Gulp
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 阿里研究院入选中国企业智库系统影响力榜
  • 前端知识点整理(待续)
  • 人脸识别最新开发经验demo
  • 设计模式(12)迭代器模式(讲解+应用)
  • 微信小程序--------语音识别(前端自己也能玩)
  • 在weex里面使用chart图表
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • Mac 上flink的安装与启动
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (1)(1.9) MSP (version 4.2)
  • (2)(2.10) LTM telemetry
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (JS基础)String 类型
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (多级缓存)缓存同步
  • (分类)KNN算法- 参数调优
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (顺序)容器的好伴侣 --- 容器适配器
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .net core 6 redis操作类
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net6 webapi log4net完整配置使用流程
  • .NET多线程执行函数