一、Spring Boot介绍
1、Spring Boot介绍
针对Spring 搭建Web程序复杂的问题,Spring Boot简化了Spring应用开发,不需要配置就能运行Spring应用,Spring Boot管理 Spring容器、第三方插件,并提供很多默认系统级的服务。
相比Spring具有以下优点:
- 实现约定大于配置,是一个低配置的应用系统框架
- 提供了内置的Tomcat或Jetty容器
- 通过依赖的jar包管理、自动装配技术、容易支持与其他技术体系、工具集成。
- 支持热加载、开发体验好。
- starters自动依赖于版本控制。
2、Spring Boot 框架MVC框架
Spring Boot 框架下有着完善的 MVC 设计模型支持,其在 SpringMVC4.x 基础上进行了简化操作,对于项目的配置工作采用自动化配置的方式,使得在 SpringBoot 环境下进行 MVC 模式的开发变得尤为简单。
SpringBoot 下 的 MVC 基 本 由 Controller + Thymeleaf+Model 组成,Controller 控制器 起 到 在View 和 Model 间 衔 接 作 用 ,Thymeleaf 是 View,Model 有专门的类与其对应,对于数据的操作则完全通过 Model 来完成。
参考:
3、引入依赖
Spring Boot集成Spring MVC框架并实现自动配置,只需要在pom.xml中添加以下依赖即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
二、MVC框架
1、Spring Boot创建的Web项目目录结构如下
- src/main/java:Java 原生代码的存放位置。
- src/main/resources:前端视图相关的模板、资源存放的位置,其中 templates 子目录存放由Thymeleaf 产生的视图模板等;static 存放各类资源文件。
- src/main/resources/static:用于存放各类静态资源。
- src/main/resources/templates:用于存放模板文件,如Thymeleaf。
- src/main/resources/application.properties:配置文件,默认支持两种类型properties和.yml
- src/test:测试目录。
- target :项目打包后的目标目。
- External Libraries:包括JRE的录目录和Maven依赖的库目录
- pom.xml:Maven 的依赖文件
2、控制器
Spring MVC框架不像传统的MVC框架那样必须继承某个基础类才能处理用户的HTTP请求,只需要使用标注的方式。
控制器有Controller和RestController两种。
- @Controller:基本的控制器,用于接收、传输纯字符串信息,调用业务模型处理信息,也是SpringBoot 主要的控制器,它可以完成大部分 MVC
- @RestController:该控制器是 SpringBoot 将WebService 技术与常用的数据封装格式整合在一起,通过一定的技术规则,将原来较为复杂的数据封装 技 术 简 化 为 十 分 方 便 的 几 个 步 骤 来 实 现WebService 功能,常用的数据封装格式(例如:Json、Xml)在 RestController 中均有支持。
3、URL映射到方法
(1)@RequestMapping
使用@RequestMapping可以映射到某个Controller类,或某个方法。RequestMapping有多个属性来进一步匹配HTTP请求到Controller方法:
- value,请求的URL的路径,支持URL模板、正则表达式。
- method, HTTP 请求方法,有 GET、POST、PUT 等。
- consumes,允许的媒体类型(Media Types),如 consumes = "application/json",对应 于请求的 HTTP 的 Content-Type。
- produces,相应的媒体类型,如 produces="application/json",对应于 HTTP 的 Accept字段。
- params,请求的参数,如 params="action=update’’。
- headers,请求的 HTTP 头的值,如 headers = "myHeader=myValue"。
(2)URL路径匹配
1)RequestMapping的value属性用于匹配URL映射,支持简单的表达式
@RequestMapping("/get/{id}.json")
public @ResponseBody String getDataById(@PathVariable("id") Long id) {
return userService.getUserById(id);
}
当访问/get/1.json时,调用getDataById方法,且参数id的值是1。
2)通配符匹配
Ant用“*”表示匹配任意字符;“**”表示统配任意路径;“?”匹配单个字符
- /user/*.html,匹配/user/1.html和/user/11.html等
- /**/1.html,匹配/user/1.html和/user/add/1.html等
- /user/?.html,匹配/user/1.html和/user/2.html等
3)同时在类和方法上匹配
@RequestMapping("/home")
public class IndexController {
@RequestMapping("/")
public String index() {
return "Hello home";
}
@RequestMapping("/get")
public String get() {
return "Hello home-get";
}
}
/home请求由index()方法处理;/home/get请求由get()方法处理。
(3)HTTP method匹配
@RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。
Spring提供了简化后的@RequestMapping
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping
@GetMapping("/get/*.json")
public @ResponseBody String getDataById() {
return "hello";
}
等价于:
@RequestMapping("/get/*.json")
public class IndexController {
@GetMapping(method=RequestMethod.GET)
public String getDataById() {
return "Hello";
}
}
(4)consumes和produces
属性consumes意味着请求的HTTP头的Context-Type媒体类型与consumes的值匹配,才能调用此方法。
@RequestMapping(value = "/cons", consumes = {
"application/JSON",
})
String getConsumes() {
return "Consumes attribute";
}
此处consumes(请求的媒体类型)为application/JSON。
(5)params和header匹配
@RequestMapping 注解提供了一个 header 元素来根据请求中的消息头内容缩小请求映射的范围。
4、方法参数
Spring的Controller方法可以接受多种类型参数,主要接受的参数如下:
- @PathVariable,可以将URL中的值映射到方法参数中。
- Model,MVC的Model。
- JavaBean,将HTTP参数映射到JavaBean对象。
(1)@PathVariable
@PathVariable用于从请求URL中获取参数并映射到方法参数中。
三、视图技术
四、常用注解
1、主程序类、主入口类
@SpringBootApplication
标注一个主程序类,说明这是一个Spring Boot应用,SpringBoot运行这个类的main()方法。
注意:入口类要放到包的最外层,以便能够扫描到所有子包中的类。
@SpringBootApplication
public class SpringBootTest1Application {
public static void main(String[] args) {
SpringApplication.run(SpringBootTest1Application.class, args);
}
}
2、配置类
@SpringBootConfiguration
标注在某个类上,表示这是一个Sping Boot配置类。
3、开启自动配置功能
@EnableAutoConfiguration
以前需要配置的东西,Spring Boot帮助我们配置
@AutoConfigurationPackage 自动配置包
将配置类(@SpringBootApplication标注的类)所在包及下面所有子包里面的所有组件扫描到Spring容器。
4、测试类
@SpringBootTest
class SpringBootTest1ApplicationTests {
@Test
void contextLoads() {
}
}
@SpringBootTest可以引用入口类的配置。