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 类中定义的。
除了以上还引入了 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
当访问应用根目录时,会直接映射