新書推薦:
《
可转债——新手理财的极简工具
》
售價:HK$
65.0
《
新加坡教育:神话与现实
》
售價:HK$
96.3
《
“口袋中的世界史”第一辑·冷战中的危机事件
》
售價:HK$
291.2
《
绝美的奥伦堡蕾丝披肩编织
》
售價:HK$
177.0
《
狂飙年代:18世纪俄国的新文化和旧文化(第二卷)
》
售價:HK$
177.0
《
万有引力书系 纳粹亿万富翁 德国财富家族的黑暗历史
》
售價:HK$
109.8
《
中国常见植物野外识别手册:青海册
》
售價:HK$
76.2
《
三星堆对话古遗址(从三星堆出发,横跨黄河流域,长江流域,对话11处古遗址,探源多元一体的中华文明)
》
售價:HK$
87.4
|
編輯推薦: |
本书全面介绍了学习Java EE企业级开发所需要的技术以及知识点,技术包括Maven、Tomcat、Jetty、Servlet、JDBC、Spring、Spring Web MVC、Spring Security、MyBatis、MySQL、Thymeleaf、Bootstrap、Jersey、Spring Boot、Spring Cloud等开源技术栈,知识点涉及数据库、IoC、AOP、单元测试、集成测试、事务管理、MVC、安全认证、数据持久化、REST、WebSocket、消息通信、Email发送、任务执行与调度、缓存、微服务治理等。
本书内容丰富,案例新颖,由浅入深,层层推进,理论联系实际,具有较强的实操性和先进性,所讲的知识点既能满足当前企业级应用的开发需求,又可以大幅度减轻开发者的负担。
本书适合拥有Java开发基础、想入手学习Java Web开发的人员,也适合想学习当前热点轻量级框架开发的读者,对于想系统学习Java EE企业级应用开发技术的读者尤其适合。
通过本书的学习,读者可以掌握Java EE轻量级企业开发技术,拓展视野,提升职场竞争能力。
|
內容簡介: |
本书由资深Java工程师结合多年大厂开发经验精心编撰,全面系统地介绍Java EE企业级开发所需要的轻量级开源技术栈,涉及Maven、Servlet、Jetty、Tomcat、Spring框架、Spring Web MVC、Spring Security、MyBatis、MySQL、Thymeleaf、Bootstrap、REST客户端、Jersey、WebSocket、JMS、Email、任务执行与调度、缓存、Spring Boot、Spring Cloud等方面的内容。轻量级开发模式已经深入人心,被广大互联网公司所采用,本书从开发环境搭建开始,循序渐进地讲解核心技术、热点框架,适时结合项目与案例介绍这些技术与框架的实际应用,特别是对当前热点的微服务开发技术进行了详细的阐述,对于拥有Java基础,想开发企业项目的读者,本书可帮助你快速上手。 本书技术先进,案例丰富,主要面向对Java EE企业级开发感兴趣的计算机专业学生、软件工程师、系统架构师等,也可以用作软件学院或培训机构的教学用书。
|
關於作者: |
柳伟卫,网名waylau、老卫,80后程序员,从业十余年,关注编程、系统架构、性能优化;CSDN、开源中国、云栖社区等技术社区专家,慕课网特邀讲师;在IT公司担任过项目经理、架构师、高级技术顾问等职位,具有丰富的软件开发管理及系统架构经验;主导过多个国家级、省级大型分布式系统设计与研发,参与过面向全球的供应链系统服务化改造,积累了大量的分布式系统、微服务架构经验;已出版《分布式系统常用技术及案例分析》《Spring Boot 企业级应用开发实战》《Spring Cloud 微服务架构开发实战》《Spring 5开发大全》等著作。
|
目錄:
|
第1章 Java EE概述 1
1.1 Java EE发展简史 1
1.1.1 Java平台发展简史 1
1.1.2 Java EE现状 3
1.2 传统企业级应用技术的不足 6
1.2.1 规范太重 6
1.2.2 学习成本太高 7
1.2.3 不够灵活 7
1.2.4 发展缓慢 7
1.3 轻量级Java EE的技术特点 8
1.3.1 轻量级架构 8
1.3.2 符合二八定律 8
1.3.3 基于开源技术 8
1.3.4 支持微服务 9
1.3.5 可用性和扩展性 9
1.3.6 支撑大型互联网应用 10
1.4 开发环境搭建 10
1.4.1 安装JDK 10
1.4.2 Maven安装 12
1.4.3 安装Eclipse 13
1.4.4 安装IntelliJ IDEA 16
1.4.5 安装Apache Tomcat 17
1.5 总结 18
1.6 习题 19
第2章 项目管理Maven 20
2.1 Maven概述 20
2.1.1 Maven的主要功能 20
2.1.2 创建Maven项目 21
2.1.3 探索Maven项目 23
2.1.4 构建Maven项目 26
2.2 理解Maven构建生命周期 28
2.2.1 Maven阶段 28
2.2.2 完整的生命周期阶段 29
2.2.3 生命周期阶段在命令行中的调用 30
2.2.4 使用构建生命周期来设置项目 30
2.3 理解POM 32
2.3.1 Super POM 32
2.3.2 最小化POM 35
2.4 实战:使用Eclipse创建Maven应用 36
2.4.1 创建Maven应用 36
2.4.2 运行Maven应用 38
2.4.3 导入Maven应用 40
2.4.4 相关问题解决 42
2.5 实战:使用IntelliJ IEDA创建Maven应用 43
2.5.1 创建Maven应用 43
2.5.2 运行Maven应用 45
2.5.3 导入Maven应用 47
2.5.4 相关问题解决 48
2.6 总结 48
2.7 习题 49
第3章 Web应用的基石Servlet 50
3.1 Servlet概述 50
3.1.1 Servlet架构 50
3.1.2 Servlet生命周期 51
3.1.3 常用方法 53
3.2 Servlet容器 53
3.2.1 常用Servlet容器 54
3.2.2 Tomcat和Jetty的相同点 54
3.2.3 Tomcat和Jetty的不同点 54
3.2.4 总结 55
3.3 过滤器 55
3.3.1 什么是过滤器 55
3.3.2 过滤器生命周期 56
3.3.3 包装请求和响应 57
3.3.4 过滤器环境 57
3.3.5 Web应用中过滤器的配置 57
3.3.6 过滤器和请求分派器 58
3.4 请求 60
3.4.1 HTTP协议参数 60
3.4.2 属性 61
3.4.3 请求头 61
3.4.4 请求路径元素 61
3.4.5 路径转换方法 62
3.4.6 请求数据编码 62
3.5 Servlet上下文 63
3.5.1 ServletContext接口作用域 63
3.5.2 初始化参数 63
3.5.3 配置方法 64
3.5.4 上下文属性 66
3.5.5 资源 66
3.6 响应 67
3.6.1 缓冲 67
3.6.2 头 68
3.6.3 方法 68
3.7 监听器 69
3.7.1 事件类型和监听器接口 69
3.7.2 部署描述符示例 70
3.7.3 监听器实例和线程 71
3.7.4 监听器异常 71
3.7.5 分布式容器 71
3.7.6 会话事件 71
3.8 会话 71
3.8.1 会话跟踪机制 72
3.8.2 创建会话 72
3.8.3 会话范围 73
3.8.4 绑定属性到会话 73
3.8.5 会话超时 73
3.8.6 最后访问时间 74
3.8.7 线程问题 74
3.8.8 分布式环境 74
3.8.9 客户端语义 75
3.9 实战:创建基于Servlet的Web应用 75
3.9.1 创建动态Web项目 75
3.9.2 创建Servlet实现类 75
3.9.3 编译应用 77
3.9.4 运行应用 77
3.10 Tomcat服务器概述 77
3.10.1 Tomcat目录结构 77
3.10.2 Tomcat主要组件 78
3.10.3 Tomcat处理HTTP请求的过程 79
3.11 实战:在应用里面内嵌Tomcat容器 80
3.11.1 安装tomcat7-maven-plugin 80
3.11.2 运行应用 80
3.11.3 访问应用 81
3.12 Jetty服务器概述 81
3.12.1 高性能Servlet容器 81
3.12.2 可拔插 82
3.12.3 Jetty常用配置 82
3.13 实战:在应用里面内嵌Jetty容器 86
3.13.1 Maven插件形式 86
3.13.2 编程方式 87
3.14 总结 90
3.15 习题 90
第4章 流行的开源关系型数据库MySQL 91
4.1 MySQL概述 91
4.1.1 MySQL名字的由来 91
4.1.2 MySQL的发展历程 92
4.1.3 MySQL的特点 93
4.2 MySQL的安装 94
4.2.1 下载安装包 94
4.2.2 解压安装包 94
4.2.3 创建my.ini 95
4.2.4 初始化安装 95
4.2.5 启动和关闭MySQL Server 95
4.3 使用MySQL客户端 96
4.4 MySQL基本操作 96
4.5 总结 97
4.6 习题 98
第5章 Java操作数据库JDBC 99
5.1 JDBC概述 99
5.2 JDBC的核心概念 99
5.2.1 建立连接 100
5.2.2 执行SQL并操作结果集 100
5.2.3 两层模型 101
5.2.4 三层模型 102
5.2.5 JDBC与Java EE平台的关系 103
5.3 使用PreparedStatement 103
5.3.1 创建PreparedStatement对象 103
5.3.2 为什么使用PreparedStatement 104
5.4 事务管理 105
5.4.1 事务边界和自动提交 105
5.4.2 关闭自动提交模式 105
5.4.3 事务隔离级别 106
5.4.4 性能考虑 107
5.4.5 保存点 107
5.5 实战:使用JDBC操作数据库 108
5.5.1 初始化数据库 108
5.5.2 建表 108
5.5.3 初始化应用 108
5.5.4 创建测试类 110
5.6 理解连接池技术 114
5.7 实战:使用数据库连接池DBCP 114
5.7.1 添加DBCP依赖 114
5.7.2 编写数据库工具类 116
5.7.3 理解DbUtil的配置化 119
5.7.4 编写测试用例 119
5.8 总结 122
5.9 习题 122
第6章 一站式应用框架Spring 123
6.1 Spring概述 123
6.1.1 Spring的广义与狭义 123
6.1.2 Spring框架总览 125
6.1.3 Spring框架常用模块 126
6.1.4 Spring设计模式 128
6.2 IoC 128
6.2.1 依赖注入与控制反转 128
6.2.2 IoC容器和Bean 129
6.2.3 配置元数据 130
6.2.4 实例化容器 131
6.2.5 使用容器 131
6.2.6 Bean的命名 132
6.2.7 实例化bean的方式 132
6.2.8 注入方式 135
6.2.9 实战:依赖注入的例子 137
6.2.10 依赖注入的详细配置 140
6.2.11 使用depends-on 144
6.2.12 延迟加载bean 145
6.2.13 自动装配 145
6.2.14 方法注入 147
6.2.15 bean scope 150
6.2.16 singleton bean与prototype bean 150
6.2.17 理解生命周期机制 151
6.2.18 基于注解的配置 152
6.2.19 基于注解的配置与基于XML的配置 157
6.3 AOP 157
6.3.1 AOP概述 158
6.3.2 AOP核心概念 158
6.3.3 Spring AOP 159
6.3.4 AOP代理 160
6.3.5 实战:使用@AspectJ的例子 160
6.3.6 基于XML的AOP 163
6.3.7 实战:基于XML的AOP的例子 164
6.4 资源处理 166
6.4.1 常用资源接口 166
6.4.2 内置资源接口实现 167
6.4.3 ResourceLoader 168
6.4.4 ResourceLoaderAware 168
6.4.5 资源作为依赖 169
6.5 表达式语言SpEL 169
6.5.1 表达式接口 170
6.5.2 对于bean定义的支持 171
6.5.3 实战:使用SpEL的例子 172
6.6 总结 177
6.7 习题 178
第7章 Spring测试 179
7.1 测试概述 179
7.1.1 传统的测试所面临的问题 179
7.1.2 如何破解测试面临的问题 180
7.1.3 测试类型 182
7.1.4 测试范围及比例 183
7.2 Mock对象 184
7.2.1 Environment 184
7.2.2 JNDI 184
7.2.3 Servlet API 184
7.3 测试工具类 184
7.3.1 测试工具 185
7.3.2 测试Spring Web MVC 185
7.4 测试相关的注解 185
7.4.1 @BootstrapWith 185
7.4.2 @ContextConfiguration 185
7.4.3 @WebAppConfiguration 186
7.4.4 @ContextHierarchy 187
7.4.5 @ActiveProfiles 187
7.4.6 @TestPropertySource 188
7.4.7 @DirtiesContext 188
7.4.8 @TestExecutionListeners 190
7.4.9 @Commit 190
7.4.10 @Rollback 190
7.4.11 @BeforeTransaction 191
7.4.12 @AfterTransaction 191
7.4.13 @Sql 191
7.4.14 @SqlConfig 191
7.4.15 @SqlGroup 192
7.4.16 Spring JUnit 4注解 192
7.4.17 Spring JUnit Jupiter注解 193
7.5 Spring TestContext框架 195
7.5.1 Spring TestContext框架概述 195
7.5.2 核心抽象 195
7.5.3 引导TestContext 197
7.5.4 TestExecutionListener配置 197
7.5.5 上下文管理 197
7.5.6 测试夹具的注入 198
7.5.7 如何测试request bean和session bean 199
7.5.8 事务管理 201
7.5.9 执行SQL脚本 204
7.6 Spring MVC Test框架 206
7.6.1 服务端测试概述 207
7.6.2 选择测试策略 208
7.6.3 设置测试功能 209
7.6.4 执行请求 209
7.6.5 定义期望 210
7.6.6 注册过滤器 212
7.6.7 脱离容器的测试 212
7.6.8 实战:服务端测试Spring Web MVC的例子 212
7.7 总结 216
7.8 习题 216
第8章 Spring事务管理 217
8.1 事务管理概述 217
8.1.1 Spring事务管理优势 217
8.1.2 全局事务与本地事务 218
8.1.3 Spring事务模型 218
8.2 通过事务实现资源同步 220
8.2.1 高级别的同步方法 220
8.2.2 低级别的同步方法 220
8.2.3 TransactionAwareDataSourceProxy 221
8.3 声明式事务管理 221
8.3.1 声明式事务管理 222
8.3.2 实战:声明式事务管理的例子 222
8.3.3 事务回滚 227
8.3.4 配置不同的事务策略 229
8.3.5 @Transactional详解 230
8.3.6 事务传播机制 232
8.4 编程式事务管理 233
8.4.1 TransactionTemplate 234
8.4.2 PlatformTransactionManager 234
8.4.3 声明式事务管理和编程式事务管理 235
8.5 总结 235
8.6 习题 235
第9章 MVC模式的典范的典范LINK \l "_T 236
9.1 Spring Web MVC概述 236
9.2 DispatcherServlet 236
9.2.1 DispatcherServlet概述 237
9.2.2 上下文层次结构 238
9.2.3 处理流程 239
9.2.4 拦截 240
9.3 过滤器 240
9.3.1 HTTP PUT表单 241
9.3.2 转发头 241
9.3.3 ShallowEtagHeaderFilter 241
9.3.4 CORS 242
9.4 控制器 242
9.4.1 声明控制器 242
9.4.2 请求映射 243
9.4.3 处理器方法 244
9.4.4 模型方法 247
9.4.5 绑定器方法 247
9.5 异常处理 247
9.5.1 @ExceptionHandler 248
9.5.2 框架异常处理 248
9.5.3 REST API异常 249
9.5.4 注解异常 249
9.5.5 容器错误页面 249
9.6 CORS处理 250
9.6.1 @CrossOrigin 250
9.6.2 全局CORS配置 252
9.6.3 自定义 252
9.6.4 CORS过滤器 253
9.7 HTTP缓存 253
9.7.1 缓存控制 253
9.7.2 静态资源 254
9.7.3 控制器缓存 254
9.8 MVC配置 255
9.8.1 启用MVC配置 255
9.8.2 类型转换 256
9.8.3 验证 257
9.8.4 拦截器 257
9.8.5 内容类型 258
9.8.6 消息转换器 259
9.8.7 视图控制器 260
9.8.8 视图解析器 260
9.8.9 静态资源 261
9.8.10 DefaultServletHttpRequestHandler 261
9.8.11 路径匹配 262
9.9 实战:基于Spring Web MVC的JSON类型的处理 263
9.9.1 接口设计 263
9.9.2 系统配置 263
9.9.3 后台编码实现 264
9.9.4 应用配置 265
9.9.5 运行应用 267
9.10 实战:基于Spring Web MVC的 XML类型的处理 268
9.10.1 接口设计 268
9.10.2 系统配置 268
9.10.3 后台编码实现 269
9.10.4 应用配置 270
9.10.5 运行应用 272
9.11 总结 273
9.12 习题 273
第10章 全能安全框架Spring Security 274
10.1 基于角色的权限管理 274
10.1.1 角色的概念 274
10.1.2 基于角色的访问控制 274
10.1.3 哪种方式更好 276
10.1.4 真实的案例 277
10.2 Spring Security概述 277
10.2.1 Spring Security的认证模型 277
10.2.2 Spring Security的安装 279
10.2.3 模块 280
10.2.4 Spring Security 5的新特性及高级功能 281
10.3 实战:基于Spring Security安全认证 284
10.3.1 添加依赖 284
10.3.2 添加业务代码 285
10.3.3 配置消息转换器 286
10.3.4 配置Spring Security 287
10.3.5 创建应用配置类 288
10.3.6 创建内嵌Jetty的服务器 288
10.3.7 应用启动器 289
10.3.8 运行应用 290
10.4 总结 291
10.5 习题 291
第11章 轻量级持久层框架MyBatis 292
11.1 MyBatis概述 292
11.1.1 安装MyBatis 292
11.1.2 MyBatis功能架构 293
11.1.3 MyBatis的优缺点 293
11.2 MyBatis四大核心组件 293
11.2.1 SqlSessionFactoryBuilder 294
11.2.2 SqlSessionFactory 295
11.2.3 SqlSession 295
11.2.4 Mapper 295
11.3 生命周期及作用域 296
11.3.1 SqlSessionFactoryBuilder 296
11.3.2 SqlSessionFactory 296
11.3.3 SqlSession 297
11.3.4 Mapper实例 297
11.4 总结 298
11.5 习题 298
第12章 MyBatis的高级应用 299
12.1 配置文件 299
12.1.1 properties 299
12.1.2 settings 301
12.1.3 typeAliases 304
12.1.4 typeHandlers 306
12.1.5 objectFactory 309
12.1.6 plugins 309
12.1.7 environments 310
12.1.8 transactionManager 311
12.1.9 dataSource 312
12.1.10 databaseIdProvider 314
12.1.11 mappers 315
12.2 Mapper映射文件 316
12.2.1 select 316
12.2.2 insert、update和delete 318
12.2.3 处理主键 320
12.2.4 sql 321
12.2.5 参数 322
12.2.6 结果映射 323
12.2.7 自动映射 325
12.2.8 缓存 326
12.3 动态SQL 328
12.3.1 if 328
12.3.2 choose、when和otherwise 329
12.3.3 trim、where和set 329
12.3.4 foreach 331
12.3.5 bind 331
12.3.6 多数据库支持 331
12.4 常用API 332
12.4.1 SqlSessionFactoryBuilder 332
12.4.2 SqlSessionFactory 334
12.4.3 SqlSession 335
12.4.4 注解 337
12.5 常用插件 339
12.5.1 MyBatis Generator 339
12.5.2 PageHelper 341
12.6 实战:使用MyBatis操作数据库 344
12.6.1 初始化表结构 344
12.6.2 添加依赖 344
12.6.3 编写业务代码 345
12.6.4 编写配置文件 347
12.6.5 编写测试用例 348
12.6.6 运行测试用例 351
12.7 总结 353
12.8 习题 354
第13章 模板引擎Thymeleaf 355
13.1 常用Java模板引擎 355
13.1.1 关于性能 355
13.1.2 为什么选择Thymeleaf而不是JSP 356
13.1.3 什么是Thymeleaf 359
13.1.4 Thymeleaf处理模板 359
13.1.5 标准方言 360
13.2 Thymeleaf标准方言 361
13.2.1 Thymeleaf标准表达式语法 361
13.2.2 消息表达式 362
13.2.3 变量表达式 363
13.2.4 表达式基本对象 364
13.2.5 表达式工具对象 364
13.2.6 选择表达式 365
13.2.7 链接表达式 366
13.2.8 分段表达式 366
13.2.9 字面量 367
13.2.10 算术运算 368
13.2.11 比较与相等 368
13.2.12 条件表达式 369
13.2.13 默认表达式 369
13.2.14 无操作标记 370
13.2.15 数据转换及格式化 370
13.2.16 表达式预处理 370
13.3 Thymeleaf设置属性值 370
13.3.1 设置任意属性值 371
13.3.2 设置值到指定的属性 371
13.3.3 同时设置多个值 372
13.3.4 附加和添加前缀 372
13.3.5 固定值布尔属性 372
13.3.6 默认属性处理器 373
13.3.7 支持对HTML 5友好的属性及元素名称 374
13.4 Thymeleaf迭代器与条件语句 374
13.4.1 迭代器 374
13.4.2 条件语句 377
13.5 Thymeleaf模板片段 378
13.5.1 定义和引用片段 378
13.5.2 Thymeleaf片段规范语法 379
13.5.3 不使用th:fragment 379
13.5.4 th:insert、th:replace和th:include三者的区别 379
13.6 Thymeleaf表达式基本对象 380
13.6.1 基本对象 380
13.6.2 Web上下文命名空间用于requestsession属性等 381
13.6.3 Web上下文对象 382
13.7 实战:基于Thymeleaf的Web应用 382
13.7.1 添加依赖 382
13.7.2 编写控制器 383
13.7.3 应用配置 384
13.7.4 编写Thymeleaf模板 387
13.8 总结 388
13.9 习题 388
第14章 锦上添花Bootstrap 389
14.1 Bootstrap概述 389
14.1.1 HTML 5 Doctype 390
14.1.2 响应式meta标签 390
14.1.3 Box-Sizing 390
14.1.4 Normalize.css 390
14.1.5 模板 391
14.2 Bootstrap核心概念 391
14.2.1 Bootstrap的网格系统 392
14.2.2 媒体查询 393
14.2.3 网格选项 394
14.2.4 移动设备及桌面设备 394
14.3 实战:基于Bootstrap的Web应用 395
14.3.1 引入Bootstrap库的样式 395
14.3.2 引入Bootstrap库的脚本 395
14.3.3 添加Bootstrap样式类 396
14.3.4 运行应用 397
14.4 总结 398
14.5 习题 398
第15章 REST客户端 399
15.1 RestTemplate 399
15.1.1 初始化 400
15.1.2 URI 400
15.1.3 请求头 401
15.1.4 消息体 401
15.2 WebClient 402
15.2.1 retrieve方法 402
15.2.2 exchange方法 403
15.2.3 请求体 403
15.2.4 生成器选项 405
15.2.5 过滤器 406
15.3 实战:基于RestTemplate的天气预报服务 406
15.3.1 添加依赖 406
15.3.2 后台编码实现 407
15.3.3 运行 412
15.4 实战:基于WebClient的文件上传和下载 414
15.4.1 添加依赖 414
15.4.2 文件上传的编码实现 414
15.4.3 文件下载的编码实现 415
15.4.4 运行 416
15.5 总结 416
15.6 习题 417
第16章 REST服务框架Jersey 418
16.1 REST概述 418
16.1.1 REST的基本概念 418
16.1.2 REST设计原则 419
16.1.3 成熟度模型 421
16.1.4 REST API管理 422
16.1.5 常用技术 425
16.2 实战:基于Jersey的REST服务 426
16.2.1 创建一个新项目 426
16.2.2 探索项目 426
16.2.3 运行项目 431
16.3 JAX-RS核心概念 434
16.3.1 根资源类(Root Resource Classes) 434
16.3.2 参数注解(@*Param) 437
16.3.3 子资源 440
16.4 实战:基于SSE构建实时Web应用 443
16.4.1 发布-订阅模式 444
16.4.2 广播模式 447
16.5 总结 450
16.6 习题 450
第17章 全双工通信WebSocket 451
17.1 WebSocket概述 451
17.1.1 HTTP与WebSocket对比 451
17.1.2 理解WebSocket的使用场景 452
17.2 WebSocket常用API 453
17.2.1 WebSocketHandler 453
17.2.2 WebSocket握手 454
17.2.3 部署 455
17.2.4 配置 456
17.2.5 跨域处理 458
17.3 SockJS 459
17.3.1 SockJS概述 459
17.3.2 启用SockJS 460
17.3.3 心跳 461
17.3.4 客户端断开连接 461
17.3.5 CORS处理 461
17.3.6 SockJsClient 462
17.4 STOMP 463
17.4.1 STOMP概述 463
17.4.2 启用STOMP 464
17.4.3 消息流程 466
17.4.4 处理器方法 468
17.4.5 发送消息 469
17.4.6 内嵌broker 470
17.4.7 外部broker 470
17.4.8 连接到broker 471
17.4.9 认证 471
17.4.10 用户目的地 472
17.4.11 事件和拦截 472
17.4.12 STOMP客户端 474
17.4.13 WebSocket Scope 474
17.4.14 性能优化 475
17.5 实战:基于STOMP的聊天室 477
17.5.1 聊天室项目的概述 477
17.5.2 设置broker 478
17.5.3 服务端编码 479
17.5.4 客户端编码 482
17.5.5 运行 486
17.6 总结 487
17.7 习题 487
第18章 消息通信JMS 488
18.1 JMS概述 488
18.1.1 常用术语 488
18.1.2 使用场景 489
18.1.3 JMS规范优势 489
18.1.4 常用技术 490
18.2 Spring JMS 490
18.2.1 JmsTemplate 490
18.2.2 连接管理 491
18.2.3 目的地管理 491
18.2.4 消息监听器容器 492
18.2.5 事务管理 492
18.3 发送消息 493
18.3.1 使用消息转换器 494
18.3.2 回调 494
18.4 接收消息 494
18.4.1 同步接收 494
18.4.2 异步接收 495
18.4.3 SessionAwareMessageListener 495
18.4.4 MessageListenerAdapter 496
18.4.5 处理事务 497
18.5 基于注解的监听器 498
18.5.1 启用基于注解的监听器 498
18.5.2 编程式端点注册 499
18.5.3 基于注解的端点方法签名 499
18.5.4 响应管理 500
18.6 JMS命名空间 500
18.7 实战:基于JMS的消息发送和接收 501
18.7.1 项目概述 501
18.7.2 配置 502
18.7.3 编码实现 505
18.7.4 运行 510
18.8 总结 514
18.9 习题 514
第19章 消息通知Email 515
19.1 Email概述 515
19.1.1 Email的起源 515
19.1.2 Spring框架对于Email的支持 516
19.2 实现发送Email 516
19.2.1 MailSender和SimpleMailMessage的基本用法 516
19.2.2 JavaMailSender和MimeMessagePreparator的用法 518
19.3 使用MimeMessageHelper 519
19.3.1 发送附件和内联资源 519
19.3.2 使用模板创建Email内容 520
19.4 实战:实现Email服务器 520
19.4.1 项目概述 520
19.4.2 Email服务器编码实现 521
19.4.3 格式化Email内容 523
19.4.4 运行 524
19.5 总结 525
19.6 习题 525
第20章 任务执行与调度 526
20.1 任务执行与调度概述 526
20.2 TaskExecutor 526
20.2.1 TaskExecutor类型 527
20.2.2 使用TaskExecutor 527
20.3 TaskScheduler 528
20.3.1 Trigger接口 529
20.3.2 实现 529
20.4 任务调度及异步执行 530
20.4.1 启用调度注解 530
20.4.2 @Scheduled 530
20.4.3 @Async 531
20.4.4 @Async的异常处理 532
20.4.5 命名空间 532
20.5 使用Quartz Scheduler 533
20.5.1 使用JobDetailFactoryBean 533
20.5.2 使用MethodInvokingJobDetailFactoryBean 534
20.6 实战:基于Quartz Scheduler天气预报系统 535
20.6.1 项目概述 535
20.6.2 后台编码实现 536
20.6.3 运行 538
20.7 总结 539
20.8 习题 540
第21章 高性能之道缓存 541
21.1 缓存概述 541
21.2 声明式缓存注解 542
21.2.1 @Cacheable 542
21.2.2 @CachePut 543
21.2.3 @CacheEvict 543
21.2.4 @Caching 543
21.2.5 @CacheConfig 544
21.2.6 启用缓存 544
21.2.7 使用自定义缓存 545
21.3 JCache 545
21.3.1 JCache注解概述 545
21.3.2 与Spring缓存注解的差异 546
21.4 基于XML的声明式缓存 546
21.5 配置缓存存储 547
21.5.1 基于JDK的缓存 547
21.5.2 基于Ehcache的缓存 547
21.5.3 基于Caffeine的缓存 548
21.5.4 基于GemFire的缓存 548
21.5.5 基于JSR-107的缓存 548
21.6 实战:基于缓存的天气预报系统 548
21.6.1 项目概述 549
21.6.2 后台编码实现 549
21.6.3 缓存配置 550
21.6.4 运行 551
21.7 总结 551
21.8 习题 551
第22章 微服务基石Spring Boot 552
22.1 从单块架构到微服务架构 552
22.1.1 单块架构的概念 552
22.1.2 单块架构的优缺点 553
22.1.3 如何将单块架构进化为微服务 554
22.2 微服务设计原则 555
22.2.1 拆分足够微 555
22.2.2 轻量级通信 556
22.2.3 领域驱动原则 556
22.2.4 单一职责原则 556
22.2.5 DevOps及两个比萨 557
22.2.6 不限于技术栈 557
22.2.7 可独立部署 558
22.3 Spring Boot概述 558
22.3.1 Spring Boot产生的背景 559
22.3.2 Spring Boot的目标 560
22.3.3 Spring Boot与其他Spring应用的关系 560
22.3.4 Starter 561
22.4 实战:开启第一个Spring Boot项目 563
22.4.1 通过Spring Initializr初始化一个Spring Boot原型 563
22.4.2 用Maven编译项目 565
22.4.3 探索项目 567
22.4.4 编写REST服务 571
22.5 总结 572
22.6 习题 572
第23章 微服务治理框架Spring Cloud 574
23.1 Spring Cloud概述 574
23.1.1 什么是Spring Cloud 575
23.1.2 Spring Cloud与Spring Boot的关系 575
23.2 Spring Cloud入门配置 576
23.2.1 Maven配置 576
23.2.2 Gradle配置 577
23.2.3 声明式方法 577
23.3 Spring Cloud子项目介绍 578
23.4 实战:实现微服务的注册与发现 580
23.4.1 服务发现的意义 580
23.4.2 如何集成Eureka Server 581
23.4.3 如何集成Eureka Client 584
23.4.4 实现服务的注册与发现 588
23.5 总结 588
23.6 习题 589
附录 本书所涉及的技术及相关版本 590
参考文献 591
|
內容試閱:
|
写作背景
随着云计算的普及、Cloud Native应用开发模式将会深入人心,这意味着未来的应用将会朝着快速迭代、分布部署、独立运行等方面发展,敏捷、轻量的框架也必将会受到更多开发者的青睐。这也是为什么传统的Java EE所提供的规范未被广大互联网公司所采用,反而是诸如Spring框架、Spring Web MVC、Spring Security、MyBatis等反传统的轻量级开发模式深入人心。所谓轻量,指的是抛弃墨守成规、面向规范的臃肿开发方式,转而采用开源的、重视解决具体问题的技术框架。
本书主要介绍Java EE企业级开发所需要的轻量级的开源技术栈,涉及Maven、Servlet、Jetty、Tomcat、Spring框架、Spring Web MVC、Spring Security、MyBatis、MySQL、Thymeleaf、Bootstrap、REST客户端、Jersey、WebSocket、JMS、Email、任务执行与调度、缓存、Spring Boot、Spring Cloud等方面的内容,这些都是当今互联网公司主流的应用技术,经受住了大规模商业实践的考验。本书内容编排由浅入深,案例丰富,特别适合基础薄弱或者缺乏实战经验的学生和软件开发人员阅读。
本书每章的最后都安排了一个习题环节,既是对当前章节的内容回顾,又可作为公司面试习题。
源代码下载
本书提供源代码下载,可以扫描以下二维码下载:
另外,也可以使用Github下载:
https:github.comwaylaujava-ee-enterprise-development-samples
如果你在下载过程中遇到问题,可发送邮件至booksaga@126.com获得帮助,邮件标题为轻量级Java EE企业应用开发实战。
本书所涉及的技术和相关版本
技术的版本是非常重要的,因为不同版本之间存在兼容性问题,而且不同版本的软件所对应的功能也是不同的。本书所列出的技术在版本上相对较新,都是经过笔者大量测试的。这样读者在编写代码时可以参考本书所列出的版本,从而避免版本兼容性所产生的问题。建议读者将相关开发环境设置得跟本书一致,或者不低于本书所列的配置。详细的版本配置可以参阅本书附录中的内容。
本书示例采用Eclipse编写,但示例源代码与具体的IDE无关,读者可以选择适合自己的IDE,如IntelliJ IDEA、NetBeans等。运行本书的示例,需要确保JDK版本不低于JDK 8。
勘误
本书如有勘误,会在https:github.comwaylaujava-ee-enterprise-development-samplesissues 上发布。笔者在编写本书的过程中已竭尽所能地为读者呈现较好、较全的实用功能,但疏漏之处在所难免,欢迎读者批评指正。
致谢
感谢清华大学出版社的各位工作人员为本书的出版所做的努力。
感谢我的父母、妻子和两个女儿。由于撰写本书牺牲了很多陪伴家人的时间,在此感谢家人对我的理解和支持。
柳伟卫
2021年2月
|
|