本書從零基礎(chǔ)讀者的角度出發(fā),通過通俗易懂的語言、豐富多彩的實例,循序漸進地讓讀者在實踐中學(xué)習(xí)Spring Boot框架的用法。
全書共分為3篇15章,內(nèi)容包括環(huán)境搭建,Spring Boot基礎(chǔ),配置項目,Controller控制器,請求的過濾、攔截與監(jiān)聽,Service服務(wù),日志組件,單元測試,異常處理,模板引擎,JSON解析器,WebSocket長連接,上傳與下載,MyBatis和Redis等。書中先介紹基本概念和基礎(chǔ)語法,再講解代碼位置、參數(shù)說明,最后將代碼整合到項目中并演示運行效果;講解過程給出詳細說明與注釋,降低讀者學(xué)習(xí)難度。同時,本書配套了大量教學(xué)視頻,掃碼即可觀看,還提供所有程序源文件,方便讀者實踐。
本書適合Spring Boot初學(xué)者及已學(xué)完Java基礎(chǔ)、Java Servlet基礎(chǔ)和HTML基礎(chǔ)的讀者自學(xué)使用,也可用作高等院校相關(guān)專業(yè)的教材及參考書。
第1篇 基礎(chǔ)知識篇
第1章 環(huán)境搭建 2
1.1 安裝Java運行環(huán)境——JDK 3
1.1.1 下載Open JDK 3
1.1.2 安裝與配置 4
1.2 安裝項目構(gòu)建工具——Maven 6
1.2.1 下載壓縮包 6
1.2.2 修改JAR文件的存放位置 7
1.2.3 添加阿里云中央倉庫鏡像 8
1.3 安裝集成開發(fā)環(huán)境——Eclipse 9
1.3.1 下載與安裝 9
1.3.2 啟動 11
1.3.3 配置Java運行環(huán)境 12
1.3.4 配置Maven環(huán)境 14
1.4 接口測試工具——Postman 16
1.5 編寫第一個Spring Boot程序 18
1.5.1 在Spring官網(wǎng)生成初始項目文件 18
1.5.2 Eclipse導(dǎo)入Spring Boot項目 21
1.5.3 編寫簡單的跳轉(zhuǎn)功能 23
1.5.4 打包項目 25
1.6 為Eclipse安裝Spring插件(可選) 26
1.6.1 安裝插件的步驟 27
1.6.2 快速創(chuàng)建Spring Boot項目 28
本章知識思維導(dǎo)圖 31
第2章 Spring Boot基礎(chǔ) 32
2.1 Spring Boot簡介 33
2.1.1 為什么用Spring Boot? 33
2.1.2 Spring Boot的特點 33
2.2 常用注解 34
2.3 啟動類 35
2.4 命名規(guī)范 36
2.4.1 包的命名 36
2.4.2 Java文件的命名 39
2.5 理解注入 41
2.5.1 一個簡單的注入例子 41
[實例01] 將用戶名注冊成Bean 41
2.5.2 注冊Bean 43
[實例02] 李四的名字必須通過別名注入 44
[實例03] 指定People對象初始化方法和銷毀方法 46
2.5.3 獲取Bean 48
2.6 為項目添加依賴 50
2.6.1 修改pom.xml配置文件 50
2.6.2 如何查找依賴的版本號 53
本章知識思維導(dǎo)圖 54
第3章 配置項目 55
3.1 配置文件 56
3.1.1 properties和yml 56
3.1.2 常用配置 59
3.2 讀取配置項的值 60
3.2.1 使用@Value注解注入 60
[實例01] 讀取配置文件中記錄的學(xué)生信息 60
3.2.2 使用Environment環(huán)境組件 61
[實例02] 讀取配置文件中個人的簡歷信息 62
3.2.3 創(chuàng)建配置文件的映射對象 63
[實例03] 將配置文件中的信息封裝成學(xué)生對象 66
3.3 同時擁有多個配置文件 69
3.3.1 加載多個配置文件 69
[實例04] 讀取自定義配置文件中的靜態(tài)數(shù)據(jù) 70
3.3.2 切換多環(huán)境配置文件 72
[實例05] 創(chuàng)建生產(chǎn)和測試兩套環(huán)境的配置文件,切換兩套環(huán)境后啟動項目 73
3.4 @Configuration配置類 74
[實例06] 自定義項目的錯誤頁面 75
本章知識思維導(dǎo)圖 77
第4章 Controller控制器 78
4.1 映射HTTP請求 79
4.1.1 @Controlle/ 79
4.1.2 @RequestMapping 79
[實例01] 訪問指定地址進入主頁 79
[實例02] 訪問多個地址進入同一主頁 80
[實例03] 根據(jù)請求類型顯示不同的頁面 82
[實例04] 用戶發(fā)送的請求必須包含name參數(shù)和id參數(shù) 83
[實例05] 獲取用戶客戶端Cookie中的Session id,判斷用戶是否為自動登錄 85
[實例06] 要求用戶發(fā)送的數(shù)據(jù)必須是JSON格式 86
[實例07] 為電商平臺設(shè)置上層地址 89
4.1.3 @ResponseBody 89
4.1.4 @RestControlle/ 91
4.1.5 重定向 91
[實例08] 將請求重定向為百度首頁(方法一) 91
[實例09] 將請求重定向為百度首頁(方法二) 92
4.2 傳遞參數(shù) 93
4.2.1 自動識別請求的參數(shù) 93
[實例10] 驗證用戶發(fā)送的賬號、密碼是否正確 93
4.2.2 @RequestParam 95
[實例11] 獲取用戶發(fā)送的token口令 95
[實例12] 如果用戶沒有發(fā)送用戶名,則用“游客”稱呼用戶 97
4.2.3 @RequestBody 97
[實例13] 將前端發(fā)送的JSON數(shù)據(jù)封裝成People類對象 98
4.2.4 獲取Servlet的內(nèi)置對象 99
[實例14] 服務(wù)器返回圖片 100
4.3 RESTful風(fēng)格及傳參方式 101
4.3.1 什么是RESTful風(fēng)格? 101
4.3.2 動態(tài)URL地址 102
[實例15] 使用RESTful風(fēng)格對用戶信息進行查、改、刪 103
本章知識思維導(dǎo)圖 107
第5章 請求的過濾、攔截與監(jiān)聽 108
5.1 過濾器 109
5.1.1 通過配置類注冊 109
[實例01] 用過濾器檢查用戶是否登錄 110
[實例02] 讓同一個請求經(jīng)過三個過濾器 111
5.1.2 通過@WebFilter注解注冊 113
[實例03] 用過濾器統(tǒng)計資源訪問數(shù)量 114
5.2 攔截器 115
[實例04] 捕捉一個請求的執(zhí)行前、執(zhí)行后和結(jié)束事件 116
[實例05] 攔截高頻訪問 118
5.3 監(jiān)聽器 120
[實例06] 監(jiān)聽每一個前端請求的URL、IP和session id 121
[實例07] 監(jiān)聽網(wǎng)站的當(dāng)前訪問人數(shù) 123
本章知識思維導(dǎo)圖 124
第6章 Service服務(wù) 125
6.1 服務(wù)層的概念 126
6.2 @Service注解 126
[實例01] 創(chuàng)建用戶服務(wù),校驗用戶賬號密碼是否正確 127
6.3 同時存在多個實現(xiàn)類的情況 128
6.3.1 按照實現(xiàn)類名稱映射 128
[實例02] 為翻譯服務(wù)創(chuàng)建英譯漢、法譯漢實現(xiàn)類 129
6.3.2 按照@Service的value屬性映射 131
[實例03] 為成績服務(wù)創(chuàng)建升序排列和降序排列實現(xiàn)類 131
6.4 不實現(xiàn)接口的@Service類 134
[實例04] 校驗前端發(fā)送的名稱是否為中文姓名 134
6.5 @Service和@Repository的區(qū)別 136
本章知識思維導(dǎo)圖 136
第7章 日志組件 137
7.1 Spring Boot默認的日志組件 138
7.1.1 log4j框架與logback框架 138
7.1.2 slf4j框架 138
7.2 打印日志 138
7.2.1 slf4j的用法 138
[實例01] 在日志中輸出前端發(fā)來的數(shù)據(jù) 140
7.2.2 解讀日志 141
7.3 保存日志文件 142
7.3.1 指定日志文件保存地址 142
[實例02] 在項目的logs文件夾下保存日志文件 142
7.3.2 指定日志文件名稱 143
7.3.3 為日志文件添加約束 144
[實例03] 若logs文件夾下日志文件超出2kB則打包成ZIP壓縮包 144
7.4 調(diào)整日志內(nèi)容 146
7.4.1 設(shè)置日志級別 146
[實例04] 讓所有控制器都打印DEBUG日志 146
7.4.2 修改日志格式 148
[實例05] 在控制臺顯示簡化的中文日志,在日志文件中記錄詳細英文日志 148
7.5 支持logback配置文件 149
[實例06] 使用logback.xml配置日志組件,在控制臺打印日志的同時生成日志文件 149
本章知識思維導(dǎo)圖 151
第8章 單元測試 152
8.1 JUnit簡介 153
8.1.1 什么是JUnit? 153
8.1.2 Spring Boot中的JUnit 153
8.2 注解 155
8.2.1 核心注解 155
[實例01] 測試用戶登錄驗證服務(wù) 156
8.2.2 測前準備與測后收尾 157
[實例02] 在測試方法運行前后打印方法名稱 158
[實例03] 在測試開始前執(zhí)行初始化方法,測試結(jié)束后執(zhí)行資源釋放方法 159
8.2.3 參數(shù)化測試 161
[實例04] 測試判斷素數(shù)算法的執(zhí)行效率 161
[實例05] 設(shè)計多組用例來測試證用戶登錄驗證功能 163
[實例06] 將季節(jié)枚舉作為測試方法的參數(shù) 164
8.2.4 其他常用注解 165
8.3 斷言 168
8.3.1 Assertions類的常用方法 168
8.3.2 兩種導(dǎo)入方式 169
8.3.3 Executable接口 169
8.3.4 在測試中的應(yīng)用 170
[實例07] 驗證開發(fā)者編寫的升序排序算法是否正確 170
[實例08] 驗證用戶登錄方法是否完善 172
8.4 模擬Servlet內(nèi)置對象 174
[實例09] 在單元測試中偽造用戶登錄的session記錄 174
8.5 模擬網(wǎng)絡(luò)請求 176
8.5.1 創(chuàng)建網(wǎng)絡(luò)請求 176
8.5.2 添加請求參數(shù) 177
8.5.3 分析結(jié)果 178
8.5.4 在測試用的應(yīng)用 179
[實例10] 測試RESTful風(fēng)格的物料查詢服務(wù)和物料新增服務(wù) 180
[實例11] 使用MockMvc進行斷言測試 182
本章知識思維導(dǎo)圖 184
第9章 異常處理 185
9.1 攔截特定異常 186
[實例01] 攔截缺失參數(shù)引發(fā)的空指針異常 186
9.2 攔截全局最底層異常 188
[實例02] 攔截意料之外出現(xiàn)的異常 188
9.3 獲取具體的異常日志 190
[實例03] 打印異常的堆棧日志 190
9.4 指定被攔截的Java文件 192
9.4.1 只攔截某個包中發(fā)生的異常 192
[實例04] 只攔截注冊服務(wù)引發(fā)異常 192
9.4.2 只攔截某個注解標注類發(fā)生的異常 195
[實例05] 只攔截注冊服務(wù)引發(fā)異常 195
9.5 攔截自定義異常 197
[實例06] 攔截年齡是負數(shù)的異常 197
9.6 修改自定義異常的錯誤狀態(tài) 198
[實例07] 讓負數(shù)年齡引發(fā)HTTP 400錯誤 199
本章知識思維導(dǎo)圖 201
第2篇 實用Web技術(shù)篇
第10章 模板引擎 204
10.1 Thymeleaf 205
10.1.1 添加依賴 205
10.1.2 跳轉(zhuǎn)至HTML頁面文件 206
[實例01] 為首頁和登錄頁面編寫HTML文件,并實現(xiàn)跳轉(zhuǎn)邏輯 207
[實例02] 為項目添加默認首頁和錯誤頁 209
10.1.3 常用表達式和標簽 210
10.1.4 向頁面?zhèn)髦? 212
[實例03] 在前端頁面顯示用戶的IP地址等信息 213
10.1.5 向頁面?zhèn)鬏攲ο? 214
[實例04] 用三種方式顯示人員信息 215
10.1.6 頁面中的判斷 216
[實例05] 判斷購票者是否符合兒童票要求 217
[實例06] 判斷季節(jié)并展示結(jié)果 218
10.1.7 頁面中的循環(huán) 219
[實例07] 打印人員名單 220
10.1.8 Thymeleaf內(nèi)置對象 221
[實例08] 以不同形式打印當(dāng)前日期 222
[實例09] 操作字符串內(nèi)容 223
[實例10] 操作List、Set和Map類型的集合對象 224
[實例11] 讀取當(dāng)前登錄的用戶名和請求中的消息 225
10.1.9 嵌入其他頁面文件 226
[實例12] 在主頁插入頂部的登錄菜單和底部的聲明頁面 227
10.1.10 其他配置 228
10.2 FreeMarke/ 229
10.2.1 添加依賴 229
10.2.2 添加配置 229
10.2.3 跳轉(zhuǎn)至頁面和傳遞參數(shù) 230
[實例13] 在主頁中顯示班級和老師姓名、年齡 230
10.2.4 指令 231
10.2.5 在網(wǎng)頁中聲明變量 233
[實例14] 使用assign指令定義西游記師徒四人的基本信息 234
10.2.6 “?”和“!”的用法 235
[實例15] 使用??和!處理后端發(fā)送的值,防止出現(xiàn)空數(shù)據(jù) 236
10.2.7 內(nèi)置函數(shù) 236
10.2.8 頁面中的條件判斷 240
[實例16] 根據(jù)學(xué)生各科成績給出優(yōu)、良、及格、不及格評級 241
10.2.9 頁面中的循環(huán) 243
[實例17] 使用list指令展示圖書銷售排行榜 243
10.2.10 在網(wǎng)頁中聲明方法 245
[實例18] 為特惠活動中的圖書商品添加首尾標簽 246
10.2.11 嵌入其他頁面文件 247
[實例19] 使用FreeMarker嵌入頂部的登錄菜單和底部的聲明頁面 247
本章知識思維導(dǎo)圖 249
第11章 JSON解析器 250
11.1 Jackson 251
11.1.1 什么是JSON 251
11.1.2 Jackson的核心API 252
11.1.3 將對象轉(zhuǎn)為JSON字符串 256
[實例01] 賬號密碼錯誤時返回JSON格式錯誤信息 258
11.1.4 將JSON字符串轉(zhuǎn)為實體對象 260
[實例02] 將JSON中的員工信息封裝成員工實體類 260
11.1.5 Spring Boot可自動將對象轉(zhuǎn)換成JSON 262
11.1.6 Jackson的注解 264
[實例03] 利用注解設(shè)定商品實體類的JSON格式 264
11.1.7 JSON數(shù)據(jù)的增刪改查 265
11.2 FastJson 268
11.2.1 添加FastJson依賴 268
11.2.2 對象與JSON字符串互轉(zhuǎn) 268
[實例04] 接受前端發(fā)來的JSON登錄數(shù)據(jù),返回JSON登錄結(jié)果 269
11.2.3 @JSONField注解 270
11.2.4 FastJson對JSON數(shù)據(jù)進行增刪改查 272
本章知識思維導(dǎo)圖 278
第12章 WebSocket長連接 279
12.1 概念 280
12.1.1 短連接與長連接 280
12.1.2 WebSocket協(xié)議 280
12.2 端點 280
12.2.1 添加依賴 280
12.2.2 開啟自動注冊端點 281
12.2.3 創(chuàng)建服務(wù)器端點 281
12.2.4 Session會話對象 282
12.2.5 服務(wù)器端點的事件 284
12.3 頁面客戶端 286
12.3.1 JavaScript中的WebSocket對象 286
12.3.2 事件及觸發(fā)的方法 287
12.3.3 客戶端與服務(wù)端之間的觸發(fā)關(guān)系 287
12.4 一個簡單實例 288
[實例01] 頁面動態(tài)展示服務(wù)器回執(zhí) 288
12.5 模擬手機掃碼登錄 291
[實例02] 模擬手機掃碼登錄 292
12.5.1 添加qrcode.js 292
12.5.2 模擬消息隊列 292
12.5.3 服務(wù)端實現(xiàn) 293
12.5.4 客戶端實現(xiàn) 294
12.5.5 控制器的實現(xiàn) 295
12.5.6 運行效果 295
12.6 網(wǎng)頁聊天室 297
[實例03] 網(wǎng)頁聊天室 297
12.6.1 添加JQuery 297
12.6.2 自定義會話組 297
12.6.3 服務(wù)端實現(xiàn) 298
12.6.4 客戶端實現(xiàn) 299
12.6.5 運行效果 300
本章知識思維導(dǎo)圖 302
第13章 上傳與下載 303
13.1 上傳文件 304
[實例01] 將圖片文件上傳至服務(wù)器 305
13.2 同時上傳多個文件 307
[實例02] 一次上傳文件至服務(wù)器 308
13.3 下載文件 310
[實例03] 根據(jù)URL地址下載不同的文件 311
13.4 提交Excel模板 312
13.4.1 添加POI依賴 312
13.4.2 讀取Excel文件的API 313
13.4.3 綜合實例 315
[實例04] 批量上傳考試成績 315
本章知識思維導(dǎo)圖 319
第3篇 框架整合篇
第14章 持久層框架——MyBatis 322
14.1 簡介 323
14.2 添加依賴 323
14.3 映射器Mappe/ 324
14.4 增、刪、改、查 325
14.4.1 @Select 326
[實例01] 將t_people表中的數(shù)據(jù)取出并封裝成實體類對象 328
14.4.2 @Insert、@Update和@Delete 330
[實例02] 向t_people表中添加新人員數(shù)據(jù)、修改新人員數(shù)據(jù),再刪除此新人員數(shù)據(jù) 330
14.5 SQL語句構(gòu)建器 332
14.5.1 SQL類 332
14.5.2 Provider系列注解 333
14.5.3 動態(tài)構(gòu)建SQL 334
[實例03] 創(chuàng)建帶參數(shù)的接口方法,允許插入定義人員數(shù)據(jù),并查詢指定姓氏的人員數(shù)據(jù) 335
14.6 SQL參數(shù) 337
[實例04] 創(chuàng)建開放式人員信息增刪改查映射器接口 339
14.7 結(jié)果映射 340
[實例05] 創(chuàng)建圖書館借書單實體列,將三表聯(lián)查結(jié)果封裝到借書單對象中 341
14.8 級聯(lián)映射 343
14.8.1 一對一 344
[實例06] 構(gòu)建手機與電池的一對一關(guān)系 345
14.8.2 一對多 346
[實例07] 構(gòu)建老師與學(xué)生的一對多關(guān)系 348
本章知識思維導(dǎo)圖 351
第15章 緩存中間件——Redis 352
15.1 Redis簡介 353
15.1.1 非關(guān)系型數(shù)據(jù)庫 353
15.1.2 Redis簡介 353
15.1.3 為什么把Redis稱為緩存? 353
15.2 Windows系統(tǒng)搭建Redis環(huán)境 354
15.2.1 下載 354
15.2.2 啟動 355
15.3 Redis常用命令 357
15.3.1 基礎(chǔ)鍵值命令 357
15.3.2 哈希命令 361
15.3.3 列表命令 364
15.3.4 集合命令 367
15.4 Spring Boot訪問Redis 370
15.4.1 添加依賴 370
15.4.2 配置項 371
15.4.3 使用Jedis訪問Redis 371
[實例01] 高并發(fā)搶票服務(wù) 373
15.4.4 使用RedisTemplate訪問Redis 376
[實例02] 為視頻播放量排行榜添加緩存 379
本章知識思維導(dǎo)圖 384