编辑推荐
Spring MVC是一个面向Web应用的轻量级框架。作为Spring框架的一部分,它天然扩展了Spring并为Web相关问题提供了一致的解决方案。
通过设计Maven模块,你将会实现一个企业级、无状态的REST应用。本书的独特之处在于从Spring生态圈中收集了大量的实用开发技术。你将会通过超媒体与HATEOAS来实现客户与产品之间的无状态会话,并掌握如何配置基于WebSocket的消息服务。最后,你将会学到如何创建并组织不同层次的自动化测试。
■ 使用Maven构建项目,并创建自测试、领域特定、可部署的Web归档。
■ 使用AngularJS与Bootstrap为响应式与强大的前端生成模板。
■ 构建高性能、无状态的RESTful与超媒体应用来支持多客户体验。
■ 使用BASIC认证模式与OAuth2通过REST进行认证。
■ 使用Swagger与Swagger UI来文档化并发布REST API。
■ 实现Spring Web应用的可伸缩。
■ 通过WebSocket与STOMP消息进行通信。
内容简介
《Spring MVC实战》由浅入深地介绍了当今流行的Java Web框架Spring MVC的方方面面,从基础的环境搭建到微服务设计与架构,再到持久化、REST API构建、认证与测试……涵盖了Spring MVC诸多重要且常用的特性。值得一提的是,《Spring MVC实战》针对Spring MVC的每一项特性都提供了完整可运行的示例代码,可以帮助读者更好地掌握这项技术。
无论是Spring MVC的初学者,还是拥有一定经验的开发人员,都能够从《Spring MVC实战》中获得启发,更好地理解Spring MVC这一Web开发“利器”。
作者简介
Alex Bretet,是一位知名的Java 与Spring 集成工程师,目前就职于Thunderhead,这是一家全球知名的SaaS 提供商。他拥有能源、保险、财务与互联网等多个领域的丰富开发经历。受到互联网通信能力与诸多初创公司的感染,他深信开发所能带来的价值(志趣相同的一帮人能在很短的时间内实现令人难以置信的目标)。他还是开源,特别是Spring 的拥护者,其实用主义持续不断地“瓦解”着现有的做法,并提供了颇具价值的替代方法。可以通过alex.bretet@gmail.com 与作者取得联系,或者在Twitter 上关注@abretet。
目录
1 企业级Spring应用的搭建.1
引言 1
安装Eclipse JEE开发者版本与Java SE 82
为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
定义通用WebContentInterceptor82
使用AngularJS设计客户端MVC模式88
3 Java持久化与实体100
引言 100
在Spring中配置Java持久化API 101
定义有用的EJB3实体和关系105
使用JPA与Spring Data JPA 115
4 为无状态架构构建REST API122
引言 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 Surefire进行单元测试 357
使用Cargo、Rest-assured和Maven Failsafe进行集成测试 364
在集成测试中注入Spring Bean 373
使用Log4j2记录日志的现代应用 377
前言/序言
欢迎阅读这本独一无二的《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相关的几个概念与实践,例如过滤器链、 命名空间、认证管理器,以及角色与用户的管理等。我们的 OAuth2流是个客户端实现。我们在用户首次使用第三方提供者 Yahoo! 时在应用中对其进行认证。这些 Yahoo! 的认证与连接信息稍后会被用于从 Yahoo! Finance中拉取最新的财经数据。借助于 Spring Social库,我们可以在后台对 OAuth2实现完全的抽象化。
6 实现 HATEOAS
本章介绍了如何将 RESTful Spring MVC API更进一步。超媒体驱动的应用为每个单独的请求资源都提供了链接,这些链接反映了相关资源的 URL。它们向客户端(无论是何种类型的客户端)提供了实时的导航选择—精确的文档,同时也是实际的实现。该章将会介绍如何通过 JPA实体关联或控制器层来构建这种链接。
7 开发 CRUD操作与校验
本章介绍更加高级的 Spring MVC概念,通过认识支持交互式 HTTP方法( PUT、POST 与 DELETE)的工具与技术,我们将学习如何使用 HTTP1/1规范( RFC 7231语义与内容)来返回恰当的响应状态码与头信息。
本章通过 Spring Validator与 ValidationUtils辅助类的搭配使用来提供与验证相关的 JSR-303和 JSR-349规范的兼容实现。该章的最后一节将会介绍消息与内容的国际化( I18N)。我们还通过 AngularJS提供了一个客户端实现,使用了已发布的国际化 Web Services。
8 通过 WebSocket与 STOMP进行通信
本章将会聚焦于“冉冉升起”的 WebSocket技术,并为我们的应用构建面向消息的中间件。该章提供了一个大家很少会见到的示例,通过 Spring实现了关于 WebSockets的大部分内容,从默认的嵌入式 WebSocket消息代理的使用,到特性完备的外部代理(借助于 STOMP与 AMQP协议)。我们将会了解如何向多个客户端广播消息,以及如何通过优秀的可伸缩特性推迟耗时任务的执行。
通过本章你还将学到如何动态创建私有队列,以及如何获取认证客户端并通过这些私有队列与其收发消息。
为了实现 WebSocket认证与消息认证,我们将 API置为有状态的。对于有状态来说,我们要知道的是 API将会使用 HTTP会话在多个请求间保持用户的认证状态。借助于 Spring Session与高度集群化的 Redis服务器的支持,会话将可以在多个 Web应用间共享。
9 测试与故障排除
本章介绍了一套用于维护、调试与改进应用状态的工具与一般做法。作为本书的最后一部分内容,我们将会学习如何通过 Flyway Maven Plugin将数据库模式从一个应用版本升级为另一个,并将其作为 Maven构建的一部分。我们还会学习如何编写自动化单元测试(借助于 Maven Sure.re与 Mockito)与集成测试(使用一套库,例如 Cargo、Rest-assured与 Maven Failsafe)。
该章的最后一节介绍了将 Log4j2作为全局日志框架的做法,无论什么环境,我们都可以通过这一日志解决方案来高效排错。
书中多个章节都列出了系统需要具备的硬件与软件条件。而且,学习本书经常需要访问互联网资源,有不少扩展内容都给出了链接,或者需要下载必备软件。此外更加重要的是,本书使用 Git版本系统来管理每章的代码基,本地的 Git仓库需要对应于项目的远程仓库(位于 GitHub上),要能够访问这个远程仓库。
本书的示例支持三种操作系统: MS Windows、Linux与 Mac OS X。对于硬件平台,推荐使用主流、高性能的工作站,最低 2 GB内存, 500 MB以上空闲硬盘空间。
在编写本书时,作者的一个目标就是一方面尽量保持内容的可读性,另一方面则尽量多地向读者介绍现代 Web开发的实践。
我们相信,对 Spring MVC感兴趣的大多数读者的主要目的在于寻求一个入门套件和工具箱,来开发现代、基于 Spring的 Web应用。我们还相信,大多数读者都倾向于通过实践而非理论来强化对概念的理解。当下,我们都知道人们具有不同的学习习惯与方式。
鉴于此,本书的各个章节都是逐步推进的,从直观的第 1章到更具挑战性的第 8章。相比后面的章节来说,前几章更适合大多数 Java开发者。
话虽如此,本书却几乎包含了你所要的一切!本书配套的示例应用已经处于运行状态,等待着你的探索,理解其工作方式。
一般来说,我们假定你是一名具有 Web开发经验的 Java开发者。此外,我们期望你对学习 Spring Web技术拥有浓厚的兴趣。
Spring MVC实战 下载 mobi epub pdf txt 电子书 格式
评分
☆☆☆☆☆
经常网购,懒得评价,每个月京东,**花掉一大笔,评价完了有东西送吗?要是能返点就好了!经常网购,懒得评价,每个月京东,**花掉一大笔,评价完了有东西送吗?要是能返点就好了!经常网购,懒得评价,每个月京东,**花掉一大笔,评价完了有东西送吗?要是能返点就好了!
评分
☆☆☆☆☆
京东大型互联网公司高级程序员亲自写的,非常值得仔细研究和学习的书,希望对自己的技术成长有提升。
评分
☆☆☆☆☆
包装、质量都很好,不过得先看Spring Boot
评分
☆☆☆☆☆
汉 语:我来打酱油。 英 语:it's none of my business .i come to buy some sauce. 德 语:ich bezogen, was ich kam zu einer soja-so?e. 法 语:je lis ce qui, j'en suis arriv une sauce de soja. 荷 兰 语:ik gerelateerd wat, kwam ik tot een sojasaus. 俄 语:я,касающихся того, что я пришел к соевым соусом. 西班牙语:relacionados con lo que yo, me vino a un salsa de soja. 意大利语:i relativi cosa, sono venuto a una salsa di soia. 日 本 语:私関连したどのような、私がして醤油. 希 腊 语:i σχετικ? ? τι ? ρθα σε μια σ? λτσα σ? για?
评分
☆☆☆☆☆
经常网购,总有大量的包裹收,感觉写评语花掉了我大量的时间和精力!所以在一段时间里,我总是不去评价或者随便写写!但是,我又总是觉得好像有点对不住那些辛苦工作的卖家客服、仓管、老板。于是我写下了一小段话,给我觉得能拿到我五星好评的卖家的宝贝评价里面以示感谢和尊敬!首先,宝贝是性价比很高的,我每次都会先试用再评价的,虽然宝贝不一定是最好的,但在同等的价位里面绝对是表现最棒的。京东的配送绝对是一流的,送货速度快,配送员服务态度好,每样东西都是送货上门。希望京东能再接再厉,做得更大更强,提供更多更好的东西给大家。为京东的商品和服务点赞
评分
☆☆☆☆☆
多读书,好多细节东西还是书里有
评分
☆☆☆☆☆
这本书真的很值得一读,作者在构建亿级流量网站过程中,将其所有的实践经验都写到这本书里面。刚买了就连续看了大概整本书的1/4,很受益。至少我觉得,这本书真是为了分享经验,传播知识,不像有的人为了凑页数卖钱。而且也间接了解过作者,书如其人,技术高手。
评分
☆☆☆☆☆
很不错,印刷质量和纸张都不错。希望有助于我架构师工作的开始。mark一下。如果说早点能加入电商领域的架构师工作,或许我也能写成这本书。同行们是否认同?呵呵(^_^)买它没错。
评分
☆☆☆☆☆
真的非常好,已经买过多次了,京东发货速度更是一流!用着放心!感谢感谢,感激之情如同滔滔江水连绵不绝,波澜起伏,我早已经认准了京东,大小物件全都上京东买,吃的喝的也上京东买,快递真是一流,又块又方便,直接送到楼下,前段时间还成了京东的Plus会员,活动就更多了啦,总之我每天早晨打开手机第一件事就是来京