SpringBoot五:web工程,和springmvc相关

web工程

一、SpringMVC自动化配置
  1. 视图解析器

    内容协商视图解析器和BeanName视图解析器

  2. 静态资源

    相当于SpringMVC中的开启默认Servlet

    <mvc:default-servlet-handler/>
    
  3. 自动注册

    格式化器Formatter,转换器Converter

  4. 自动配置HeepMessageConverters
  5. 静态页index.html发现支持

    将index.html放在指定位置,可以自动发现

  6. 自定义Favicon(网站图标)
  7. 自动使用ConfigurableWebBindingInitializer

    DataBinder负责将请求数据绑定到JavaBean上

二、静态资源访问
  1. 静态资源目录

    在类路径下:/static /public /resources /META-INF/resources 等

    访问:当前项目的根路径/ + 静态资源名

    原理:在处理请求时,服务器先去controller中查找是否有对应的类,

    ​ 如果没有,就会去静态资源中查找,如果静态资源中也没有,才会报404

    在这里插入图片描述

  2. 改变静态资源访问前缀

    默认的静态资源访问是无前缀的

    在application.yaml中配置访问前缀

    # 设置后,项目再去访问静态资源就变成:当前项目的根路径/src/ + 静态资源名
    spring:
      mvc:
        static-path-pattern: /src/**
    

    作用:可以在设置拦截器时,方便对于静态页面进行管理

  3. 改变默认的静态资源扫描路径
    # springboot2.7之后
    spring:
        webflux:
            static-path-pattern: ["classpath:/haha/"]
    # springboot2.3版本使用下面格式  
    # sping:
    #   resources:
    #     static-locations: [classpath:/haha/]
    
  4. 支持webjars

    官网:WebJars - Web Libraries in Jars

    把js/css等静态文件做成了jar包的形式,可以通过依赖的方式引入

  5. 欢迎页支持

    可以在默认或设置了的静态资源目录下创建index.html,此时在浏览器输入项目的根路径后,就会直接跳转到该欢迎页面。

    # 不能设置静态页面前缀
    spring:
    #  mvc:
    #    static-path-pattern: /src/**
      webflux:
        static-path-pattern: ["classpath:/haha/"]
    

    常规的欢迎页面是通过一个有@GetMapping(“/index”)标注的controller类去响应

三、Favicon
  1. 网站上的favicon获取

    在这里插入图片描述

  2. 将favicon.ico文件放在静态路径下

    在这里插入图片描述

    在这里插入图片描述

四、自动化配置的源码解析
  1. 在IDEA中查看springboot提供的自动配置类

    自动配置类有很多,主要看关于springmvc的

    在这里插入图片描述

  2. 有关spingmvc的自动配置

    在这里插入图片描述

  3. 查看自动配置是否生效
    @AutoConfiguration( after = {DispatcherServletAutoConfiguration.class, 
                 				 TaskExecutionAutoConfiguration.class, 
                				 ValidationAutoConfiguration.class})
    // 这个条件满足,本身就是servlet类型的
    @ConditionalOnWebApplication( type = Type.SERVLET )
    // 这三个类也都加载了,满足条件
    @ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
    // 这个条件现在满足。如果要全面接管springmvc的配置,才会加载这个类,进行私人定制。
    @ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
    @AutoConfigureOrder(-2147483638)
    public class WebMvcAutoConfiguration {
        
    }
    
  4. 给容器中配了什么

    就是在WebMvcAutoConfiguration类中查找有@Bean或@Configuration的方法或类,重点看一下配置类WebMvcAutoConfigurationAdapter

    @Configuration(proxyBeanMethods = false)
    @Import({WebMvcAutoConfiguration.EnableWebMvcConfiguration.class})
    @EnableConfigurationProperties({WebMvcProperties.class, WebProperties.class})
    @Order(0)
    public static class WebMvcAutoConfigurationAdapter implements WebMvcConfigurer, ServletContextAware {
        private static final Log logger = LogFactory.getLog(WebMvcConfigurer.class);
        private final Resources resourceProperties;
        private final WebMvcProperties mvcProperties;
        private final ListableBeanFactory beanFactory;
        private final ObjectProvider<HttpMessageConverters> messageConvertersProvider;
        private final ObjectProvider<DispatcherServletPath> dispatcherServletPath;
        private final ObjectProvider<ServletRegistrationBean<?>> servletRegistrations;
        private final WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer resourceHandlerRegistrationCustomizer;
        private ServletContext servletContext;
    

    主要看**@EnableConfigurationProperties**注解中的内容,表示配置文件和xxx的属性进行了绑定(容器功能的一种,参考SpringBoot二:容器功能(和Spring相关)_e_nanxu的博客-CSDN博客

    // 表示和yaml配置文件中的spring.mvc下的属性进行了绑定
    @ConfigurationProperties( prefix = "spring.mvc" )
    public class WebMvcProperties {  }
    
    // 表示和yaml配置文件中的spring.web下的属性进行了绑定
    @ConfigurationProperties("spring.web")
    public class WebProperties {  }
    
  5. **注意:**一个配置类只有一个有参构造器,那么构造器内的所有参数的值都会从容器中确定
    /*	
    	webProperties:获取和spring.rousources绑定的所有的值的对象
    	mvcProperties:获取和spring.mvc绑定的所有的值的对象
        beanFactory: Spring的beanFactory
        messageConvertersProvider:找到所有的HttpMessageConverters
        resourceHandlerRegistrationCustomizerProvider:找到资源处理器的自定义器
        dispatcherServletPath:
        servletRegistrations:给应用注册servlet、filter等
    */
    
    public WebMvcAutoConfigurationAdapter(
        WebProperties webProperties, WebMvcProperties mvcProperties, 
        ListableBeanFactory beanFactory, 
        ObjectProvider<HttpMessageConverters> messageConvertersProvider, 
        ObjectProvider<WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer> 
        resourceHandlerRegistrationCustomizerProvider, 
        ObjectProvider<DispatcherServletPath> dispatcherServletPath, 
        ObjectProvider<ServletRegistrationBean<?>> servletRegistrations
    ) {
        this.resourceProperties = webProperties.getResources();
        this.mvcProperties = mvcProperties;
        this.beanFactory = beanFactory;
        this.messageConvertersProvider = messageConvertersProvider;
        this.resourceHandlerRegistrationCustomizer = (WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer)resourceHandlerRegistrationCustomizerProvider.getIfAvailable();
        this.dispatcherServletPath = dispatcherServletPath;
        this.servletRegistrations = servletRegistrations;
        this.mvcProperties.checkConfiguration();
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

e_nanxu

感恩每一份鼓励-相逢何必曾相识

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值