序言
在这个互联网时代,使用 Spring 框架除了开发少数的独立应用,大部分情况下实际上在使用 SpringMVC 开发 web 应用,为了帮我们简化快速搭建并开发一个 Web 项目,SpringBoot为我们提供了 spring-boot-starter-web 自动配置模块。
本模块将整合spring-boot-starter-web,来让应用拥有web的能力
步骤
新建子模块,并且纳入父模块的管理这里不在赘述了,不懂请看第一个示例。
1.引入spring-boot-starter-web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
到这里,我们就得到了一个可执行的web项目,直接从Application启动即可,只不过,我们还没有提供任何服务 Web 请求的 Controller,所以,访问任何路径都会返回一个 SpringBoot 默认提供的错误页面(一般称其为 whitelabel error page)
2.新建controller
@RestController
public class HelloController {
@GetMapping("/say/hello")
public String sayHello() {
return "hello";
}
}
这样,一个最简单的web应用就完成了
现在在进行启动,并且浏览器访问http://localhost:8080/say/hello即可看到浏览器返回hello。
小知识
相对于传统的web项目开发,spring-boot的模式仅仅只需要两步即可实现。但这简单的背后,却有着很多约定,我们只有充分了解并遵守这些约定,才能更好的使用spring-boot-starter-web
项目结构层面的约定
项目结构层面与传统打包为 war 的 JavaWeb 应用的差异在于,静态文件和页面模板的存放位置变了,原来是放在 src/main/webapp 目录下的一系列资源,现在都统一放在 src/main/resources 相应子目录下,比如:
- src/main/resources/static 用于存放各类静态资源,比如 css,js 等。
- src/main/resources/templates 用于存放模板文件,比如 *.vm。
SpringMVC 框架层面的约定和定制
spring-boot-starter-web 默认将为我们自动配置如下一些 SpringMVC 必要组件:
- 必要的 ViewResolver,比如 ContentNegotiatingViewResolver 和 Bean-NameViewResolver。
- 将必要的 Converter、GenericConverter 和 Formatter 等 bean 注册到 IoC 容器。
- 添加一系列的 HttpMessageConverter 以便支持对 Web 请求和相应的类型转换。
- 自动配置和注册 MessageCodesResolver。
- 其他
任何时候,如果我们对默认提供的 SpringMVC 组件设定不满意,都可以在 IoC 容器中注册新的同类型的 bean 定义来替换,或者直接提供一个基于 WebMvcConfigurerAdapter 类型的 bean 定义来定制,甚至直接提供一个标注了 @EnableWebMvc 的 @Configuration 配置类完全接管所有 SpringMVC 的相关配置,自己完全重新配置。
@Controller
@Controller用于标记在一个类上,使用它标记的类就是一个SpringMvc Controller对象
@ResponseBody
ResponseBody注解的作用是将controller的方法返回的对象 通过适当的转换器 转换为指定的格式之后,写入到response对象的body区(响应体中),通常用来返回JSON数据。
需要注意,在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,它的效果等同于通过response对象输出指定格式的数据。
@RestController
@RestController是一个复合注解,@RestController = @Controller + @ResponseBody
@RequestMapping
在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求。
@GetMapping
@RequestMapping(value = “/say/hello”, method = RequestMethod.GET)的简化写法,同样的注解还有@PostMapping,@PutMapping,@DeleteMapping等。