具体描述
《Grails权威指南》译自由Grails项目负责人Graeme Keith Rocher编写的《The Definitive Guide to Grails》,着重介绍了如何在Grails框架下使用Groovy语言进行敏捷的Web开发。本书详细讲解Grails开发的全部过程,包括项目构架、控制器与视图、与关系数据库之间的ORM映射,以及与Ajax和Java平台的无缝集成。同时该书也揭示了Grails对Java Web开发领域极大的推动作用。
作者简介
目录信息
1.1 Java的困惑
1.2 Webc2.0时代
1.3 Java的力量
1.4 什么是Grails
1.4.1 与Java集成
1.4.2 简单而强大
1.4.3 吸取的经验教训
1.5 使用Grails的原因
1.6 Grails入门
1.6.1 运行Grails命令
1.6.2 义不容辞的“HellocWorld!”
1.7 单元测试
1.8 本章小结
第2章 Groovy动态语言
2.1 Groovy和Java的异同
2.1.1 相同点
2.1.2 不同点
2.2 基础知识
2.1.1 类声明
2.2.2 语言级断言(Assertion)
2.2.3 Groovy字符串
2.2.4 闭包(Closures)
2.2.5 列表(List)和映射(Map)
2.2.6 Expando动态对象
2.2.7 范围(Range)
2.3 Groovy的高级特性
2.3.1 一切都是对象
2.3.2 元编程(Metaprogramming)
2.3.3 生成器(Builder)
2.4 本章小结
第3章 Grails工程基础架构
3.1 Grails工程结构
3.2 Grails和MVC模式
3.2.1 MVC中的模型(M)
3.2.2 MVC中的视图(V)
3.2.3 MVC中的控制器(C)
3.2.4 除MVC之外的其他部分
3.3 Grails支持多种环境
3.4 数据源配置
3.4.1 支持的数据库
3.4.2 配置自定义方言(Dialect)
3.5 引导Grails应用程序
3.6 配置日志(Logging)
3.6.1 启用SQL日志
3.6.2 日志记录(Logging)和环境
3.7 Grails命令行工具
3.7.1 在不同的端口上运行Grails应用程序
3.7.2 打包war存档文件(WARcArchive)
3.8 使用Grails控制台(Console)及命令解释程序(Shell)
3.8.1 使用命令行Shell
3.8.2 Grails控制台(Console)
3.9 IDE集成
3.9.1 安装Groovy-Eclipse插件
3.9.2 导入Grails工程
3.9.3 在Eclipse中运行Grails应用程序
3.10 本章小结
第4章 Grails中的域(Domain)
4.1 简化的ORM和Grails对象关系映射(GORM)
4.2 GORM基础
4.3 设置属性可选
4.4 GORM中的关系
4.5 执行CRUD操作
4.5.1 创建书签
4.5.2 读取书签
4.5.3 更新书签
4.5.4 删除书签
4.6 查询领域模型(DomaincModel)
4.6.1 使用get方法和exists方法进行基本查询
4.6.2 列举(Listing),70排序(Sorting)以及合计(Counting)
4.6.3 用动态查找器(Finder)查询
4.6.4 使用HQL进行查询
4.6.5 按样本(Example)查询
4.6.6 使用条件(Criteria)查询
4.7 映射继承
4.8 验证领域(Domain)模型
4.8.1 使用域约束(Domainonstraints)
4.8.2 验证约束(Constraints)
4.8.3 自定义约束(Constraints)
4.8.4 回顾更新操作
4.9 本章小结
第5章 脚手架(Scaffolding)
5.1 动态脚手架
5.1.1 创建操作(Create)
5.1.2 读取操作(Read)
5.1.3 更新操作(Update)
5.1.4 删除操作(Delete)
5.1.5 重写(Overriding)CRUD操作
5.1.6 使用约束自定义字段.
5.2 静态脚手架
5.2.1 生成控制器(Controller)
5.2.2 生成视图(Views)
5.3 本章小结
第6章 测试
6.1 编写高效的单元测试
6.1.1 使用assert关键字
6.1.2 使用测试数据
6.1.3 探索GroovyTestCase
6.1.4 测试实践
6.2 使用Mocks和Stubs
6.2.1 Mock实战
6.2.2 使用闭包修整(Closureurrying)定义测试数据
6.3 使用WebTest进行功能测试
6.3.1 安装WebTest
6.3.2 生成Web测试
6.3.3 执行Web测试
6.3.4 与表单交互
6.4 本章小结
第7章 Grails控制器(Controller)
7.1 控制器介绍
7.2 设置默认操作
7.3 访问Request属性
7.3.1 使用日志(Logging)
7.3.2 处理request参数
7.3.3 理解Flash作用域
7.4 创建模型(Model)
7.5 数据绑定和类型转换
7.5.1 用领域模型(DomaincModel)进行数据绑定
7.5.2 使用bindData方法进行数据绑定
7.6 用重定向控制流程
7.7 使用chain方法构造模型(Model)
7.8 显示响应(Response)
7.8.1 显示文本
7.8.2 显示指定的视图
7.8.3 显示标记(Markup)
7.9 拦截操作
7.9.1 Before通知
7.9.2 After通知
7.9.3 使用拦截器实现验证
7.10 处理文件上传
7.10.1 使用multipart请求
7.10.2 上传和数据绑定
7.11 本章小结
第8章 GroovycServercPages
8.1 基础知识
8.1.1 理解模型
8.1.2 页面指令
8.1.3 GroovycScriptlets
8.1.4 在GSP中使用GString
8.2 Grails内置标签
8.2.1 使用标签来设置变量
8.2.2 逻辑标签
8.2.3 迭代标签
8.2.4 过滤器和迭代
8.3 Grails动态标签
8.3.1 链接标签
8.3.2 创建表单和字段
8.3.3 验证和错误处理
8.4 国际化支持
8.4.1 标签
8.5 使用布局和模板
8.5.1 布局演示
8.5.2 按照惯例布局
8.5.3 使用Meta标签进行布局
8.5.4 演示布局
8.5.5 理解模板
8.5.6 共享模板
8.5.7 重新讨论Render方法
8.6 对数据进行分页
8.7 创建自定义标签
8.7.1 创建标签库
8.7.2 自定义标签基础内容
8.7.3 演示自定义标签
8.7.4 测试自定义标签
8.8 本章小结
第9章 Ajax
9.1 Ajax基础知识
9.2 Ajax实战
9.2.1 在远程方法调用前后执行代码
9.2.2 事件处理
9.2.3 完善页面的更新
9.3 创建远程调用链接
9.4 实现Ajax效果(Effects)
9.5 如何处理JavaScript事件
9.6 以异步方式提交表单
9.7 关于Ajax性能的讨论
9.8 本章小结
第10章 服务(Services)和作业(Jobs)
10.1 服务基础知识
10.1.1 事务
10.1.2 服务和依赖注入
10.2 服务实战
10.2.1 示例A——扩展搜索功能
10.2.2 示例B——显示del.icio.us中的最新数据
10.2.3 测试服务
10.3 使用Quartz进行作业调度
10.3.1 简单的作业
10.3.2 Cron作业
10.4 作业实战
10.4.1 修改领域模型
10.4.2 实现控制器
10.4.3 创建视图和模板
10.4.4 作业调度
10.4.5 测试作业
10.5 使用调度程序
10.5.1 暂停和恢复作业
10.5.2 触发作业
10.5.3 增加和删除作业
10.6 本章小结
第11章 与Java集成
11.1 服务器端Java集成
11.2 通过集成Hibernate实现ORM
11.2.1 使用HibernatecXML映射
11.2.2 EJB3方式的映射
11.2.3 在POJO实体中使用约束
11.2.4 得到SessionFactory对象
11.3 使用Spring进行依赖注入
11.3.1 使用Grails中的Bean
11.3.2 重载Bean的定义
11.4 在Grails中使用Spring控制器
11.5 在Grails中使用Acegi
11.6 使用XFire创建SOAP服务
11.7 本章小结
附录
· · · · · · (收起)
读后感
学习Grails不错的入门书籍。刚刚接触grails是在大四下学期在成都软件园的一个座谈会,主角是一个外国人(不知道是越南人还是美国人),讲着蹩脚的中文(还不如用英文听着痛快),给我印象最深的是他用了10分钟(从打开IDE那一刻开始)构建了一个简单的web程序,从那时我心里就...
我现在编程,还经常翻这本书。虽然有些内容较老,但毕竟是中文的。更新的功能可以到网上去查。 是入门的好教材。
学习Grails不错的入门书籍。刚刚接触grails是在大四下学期在成都软件园的一个座谈会,主角是一个外国人(不知道是越南人还是美国人),讲着蹩脚的中文(还不如用英文听着痛快),给我印象最深的是他用了10分钟(从打开IDE那一刻开始)构建了一个简单的web程序,从那时我心里就...
我现在编程,还经常翻这本书。虽然有些内容较老,但毕竟是中文的。更新的功能可以到网上去查。 是入门的好教材。
我现在编程,还经常翻这本书。虽然有些内容较老,但毕竟是中文的。更新的功能可以到网上去查。 是入门的好教材。
用户评价
我一直以来都是一个对新技术充满好奇心的开发者,而Grails则是我近期探索的一个宝藏。它所倡导的“约定优于配置”的理念,在实际开发中体现得淋漓尽致。当你遵循Grails的目录结构和命名规范时,很多东西就像被自动配置好了一样,省去了大量的重复性劳动。而且,Grails的插件生态系统也非常强大,几乎你能想到的功能,都能找到相应的插件来支持,比如安全认证、RESTful API的构建、国际化等等,这些都能通过简单的几行配置就集成进来,极大地加速了开发进程。我尤其欣赏Grails在领域模型设计上的灵活性,它支持GORM,可以很方便地映射到关系型数据库,而且还支持NoSQL数据库,这对于需要处理不同类型数据的项目来说,提供了非常大的便利。之前我负责的一个项目,前期调研阶段就需要对接多种数据源,Grails的GORM在那时就发挥了巨大的作用,让我们能够快速地迭代出数据访问层,为后续的业务逻辑开发打下了坚实的基础。
说实话,一开始接触Grails,我有点被它“约定优于配置”的理念吓到,总觉得会不会有太多的“黑魔法”,一旦出了问题就不知道从何下手。但随着深入使用,我发现这种担心是多余的。Grails的“魔法”其实是有迹可循的,它通过合理的约定,将开发者从繁琐的配置中解放出来,让你能够更专注于解决业务问题。而且,Grails的学习曲线相对平缓,尤其是对于有Java和Spring经验的开发者来说,上手会更加容易,很多概念都是相通的。我记得我刚开始写第一个Grails应用时,遇到一个关于数据验证的问题,当时我花了大概半个小时的时间来研究Grails的Validation机制,发现它非常直观和强大,只需要在Domain类中简单地添加一些注解,就可以实现复杂的校验逻辑,比如非空、长度限制、正则表达式匹配等等,而且错误信息也很友好,可以直接反馈给用户。这种高效且易于理解的设计,让我对Grails充满了信心。
对于一个追求简洁高效的开发者来说,Grails无疑是一个非常棒的选择。它巧妙地融合了Groovy的灵活性和Spring的强大能力,提供了一个开发Web应用的全新视角。在实际开发中,Grails的很多内建功能都非常实用,比如它内置的数据库迁移工具(Liquibase/GORM Migrations),可以让你很方便地管理数据库 schema 的变化,避免了手动执行SQL脚本带来的风险和麻烦。另外,Grails的事件发布/订阅机制也为实现解耦和异步处理提供了便利。我曾经遇到过一个场景,需要将用户注册成功后的邮件发送操作与用户注册本身的逻辑解耦,Grails的事件机制让我可以轻松地实现这一点,只需要在用户注册成功后发布一个事件,然后有一个单独的服务来监听这个事件并发送邮件,整个过程清晰明了,代码也易于维护。Grails的这种设计哲学,让开发者能够更专注于业务逻辑的实现,而不是被底层的技术细节所困扰。
Grails给我的最大感受就是“效率”二字。在当前快速迭代的市场需求下,能够快速地开发出稳定可靠的应用至关重要。Grails凭借其内建的强大功能和灵活的插件生态,在这方面表现出色。无论是Web应用的开发,还是API接口的构建,Grails都能提供一套完整的解决方案。我尤其喜欢它对RESTful API的支持,通过Grails的REST Controller,可以非常方便地创建一套完整的API服务,并且Grails还内置了对JSON、XML等数据格式的支持,省去了不少手动处理的麻烦。而且,Grails的测试框架也非常完善,可以轻松地编写单元测试和集成测试,确保代码的质量。我曾经在一个项目中,需要快速构建一个内部管理系统,Grails的脚手架功能让我迅速生成了大量的Controller和View代码,然后我再在此基础上进行微调,不到一周的时间,一个功能齐全的原型就出来了,这在传统的开发模式下是难以想象的。
自从接触了Grails,我的开发效率简直是坐了火箭一样往上窜。之前做Web应用,光是搭建环境、配置各种插件,就能耗费掉不少时间,更别提处理繁琐的ORM、MVC等细节了。Grails就像一位经验丰富的向导,把所有这些复杂的东西都帮你打理得井井有条,你只需要专注于业务逻辑的实现。比如,当你需要创建一个模型,然后生成基本的CRUD操作时,Grails可以让你在几分钟内就搞定,这对于快速原型开发来说简直是福音。而且,它基于Groovy,这门语言本身就写起来非常简洁流畅,比Java少了很多“样板代码”,读起来也更舒服。文档方面,Grails也做得非常到位,虽然有时也会遇到一些特别边缘的问题,但总体来说,遇到困难时,找到解决方案的几率非常高。我之前遇到过一个关于异步任务处理的难题,折腾了好久,最后在Grails的官方论坛里找到了一个非常详细的解答,并且跟着代码实践了一下,问题就迎刃而解了。这种社区的活跃度和官方文档的质量,是它给我留下深刻印象的关键点之一。
Grails必读
Grails必读
Grails入门
Grails必读
Grails入门书,可惜版本已经跟不上时代了