一、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 來完成。
參考:https://www.cnblogs.com/zyt-bg/p/10627573.html
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可以引用入口類的配置。
參考鏈接: