Spring Boot实战第七章-Spring Boot Web开发-Web相关配置

Spring Boot实战第七章-Spring Boot Web开发-Web相关配置

本章介绍的是基本的web相关配置,涉及了springboot自动配置,注册servlet、filter、listener等等,配置起来很简单。

1.Spring Boot提供的自动配置

(1).自动配置的ViewResolver

  ContentNegotiatingViewResolver,MVC提供的一个特殊的ViewResolver,它不会自己处理view,而是代理给不同的ViewResolver来处理不同的View,有最高的优先级。

  BeanNameViewResolver,在控制器中的一个方法返回的字符串会根据BeanNameViewResolver去查找Bean的名称为返回字符串的View来渲染视图。例如:

在配置文件中配置BeanNameViewResolver

 //自动配置
    @Bean
    public BeanNameViewResolver beanNameViewResolver(){
        BeanNameViewResolver beanNameViewResolver=new BeanNameViewResolver();
        return beanNameViewResolver;
    }

    @Bean
    public MappingJackson2JsonView jsonView() {
        MappingJackson2JsonView jsonView = new MappingJackson2JsonView();
        return jsonView;
    }

在控制层返回BeanName字符串

/**
     * 返回jsonView,他会找bean名称为jsonView的视图来渲染
     */
    @RequestMapping(value = "/json",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public String json(Model model){
       Person single=new Person("二狗子",28);
       model.addAttribute("single",single);
       return "jsonView";
    }

InternalResourceViewResolver,极为常见的ViewResolver,配置前缀,后缀以及控制器中的方法来返回视图名的字符串,有两个构造方法:

public InternalResourceViewResolver() {
        Class<?> viewClass = this.requiredViewClass();
        if (InternalResourceView.class == viewClass && jstlPresent) {
            viewClass = JstlView.class;
        }

        this.setViewClass(viewClass);
    }

    public InternalResourceViewResolver(String prefix, String suffix) {
        this();
        this.setPrefix(prefix);
        this.setSuffix(suffix);
    }

(2).自动配置的静态资源

在自动配置类WebMvcAutoConfiguration,我们可以看到,在这个方法中自动配置了静态资源的默认路径配置,

 public void addResourceHandlers(ResourceHandlerRegistry registry) {
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");
            } else {
                Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
                CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
                if (!registry.hasMappingForPattern("/webjars/**")) {
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }

                String staticPathPattern = this.mvcProperties.getStaticPathPattern();
                if (!registry.hasMappingForPattern(staticPathPattern)) {
                    this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
                }

            }
        }

将/static、/public、/resources和/META-INF/resources下的静态文件直接映射为/**,使我们可以直接http://localhost:8080/**来访问静态资源

webjar映射到/webjar/

(3).自动配置的Formatter和Converter

自动配置类中的定义:

 public void addFormatters(FormatterRegistry registry) {
        Iterator var2 = this.delegates.iterator();

        while(var2.hasNext()) {
            WebMvcConfigurer delegate = (WebMvcConfigurer)var2.next();
            delegate.addFormatters(registry);
        }

    }

只要我们定义了Converter、GenericConverter和Formatter接口的实现类的Bean,就会自动注册到Spring MVC中。

(4).自定义配置的HttpMessageConverter

/**
     * 直接注入了HttpMessageConverters的bean
     * 引入了spring mvc的各种HttpMessageConverter以及其他的HttpMessageConverter
     */
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.addAll(httpMessageConverters.getConverters());
    }

2.接管Spring Boot的web配置

增加额外配置,不想使用自动配置的时候可以定义一个配置类继承WebMvcConfigurerAdapter,使用MVC的配置方法。这里也可以用Spring Boot2版本的时候实现WebMvcConfigurer。

3.注册Servlet、FIlter、Listener

我们可以将Servlet、FIlter、Listener直接声明为Bean,或者注册ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean,简单的就直接声明为bean就好。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100301.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 玩转Redis-京东签到领京豆如何实现

    玩转Redis-京东签到领京豆如何实现-京东签到日历的产品逻辑是怎样的?-传统关系型数据库该如何实现?-表设计初级玩法(**80%的人只会这么玩**)-表设计进阶玩法(**高级程序员才会的玩法**)-查询签到情况及签到的技术实现-基于Redis的Bitmaps实现签到日历(**瞬间提升档次**)-什么是Bitmaps-Bitmaps如何使用(含详细命令对比分析及示例)-BitMap实战签到日历-业务总结/技术总结

  • MemReduct内存自动清理工具

    MemReduct内存自动清理工具MemReductMemReduct是国外一款专业的内存清理软件,现在越来越多的软件由于硬件的普遍发展,对内存的使用都开始肆无忌惮起来,这对内存比较小的老电脑来说就非常不友好了,即使新电脑也会受不了,如果你的电脑也因为常常内存不足而卡顿,就来下载这款软件试试吧。也可以安装在服务器上,定期整理内存,保持内存空间舒畅。https://www.henrypp.org/product/memred…

  • 最新idea激活码永久【最新永久激活】

    (最新idea激活码永久)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • hibernate与mybatis的区别比较_mybatis中

    hibernate与mybatis的区别比较_mybatis中为方便以后准备面试,把一些常用的技术整理出来,会不定期更新。首先简单介绍下两者的概念:Hibernate :Hibernate 是当前最流行的ORM框架,对数据库结构提供了较为完整的封装。Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力点在于POJO 与SQL之间的映射关系。下面具体从几个方面说一下两者的区别:1.两者最大的区

  • 如何理解python报错信息_csb报错

    如何理解python报错信息_csb报错#软件版本python3.7pycharm2018.3.1遇到的问题解释及处理方法#1报错#TypeError:‘key’isaninvalidkeywordargumentforprint()代码:def_cmp(x,y):ifx&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;y:return-1ifx&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;y:return

  • 计算机二级考试python考试大纲

    计算机二级考试python考试大纲全国计算机等级考试二级Python语言程序设计考试大纲(2018年版)基本要求1.掌握Python语言的基本语法规则。2.掌握不少于2个基本的Python标准库。3.掌握不少于2个Python第三方库,掌握获取并安装第三方库的方法。4.能够阅读和分析Python程序。5.熟练使用IDLE开发环境,能够将脚本程序转变为可执行程序。6.了解Python计算生态在以下方面(不限于)的主要第三方库名称:网络爬虫、数据分析、数据可视化、机器学习、Web开发等。考试内容一、Python语言基本语法元

    2022年10月19日

发表回复

您的电子邮箱地址不会被公开。

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