本书从零基础读者的角度出发,通过通俗易懂的语言、丰富多彩的实例,循序渐进地让读者在实践中学习Spring Boot框架的用法。
全书共分为3篇15章,内容包括环境搭建,Spring Boot基础,配置项目,Controller控制器,请求的过滤、拦截与监听,Service服务,日志组件,单元测试,异常处理,模板引擎,JSON解析器,WebSocket长连接,上传与下载,MyBatis和Redis等。书中先介绍基本概念和基础语法,再讲解代码位置、参数说明,最后将代码整合到项目中并演示运行效果;讲解过程给出详细说明与注释,降低读者学习难度。同时,本书配套了大量教学视频,扫码即可观看,还提供所有程序源文件,方便读者实践。
本书适合Spring Boot初学者及已学完Java基础、Java Servlet基础和HTML基础的读者自学使用,也可用作高等院校相关专业的教材及参考书。
第1篇 基础知识篇
第1章 环境搭建 2
1.1 安装Java运行环境——JDK 3
1.1.1 下载Open JDK 3
1.1.2 安装与配置 4
1.2 安装项目构建工具——Maven 6
1.2.1 下载压缩包 6
1.2.2 修改JAR文件的存放位置 7
1.2.3 添加阿里云中央仓库镜像 8
1.3 安装集成开发环境——Eclipse 9
1.3.1 下载与安装 9
1.3.2 启动 11
1.3.3 配置Java运行环境 12
1.3.4 配置Maven环境 14
1.4 接口测试工具——Postman 16
1.5 编写第一个Spring Boot程序 18
1.5.1 在Spring官网生成初始项目文件 18
1.5.2 Eclipse导入Spring Boot项目 21
1.5.3 编写简单的跳转功能 23
1.5.4 打包项目 25
1.6 为Eclipse安装Spring插件(可选) 26
1.6.1 安装插件的步骤 27
1.6.2 快速创建Spring Boot项目 28
本章知识思维导图 31
第2章 Spring Boot基础 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 命名规范 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
本章知识思维导图 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] 读取配置文件中记录的学生信息 60
3.2.2 使用Environment环境组件 61
[实例02] 读取配置文件中个人的简历信息 62
3.2.3 创建配置文件的映射对象 63
[实例03] 将配置文件中的信息封装成学生对象 66
3.3 同时拥有多个配置文件 69
3.3.1 加载多个配置文件 69
[实例04] 读取自定义配置文件中的静态数据 70
3.3.2 切换多环境配置文件 72
[实例05] 创建生产和测试两套环境的配置文件,切换两套环境后启动项目 73
3.4 @Configuration配置类 74
[实例06] 自定义项目的错误页面 75
本章知识思维导图 77
第4章 Controller控制器 78
4.1 映射HTTP请求 79
4.1.1 @Controlle/ 79
4.1.2 @RequestMapping 79
[实例01] 访问指定地址进入主页 79
[实例02] 访问多个地址进入同一主页 80
[实例03] 根据请求类型显示不同的页面 82
[实例04] 用户发送的请求必须包含name参数和id参数 83
[实例05] 获取用户客户端Cookie中的Session id,判断用户是否为自动登录 85
[实例06] 要求用户发送的数据必须是JSON格式 86
[实例07] 为电商平台设置上层地址 89
4.1.3 @ResponseBody 89
4.1.4 @RestControlle/ 91
4.1.5 重定向 91
[实例08] 将请求重定向为百度首页(方法一) 91
[实例09] 将请求重定向为百度首页(方法二) 92
4.2 传递参数 93
4.2.1 自动识别请求的参数 93
[实例10] 验证用户发送的账号、密码是否正确 93
4.2.2 @RequestParam 95
[实例11] 获取用户发送的token口令 95
[实例12] 如果用户没有发送用户名,则用“游客”称呼用户 97
4.2.3 @RequestBody 97
[实例13] 将前端发送的JSON数据封装成People类对象 98
4.2.4 获取Servlet的内置对象 99
[实例14] 服务器返回图片 100
4.3 RESTful风格及传参方式 101
4.3.1 什么是RESTful风格? 101
4.3.2 动态URL地址 102
[实例15] 使用RESTful风格对用户信息进行查、改、删 103
本章知识思维导图 107
第5章 请求的过滤、拦截与监听 108
5.1 过滤器 109
5.1.1 通过配置类注册 109
[实例01] 用过滤器检查用户是否登录 110
[实例02] 让同一个请求经过三个过滤器 111
5.1.2 通过@WebFilter注解注册 113
[实例03] 用过滤器统计资源访问数量 114
5.2 拦截器 115
[实例04] 捕捉一个请求的执行前、执行后和结束事件 116
[实例05] 拦截高频访问 118
5.3 监听器 120
[实例06] 监听每一个前端请求的URL、IP和session id 121
[实例07] 监听网站的当前访问人数 123
本章知识思维导图 124
第6章 Service服务 125
6.1 服务层的概念 126
6.2 @Service注解 126
[实例01] 创建用户服务,校验用户账号密码是否正确 127
6.3 同时存在多个实现类的情况 128
6.3.1 按照实现类名称映射 128
[实例02] 为翻译服务创建英译汉、法译汉实现类 129
6.3.2 按照@Service的value属性映射 131
[实例03] 为成绩服务创建升序排列和降序排列实现类 131
6.4 不实现接口的@Service类 134
[实例04] 校验前端发送的名称是否为中文姓名 134
6.5 @Service和@Repository的区别 136
本章知识思维导图 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] 在日志中输出前端发来的数据 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 调整日志内容 146
7.4.1 设置日志级别 146
[实例04] 让所有控制器都打印DEBUG日志 146
7.4.2 修改日志格式 148
[实例05] 在控制台显示简化的中文日志,在日志文件中记录详细英文日志 148
7.5 支持logback配置文件 149
[实例06] 使用logback.xml配置日志组件,在控制台打印日志的同时生成日志文件 149
本章知识思维导图 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] 测试用户登录验证服务 156
8.2.2 测前准备与测后收尾 157
[实例02] 在测试方法运行前后打印方法名称 158
[实例03] 在测试开始前执行初始化方法,测试结束后执行资源释放方法 159
8.2.3 参数化测试 161
[实例04] 测试判断素数算法的执行效率 161
[实例05] 设计多组用例来测试证用户登录验证功能 163
[实例06] 将季节枚举作为测试方法的参数 164
8.2.4 其他常用注解 165
8.3 断言 168
8.3.1 Assertions类的常用方法 168
8.3.2 两种导入方式 169
8.3.3 Executable接口 169
8.3.4 在测试中的应用 170
[实例07] 验证开发者编写的升序排序算法是否正确 170
[实例08] 验证用户登录方法是否完善 172
8.4 模拟Servlet内置对象 174
[实例09] 在单元测试中伪造用户登录的session记录 174
8.5 模拟网络请求 176
8.5.1 创建网络请求 176
8.5.2 添加请求参数 177
8.5.3 分析结果 178
8.5.4 在测试用的应用 179
[实例10] 测试RESTful风格的物料查询服务和物料新增服务 180
[实例11] 使用MockMvc进行断言测试 182
本章知识思维导图 184
第9章 异常处理 185
9.1 拦截特定异常 186
[实例01] 拦截缺失参数引发的空指针异常 186
9.2 拦截全局最底层异常 188
[实例02] 拦截意料之外出现的异常 188
9.3 获取具体的异常日志 190
[实例03] 打印异常的堆栈日志 190
9.4 指定被拦截的Java文件 192
9.4.1 只拦截某个包中发生的异常 192
[实例04] 只拦截注册服务引发异常 192
9.4.2 只拦截某个注解标注类发生的异常 195
[实例05] 只拦截注册服务引发异常 195
9.5 拦截自定义异常 197
[实例06] 拦截年龄是负数的异常 197
9.6 修改自定义异常的错误状态 198
[实例07] 让负数年龄引发HTTP 400错误 199
本章知识思维导图 201
第2篇 实用Web技术篇
第10章 模板引擎 204
10.1 Thymeleaf 205
10.1.1 添加依赖 205
10.1.2 跳转至HTML页面文件 206
[实例01] 为首页和登录页面编写HTML文件,并实现跳转逻辑 207
[实例02] 为项目添加默认首页和错误页 209
10.1.3 常用表达式和标签 210
10.1.4 向页面传值 212
[实例03] 在前端页面显示用户的IP地址等信息 213
10.1.5 向页面传输对象 214
[实例04] 用三种方式显示人员信息 215
10.1.6 页面中的判断 216
[实例05] 判断购票者是否符合儿童票要求 217
[实例06] 判断季节并展示结果 218
10.1.7 页面中的循环 219
[实例07] 打印人员名单 220
10.1.8 Thymeleaf内置对象 221
[实例08] 以不同形式打印当前日期 222
[实例09] 操作字符串内容 223
[实例10] 操作List、Set和Map类型的集合对象 224
[实例11] 读取当前登录的用户名和请求中的消息 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 跳转至页面和传递参数 230
[实例13] 在主页中显示班级和老师姓名、年龄 230
10.2.4 指令 231
10.2.5 在网页中声明变量 233
[实例14] 使用assign指令定义西游记师徒四人的基本信息 234
10.2.6 “?”和“!”的用法 235
[实例15] 使用??和!处理后端发送的值,防止出现空数据 236
10.2.7 内置函数 236
10.2.8 页面中的条件判断 240
[实例16] 根据学生各科成绩给出优、良、及格、不及格评级 241
10.2.9 页面中的循环 243
[实例17] 使用list指令展示图书销售排行榜 243
10.2.10 在网页中声明方法 245
[实例18] 为特惠活动中的图书商品添加首尾标签 246
10.2.11 嵌入其他页面文件 247
[实例19] 使用FreeMarker嵌入顶部的登录菜单和底部的声明页面 247
本章知识思维导图 249
第11章 JSON解析器 250
11.1 Jackson 251
11.1.1 什么是JSON 251
11.1.2 Jackson的核心API 252
11.1.3 将对象转为JSON字符串 256
[实例01] 账号密码错误时返回JSON格式错误信息 258
11.1.4 将JSON字符串转为实体对象 260
[实例02] 将JSON中的员工信息封装成员工实体类 260
11.1.5 Spring Boot可自动将对象转换成JSON 262
11.1.6 Jackson的注解 264
[实例03] 利用注解设定商品实体类的JSON格式 264
11.1.7 JSON数据的增删改查 265
11.2 FastJson 268
11.2.1 添加FastJson依赖 268
11.2.2 对象与JSON字符串互转 268
[实例04] 接受前端发来的JSON登录数据,返回JSON登录结果 269
11.2.3 @JSONField注解 270
11.2.4 FastJson对JSON数据进行增删改查 272
本章知识思维导图 278
第12章 WebSocket长连接 279
12.1 概念 280
12.1.1 短连接与长连接 280
12.1.2 WebSocket协议 280
12.2 端点 280
12.2.1 添加依赖 280
12.2.2 开启自动注册端点 281
12.2.3 创建服务器端点 281
12.2.4 Session会话对象 282
12.2.5 服务器端点的事件 284
12.3 页面客户端 286
12.3.1 JavaScript中的WebSocket对象 286
12.3.2 事件及触发的方法 287
12.3.3 客户端与服务端之间的触发关系 287
12.4 一个简单实例 288
[实例01] 页面动态展示服务器回执 288
12.5 模拟手机扫码登录 291
[实例02] 模拟手机扫码登录 292
12.5.1 添加qrcode.js 292
12.5.2 模拟消息队列 292
12.5.3 服务端实现 293
12.5.4 客户端实现 294
12.5.5 控制器的实现 295
12.5.6 运行效果 295
12.6 网页聊天室 297
[实例03] 网页聊天室 297
12.6.1 添加JQuery 297
12.6.2 自定义会话组 297
12.6.3 服务端实现 298
12.6.4 客户端实现 299
12.6.5 运行效果 300
本章知识思维导图 302
第13章 上传与下载 303
13.1 上传文件 304
[实例01] 将图片文件上传至服务器 305
13.2 同时上传多个文件 307
[实例02] 一次上传文件至服务器 308
13.3 下载文件 310
[实例03] 根据URL地址下载不同的文件 311
13.4 提交Excel模板 312
13.4.1 添加POI依赖 312
13.4.2 读取Excel文件的API 313
13.4.3 综合实例 315
[实例04] 批量上传考试成绩 315
本章知识思维导图 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表中的数据取出并封装成实体类对象 328
14.4.2 @Insert、@Update和@Delete 330
[实例02] 向t_people表中添加新人员数据、修改新人员数据,再删除此新人员数据 330
14.5 SQL语句构建器 332
14.5.1 SQL类 332
14.5.2 Provider系列注解 333
14.5.3 动态构建SQL 334
[实例03] 创建带参数的接口方法,允许插入定义人员数据,并查询指定姓氏的人员数据 335
14.6 SQL参数 337
[实例04] 创建开放式人员信息增删改查映射器接口 339
14.7 结果映射 340
[实例05] 创建图书馆借书单实体列,将三表联查结果封装到借书单对象中 341
14.8 级联映射 343
14.8.1 一对一 344
[实例06] 构建手机与电池的一对一关系 345
14.8.2 一对多 346
[实例07] 构建老师与学生的一对多关系 348
本章知识思维导图 351
第15章 缓存中间件——Redis 352
15.1 Redis简介 353
15.1.1 非关系型数据库 353
15.1.2 Redis简介 353
15.1.3 为什么把Redis称为缓存? 353
15.2 Windows系统搭建Redis环境 354
15.2.1 下载 354
15.2.2 启动 355
15.3 Redis常用命令 357
15.3.1 基础键值命令 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] 高并发抢票服务 373
15.4.4 使用RedisTemplate访问Redis 376
[实例02] 为视频播放量排行榜添加缓存 379
本章知识思维导图 384