Spring Boot非常适合Web应用程序开发。您可以使用嵌入式Tomcat,Jetty,Undertow或Netty创建自包含的HTTP服务器。大多数Web应用程序使用spring-boot-starter-web模块快速启动和运行。您还可以选择使用spring-boot-starter-webflux模块构建响应式Web应用程序。
本章节我们主要介绍通过spring-boot-starter-web来开发Web应用程序。
如果你还没有开发过Spring Boot Web应用,你可以看下本教程的第二章节的实例
https://blog.csdn.net/java_cxrs/article/details/89044009
简单的对Web的入门程序有个了解。
Spring Web MVC框架
在我们开发Spring Boot的Web应用程序,其接收响应http请求的控制端还是我们之前学习的Spring MVC框架的知识。
Spring Web MVC框架是一个丰富的“模型视图控制器”Web框架。Spring MVC允许你创建
@Controller或@RestController的类来处理http请求。控制器中的方法通过使用@RequestMapping注释映射到HTTP 。
如果你要返回一个JSON数据则可以使用@RestController,它的作用相当于
@ResponseBody + @Controller合在一起的作用。
下面是一个RestController的实例
@RestController
@RequestMapping(value="/users")
public class MyRestController {
@RequestMapping(value="/{user}", method=RequestMethod.GET)
public User getUser(@PathVariable Long user) {
// ...
}
@RequestMapping(value="/{user}/customers", method=RequestMethod.GET)
List<Customer> getUserCustomers(@PathVariable Long user) {
// ...
}
@RequestMapping(value="/{user}", method=RequestMethod.DELETE)
public User deleteUser(@PathVariable Long user) {
// ...
}
}
Spring Boot默认的提供了对Spring MVC的支持,自动配置了相关的功能。
包括以下功能:
- 包含ContentNegotiatingViewResolver和BeanNameViewResolver
- 支持提供静态资源,包括支持Webjars
- 自动注册Converter,GenericConverter和Formatter
- 支持HttpMessageConverters
- 自动注册MessageCodesResolver
- 静态index.html支持
- 自定义Favicon支持
- 自动使用ConfigurableWebBindingInitializer
- HttpMessageConverters
Spring MVC使用HttpMessageConverter接口来转换HTTP请求和响应。例如可以将对象自动转换为JSON(默认用的是 Jackson库)
当我们发起一个http请求,传递一个json字符串时,服务端Controller可以自动获取请求的内容并自动转换为对象,或是服务端将一个对象返回至客户端自动转换为字符串,这都是因为通过HttpMessageConverters实现的。
- MessageCodesResolver
Spring MVC 通过此接口生成错误代码的策略,比如进行数据绑定验证,如果验证失败会通过MessageCodesResolver生成错误码放入Errors错误对象;并呈现错误信息。
- 获取静态资源
默认情况下,Spring Boot 应用的静态资源是放在/static目录下的
当我们要访问static目录下的静态资源时时不需要带/static前缀的
比如我的项目创建了一个静态页面,路径:/static/html/hello.html
那我我启动程序后如果要访问这个hello.html 请求的地址是
http://localhost:8080/html/hello.html,可以看到Spring Boot 默认是映射到/static目录下的
- spring.mvc.static-path-pattern
spring.mvc.static-path-pattern代表的含义是我们应该以什么样的路径来访问静态资源,换句话说,只有静态资源满足什么样的匹配条件,Spring Boot才会处理静态资源请求,以官方配置为例:
# 这表示只有静态资源的访问路径为/resources/**时,才会处理请求 spring.mvc.static-path-pattern=/resources/**,
当我们配置上面的属性时,那么请求hello.html的路径就变成了
http://localhost:8080/resources/html/hello.html
- 欢迎页面
Spring Boot 默认支持欢迎页面,如果在satic目录下新建index.html后,当请求项目 比如localhost:8080时就会自动寻找欢迎页面(index.html)
- 自定义Favicon
Spring Boot 默认支持favicon.ico,如下图所示,如果需要自定义设置,则可以在静态内容目录下或者类路径下
- 模板引擎
Spring Boot包括对以下模板引擎的自动配置支持:
后面我们将会重点介绍Thymeleaf,这也是Spring Boot 官方推荐的模板引擎。
注意:如果使用模板引擎默认配置时,你的模板将自动从/resources/templates下获取。
- 错误处理
默认的情况下,Spring Boot提供了一个/error请求来处理所有的错误,通过该映射处理的错误如果是浏览器则会产生html类型的数据如果是其他计算机客户端则会返回json数据。
浏览器访问时
使用“PostMan”访问
{
"timestamp": 1529479358472,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/abc"
}
总结:
客户端发起请求,一但系统出现4xx或者5xx之类的错误,就会来到/error请求,然后被BasicErrorController处理返回ModelAndView或者JSON。
- 自定义错误页面
使用模板引擎的情况
当系统进行错误处理后,我们可以将处理返回的错误状态码作为错误对应的页面名称,如404.html然后放在模板引擎文件夹里的error文件夹下,发生此状态码的错误就会查找到对应的页面,进入到该页面。
我们可以使用4xx和5xx作为错误页面的文件名来匹配这种类型的所有错误,精确优先(优先寻找精确的状态码.html)。
没有使用模板引擎的情况
如果没有使用模板引擎则会在静态资源文件夹下查找对应的错误页面。
如果没有配置自定义错误页面,系统则会使用Spring Boot默认的错误提示页面,Whitelabel Error Page...
下图是自定义的错误页面目录