描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121311116
通过设计Maven模块,你将会实现一个企业级、无状态的REST应用。本书的独特之处在于从Spring生态圈中收集了大量的实用开发技术。你将会通过超媒体与HATEOAS来实现客户与产品之间的无状态会话,并掌握如何配置基于WebSocket的消息服务。*后,你将会学到如何创建并组织不同层次的自动化测试。
■ 使用Maven构建项目,并创建自测试、领域特定、可部署的Web归档。
■ 使用AngularJS与Bootstrap为响应式与强大的前端生成模板。
■ 构建高性能、无状态的RESTful与超媒体应用来支持多客户体验。
■ 使用BASIC认证模式与OAuth2通过REST进行认证。
■ 使用Swagger与Swagger UI来文档化并发布REST API。
■ 实现Spring Web应用的可伸缩。
■ 通过WebSocket与STOMP消息进行通信。
1 企业级Spring应用的搭建. ………………………………….1
引言 ………………………1
安装Eclipse JEE开发者版本与Java SE 8 ……………………….2
为Eclipse配置Java 8、Maven 3和Tomcat 8 ……………………5
定义Maven的项目结构 ………………………………………………12
安装Spring、Spring MVC和Web结构 ………………………….24
2 使用Spring.MVC设计微服务架构. …………………….35
引言 …………………….35
使用简单URL映射配置控制器 …………………………………..36
使用ViewResolver配置回退控制器 ……………………………..49
使用Bootstrap创建并自定义响应式单页面Web设计…….53
使用JSTL在视图中显示模型 ………………………………………72
定义通用WebContentInterceptor ………………………………….82
使用AngularJS设计客户端MVC模式 ………………………….88
3 Java持久化与实体………………………………………..100
引言 …………………..100
在Spring中配置Java持久化API …………………………………101
定义有用的EJB3实体和关系 …………………………………….105
使用JPA与Spring Data JPA ……………………………………….. 115
4 为无状态架构构建REST.API…………………………..122
引言 …………………..122
绑定请求与编排响应 ……………………………………………….123
配置内容协商(JSON与XML等) ……………………………133
添加分页、过滤器与排序功能 …………………………………138
全局处理异常 …….149
使用Swagger生成文档与公开API……………………………..156
5 使用Spring.MVC进行认证…………………………….163
引言 …………………..163
配置Apache HTTP服务器来代理Tomcat服务器 …………163
修改用户和角色以适应Spring Security ……………………..172
基于BASIC的认证方式…………………………………………….183
第三方OAuth2认证 ………………………………………………….193
在REST环境中保存认证信息…………………………………… 211
服务与控制器授权 …………………………………………………..220
6 实现HATEOAS…………………………………………….235
引言 …………………..235
将DTO改造成Spring HATEOAS资源 ………………………..236
为超媒体驱动的API创建链接 …………………………………..244
JPA实体的暴露策略 …………………………………………………252
通过OAuth从第三方API获取数据…………………………….259
7 开发CRUD操作与校验…………………………………..266
引言 …………………..266
为所有HTTP方法扩展REST处理程序……………………….267
使用Bean Validation校验资源 ……………………………………278
REST消息与内容的国际化……………………………………….292
使用HTML5和AngularJS校验客户端表单 …………………302
8 通过WebSocket与STOMP进行通信……………….308
引言 …………………..308
通过基于SockJS的STOMP使社交事件流媒体化 ……….309
使用RabbitMQ作为多协议消息代理 …………………………322
将任务放入RabbitMQ并通过AMQP消费任务……………328
通过Spring Session和Redis保证消息安全 ………………….334
9 测试与故障排除. ……………………………………………351
引言 …………………..351
通过Flyway实现数据库迁移自动化 ………………………….352
使用Mockito和Maven Sure.re进行单元测试 ……………..357
使用Cargo、Rest-assured和Maven Failsafe进行集成测试 ………………………………………………..364
在集成测试中注入Spring Bean …………………………………373
使用Log4j2记录日志的现代应用 ………………………………377
译者序
毋庸置疑, Spring现在已经成为 Java企业级开发事实上的标准。同时, Spring也早已从初的单一 IoC与 AOP框架发展成为一站式的开发平台,例如流行的 Spring Batch、Spring Boot、Spring Cloud、Spring Data、Spring Security及 Spring Kafka等。围绕着 Spring的生态圈也异常繁荣。在 Spring所提供的诸多基础项目中, Spring MVC可谓一枝独秀。虽然相较于 Struts、JSF等 Java Web框架与标准,Spring MVC出现时间较晚,但凭借着 Spring强大的社区与开发者的支持, Spring MVC现已在全世界各大互联网公司与传统企业中得到了极为广泛的应用,其发展势头要远远超过其他先行者。这与 Spring MVC向开发者所提供的各项“开箱即用”特性、对于 Web开发的强有力支持以及与 Spring框架的天然整合是密不可分的。
本书是一本专门介绍 Spring MVC的专著,由浅入深地介绍了 Spring MVC方方面面的功能与特性,从一开始的环境搭建到微服务设计与架构,再到持久化、 REST API构建、认证、对 WebSockets与 STOMP的支持以及测试……详尽介绍了 Spring MVC在软件开发各个领域的应用与实现。
全书共分为 9章,每章都单独讲述一个主题,因此并不要求读者按照顺序逐章阅读;相反,读者可以根据自身情况选择感兴趣的章节阅读并学习。对于缺乏 Spring MVC经验的开发者来说,建议从第 1章开始按照顺序学习,以实现好的学习效果。
Spring MVC本身是个庞杂的主题,这是因为框架本身涉及了太多的领域与设计理念,对于初学者来说难免陷入具体细节而无法脱身。本书独辟蹊径,从功能角度对全书章节进行划分,每章讲解 Spring MVC所支持的一个重要概念与领域。通过这种方式,学习者可以有针对性地学习 Spring MVC所提供的方方面面的特性。此外,本书的另一个特色是示例代码丰富,每个主题均提供相关可运行的示例代码供读者学习与参考,这是一种非常棒的学习方式。而且,很多章节后还提供了延伸内容供学习者进一步提升水平。相信通过循序渐进的学习,当阅读完本书并实现书中所提供的各项示例代码后,读者会完全掌握 Spring MVC的各项功能特性并能投入到实际的项目开发中。值得一提的是,除了 Spring MVC之外,本书还对其他相关的技术领域进行了较为详尽的介绍,例如 Angular、Bootstrap、WebSockets、测试等,这些都是使用 Spring MVC进行项目开发时或多或少会使用到的一些技术与框架。相信通过对这些技术的学习,读者所掌握的技能将会超越 Spring MVC本身。翻译技术图书是一项艰苦的劳动,这不仅涉及大量脑力的付出,还有体力上的消耗。作为译者,我们的心愿就是为读者提供准确的翻译,为读者带来切实的帮助。这个目标也在翻译过程中不断提醒着我们,要对得起原书作者的倾情创作,要对得起各位读者的信任。因此,我们在整个翻译过程中,丝毫不敢懈怠,目的就是为了保证译稿的质量。本书由张龙、丁涛、李哲与覃璐共同翻译完成,张龙完成了后的统稿与校对工作。这里要特别感谢电子工业出版社的张春雨老师与刘舫老师,二位老师在专业素养与团队协作方面展现出了极高的专业性,确保了本书的翻译工作能够顺利完成。每次与二位老师沟通都非常顺畅,同时进一步确保了译稿的质量。虽已尽心尽力,奈何技术与文字水平有限;虽已校对多次,但依然不敢保证全书没有任何错误。因此,读者在阅读本书的过程中如果发现任何问题都请不吝赐教。可以通过邮箱 与译者联系,以期图书再版时改进。后,衷心期望本书能给希望系统学习 Spring MVC的读者朋友们带来切实的帮助,帮助大家快速掌握这一流行的 Java Web开发框架。
张龙2017-02-15于北京
致谢
首先,我要对与本书直接相关的所有人表示感谢,这包括所有审校者、内容编辑、技术与组稿编辑等。
我想到了曾经就读的法语工程学院以及在那里遇到的人们,他们对于技术展现出了浓厚的热情。
非常高兴能从事 IT行业。感谢身边支持我在这个方向发展的所有人和物。当我在这个领域的兴趣不断增长时,我真的没想到自己会从事这个职业。
编写这本书是一个旷日持久的项目。必须要提一下我的搭档 Helena,感谢她在这几个月的时间内的耐心以及对我的支持;我的家人与朋友们不断鼓励我;我的父亲则是我的灵感之源。
深的感谢要献给出版社,感谢他们出版了这本书并认可这个项目。感谢来自于 Pivotal Software, Inc与 Spring社区的工程师们所给出的专家建议,感谢他们提供的易读的文档与官方参考。
后,我想要感谢正在阅读这些文字并且可能已经购买了本书的你们,我希望这本书能给你们带来切实的帮助。
关于审校者
David Mendoza是一位软件工程师,他从 1999年就开始从事 Java Web开发了。他的开发之路始于 JSP与 Servlet,并创建了自定义的 Web框架。后来他发现了 AppFuse,这将其带入 Spring与 Struts的世界。接下来,他又转向了 Spring MVC并且再也不想回到过去了。作为一名 Java顾问, David的足迹遍及墨西哥、美国、加拿大、委内瑞拉、西班牙等国家,与荷兰国际银行、花旗集团及西班牙电信公司都有过合作。他目前供职于西南复临大学,这是一家位于得克萨斯州达拉斯南部的私立大学,他主要负责整个 Web平台的建设工作。
前言
欢迎阅读这本独一无二的《Spring MVC实战》,希望你已经为本书的探索之旅做好了准备,本书会带你畅游现代 Spring Web开发实践。本书作者已经创建了 cloudstreetmarket.com网站,这是一个带有社交功能的股票交易平台,本书将会带领你探索网站开发过程的每一步。
1 企业级 Spring应用的搭建
本章介绍了业界的一套标准实践,从配置 Eclipse IDE以对 Java 8、Tomcat 8、GIT与 Maven提供更优化的支持,到理解 Maven作为一个构建自动化工具以及作为一个依赖管理工具的认识,阅读本章后你将会了解如何在一个坚实的基础上部署 Spring框架。
无论一个项目旨在成为一个能够获得丰厚利润的产品,抑或仅仅是一个练习,都是从相同的企业级模式开始的。
本章并不仅仅是开发 Cloud Street Market应用的个阶段,还为面向企业级 Spring应用的开发者提供了大量的标准化实践。
2 使用 Spring MVC设计微服务架构
本章内容有些多,介绍了 Spring MVC的核心原则,比如请求流与 DispatcherServlet的中心角色,还介绍了如何通过与控制器相关的注解来配置 Spring MVC控制器与控制器方法处理器。
在微服务架构的搭建过程中,我们在各个模块与 Web项目中安装了 Spring与 Spring MVC,用于构建易于部署且可伸缩的功能性单元。从这个视角来看,我们通过一个 Web模块来构建应用,该模块负责提供一个 Twitter Bootstrap模板,同时与另一个专门用作 REST Web Services的 Web模块搭配使用。
本章将介绍如何通过 JSTL将模型从控制器传递给 JSP视图,以及如何通过 AngularJS来设计 JavaScript MVC模式。
3 Java持久化与实体
本章介绍了持久化相关的内容。在这个阶段,了解如何在 Spring生态圈以及 Spring MVC应用中处理持久化数据很有必要。该章将介绍如何在 Spring中通过 dataSource与 entityManagerFactory来配置 JPA持久化提供者( Hibernate)。你将学习如何从 EJB3实体来构建好处极多的 JPA对象关系映射,接下来会学习如何通过 Spring Data JPA来查询仓库。
4 为无状态架构构建 REST API
本章揭示了如何将 Spring MVC作为 REST Web Services引擎。我们将会看到框架对此所提供的令人惊叹的支持,只需为抽象的与 Web相关的逻辑的方法处理器提供几个注解即可,这样我们就可以将主要精力放在业务上了。这个原则也用在了请求绑定(参数、 URL路径与头信息绑定等)与响应编排注解方面,同时在 Spring Data的集成支持上也用到了。
本章还介绍了如何创建作为 Spring MVC一部分的异常处理器来将预定义的异常类型转换为通用的错误响应。你将学到如何配置内容协商(这是 REST APIs的重要内容),后还将学习如何通过 Swagger与 Swagger UI来公开并文档化 REST端点信息。
5 使用 Spring MVC进行认证
本章介绍了如何在控制器与服务层对 HTTP BASIC与 OAuth2等标准协议配置认证。你将学习与 Spring Security相关的几个概念与实践,例如过滤器链、 <http>命名空间、认证管理器,以及角色与用户的管理等。我们的 OAuth2流是个客户端实现。我们在用户首次使用第三方提供者 Yahoo! 时在应用中对其进行认证。这些 Yahoo! 的认证与连接信息稍后会被用于从 Yahoo! Finance中拉取的财经数据。借助于 Spring Social库,我们可以在后台对 OAuth2实现完全的抽象化。
6 实现 HATEOAS
本章介绍了如何将 RESTful Spring MVC API更进一步。超媒体驱动的应用为每个单独的请求资源都提供了链接,这些链接反映了相关资源的 URL。它们向客户端(无论是何种类型的客户端)提供了
评论
还没有评论。