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就好。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • iOS在地图上WGS84、GCJ-02、BD-09互转解决方案

    iOS在地图上WGS84、GCJ-02、BD-09互转解决方案

    2022年1月10日
    41
  • ubuntu14.04下gcc版本查看以及多版本gcc管理与切换整理

    ubuntu14.04下gcc版本查看以及多版本gcc管理与切换整理一:GCC版本查看:版本查看:gcc–versiong++–version位置查看:whichgccwhichg++二:GCC多版本管理与切换:参考这篇博客:https://blog.csdn.net/menghuanbeike/article/details/79008640三:gcc4.8.5安装教程:参考这篇博客:https://ww…

    2022年6月26日
    28
  • eureka本地集群配置eureka集群

    eureka本地集群配置eureka集群eureka本地集群配置eureka集群server:port:4000spring:application:name:eurkea-servereureka:server:enable-self-preservation:false#关闭自我保护(缺省为打开)eviction-interval-timer-in-ms:5000#扫描失效服务的间隔时间(缺省为60*1000ms)client:

    2022年5月24日
    41
  • mysql 字符串索引 起始_mysql截取字符串「建议收藏」

    mysql 字符串索引 起始_mysql截取字符串「建议收藏」mysql截取字符串mysql索引从1开始一、mysql截取字符串函数1、left(str,index)从左边第index开始截取2、right(str,index)从右边第index开始截取3、substring(str,index)当index>0从左边开始截取直到结束当index<0从右边开始截取直到结束当index=0返回空4、substring(str,index,…

    2022年6月12日
    94
  • 怎么安装汉化包(svn中文语言包安装)

    检查SVN与汉化包的版本是否一致1、查看tortoiseSVN的版本2、在SVN的安装目录下,将对应版本的汉化包拷过去注意,保证Languages目录下的文件都已删掉3、双击安装汉化包,安装完成时,在出现的最后一个页面中,选中ConfigureTortoiseSVNtousethislanguage即可直接应用。SVN1.12.1对应汉化包的…

    2022年4月18日
    1.9K
  • 一文搞懂MySQL前缀索引

    一文搞懂MySQL前缀索引引入通常在开发中我们需要定义字符串类型的字段,例如用户名或者用户邮箱等。假设我们在维护一个用户登录系统,用户表的定义:createtableUser(IDbigintunsignedprimarykey,emailvarchar(64))engine=Innodb;如果使用邮箱登录的话,查询语句可能这样写:selectIDfromUserwhereemail=’xxx’;如果email字段没有加索引,那么这个语句只能做全表扫描。前缀索引MySQL是支持

    2022年5月15日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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