Spring Boot Web的相关配置

Spring Boot 提供了一下两个类来配置 WEB配置

org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration
org.springframework.boot.autoconfigure.web.WebMvcProperties

具体查看源码。

1、自动配置 ViewResolver

1)ContentNegotiatingViewResolver:是Spring MVC 提供的一个特殊的 ViewResolver,它不是自己处理 View,而是代理不同的 ViewResolver 来处理不同的 View,具有最高优先级。

2)BeanNameViewResolver:在控制器(@Controller)中的一个方法的返回值的字符串(试图名)会根据 BeanNameViewResolver 去查找 Bean 的名称为返回字符串的 View 来渲染视图。示例:

 

package com.example.controller;

import com.example.model.Person;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.view.BeanNameViewResolver;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2017/12/21.
 */
@Configuration
@Controller
@SpringBootApplication
public class PersonApplication {

    @Bean
    public BeanNameViewResolver beanNameViewResolver() {
        BeanNameViewResolver resolver = new BeanNameViewResolver();
        return resolver;
    }

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

    @RequestMapping(value = "/json", produces = {MediaType.APPLICATION_JSON_VALUE})
    public String json(Model model) {
        Person person = new Person("aa", 11);
        model.addAttribute("person", person);
        return "jsonView";
    }

    @RequestMapping("/")
    public String index(Model model) {
        Person person = new Person("aa", 11);
        List people = new ArrayList<>();
        people.add(new Person("xx", 11));
        people.add(new Person("yy", 22));
        people.add(new Person("zz", 33));

        model.addAttribute("person", person);
        model.addAttribute("people", people);
        return "index";
    }

    public static void main(String[] args) {
        SpringApplication.run(PersonApplication.class, args);
    }
}

模板代码:

 




    
    Title


 

3)org.springframework.web.servlet.view.InternalResourceViewResolver

注:这是一个很常用的 ViewResolver,主要通过设置前缀、后缀,以及控制器中方法来返回视图名的字符串,以得到实际页面。具体可看源码。

2、自动配置的静态资源

在自动配置类的 addResourceHandles 方法中定义了静态资源的自动配置。

1)类路径文件:把类路径下的 /static、/public、/resources 和 /META-INF/resources 文件夹下的静态文件直接映射为 /**,可以通过 http://localhost:8080/** 来访问

2)webjar:关于webjar的介绍可以访问 http://www.webjars.org 网站

把 webjar 的 /META-INFO/resources/webjars/ 下的静态文件映射为 /webjars/** 可以通过 http://localhost:8080/webjars/** 来访问。

3、自动配置 Formatter 和 Converter(可查看 WebMvcAutoConfiguration 类下的 addFormatters 方法)

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

4、自动配置 HttpMessageConverters

从代码中可以看出直接注入了 HttpMessageConverters 的 Bean,这个 Bean 是在 HttpMessageConvertersAutoConfiguration 类中定义的。

Spring Boot Web的相关配置_第1张图片

除了以上还引入了 Jackson,Gson。

在 Spring Boot中,需要新增自定义的 HttpMessageConverter时,定义一个自己的 HttpMessageConverters 的Bean,然后在此 Bean 中注册自定义的 HttpMessageConverter。

5、静态首页的支持

把静态 index.html 文件放置在以下目录:

classpath:/META-INF/resources/index.html

classpath:/resources/index.html

classpath:/static/index.html

classpath:/public/index.html

当访问应用根目录时,会直接映射

你可能感兴趣的:(springboot)