第1章 导论 1
1.1 RoR的革命与Web开发的新时代 1
1.2 RoR并不完美 2
1.2.1 Ruby语言方面的不足 2
1.2.2 对历史遗留项目的支持较为困难 2
1.3 Grails的诞生解决了一些遗憾 3
1.3.1 Groovy语言 3
1.3.2 Grails站在了巨人的肩膀之上 3
1.3.3 Grails有良好的扩展性 3
1.4 对Grails的一些误解 3
1.5 本书的使用说明 4
1.6 本章小结 4
第一篇 入门篇 6
第2章 Hello Grails 6
2.1 Grails的安装 6
2.1.1 JDK的安装与配置 6
2.1.2 Grails的安装 7
2.2 创建Grails工程 8
2.3 Grails的MVC架构 11
2.4 Scaffold应用程序 14
2.5 开发工具的使用 17
2.6 本章小结 19
第3章 Groovy VS Java 20
3.1 Groovy的基本类型与运算符 21
3.1.1 字符串 21
3.1.2 数字 22
3.1.3 Groovy的类 23
3.1.4 运算符 24
3.2 Groovy的控制结构 25
3.3 Groovy的集合 27
3.3.1 列表 27
3.3.2 映射 28
3.3.3 区间 29
3.4 Groovy的闭包 30
3.4.1 闭包的定义 30
3.4.2 闭包的代表 31
3.4.3 闭包在GDK中的使用 31
3.5 本章小结 33
第二篇 实际应用 36
第4章 商品维护 36
4.1 准备工作 36
4.2 查看商品列表 40
4.3 创建和编辑商品 44
4.4 本章小结 48
第5章 商品搜索 49
5.1 构造查询表单 49
5.2 复杂的数据库查询 50
5.2.1 HibernateCriteriaBuilder的初窥 51
5.2.2 数据库的分页查询 54
5.2.3 将查询改造为inner join 59
5.3 显示分页导航 60
5.4 本章小结 62
第6章 用户注册与登录 63
6.1 表单验证与资源文件 63
6.2 用户注册 69
6.3 用户登录 73
6.3.1 登录的数据库查询 73
6.3.2 使用Session维持会话 74
6.3.3 自定义Codec实现对密码加密 75
6.4 登录保护 76
6.5 本章小结 79
第7章 购物车与订单 80
7.1 购物车的查看与管理 80
7.1.1 定义购物车的Domain类 80
7.1.2 定义OrderService类 82
7.1.3 显示购物车 84
7.1.4 维护购物车 85
7.2 订单的提交 90
7.2.1 定义订单的Domain类 90
7.2.2 提交订单的表单页面 90
7.2.3 订单的保存 94
7.3 订单的查看 95
7.4 本章小结 99
第8章 系统后台管理 100
8.1 页面布局的使用 100
8.1.1 Grails Layout的基础知识 100
8.1.2 为系统后台管理创建统一的decorator 103
8.2 文件上传的实现 107
8.2.1 开发表单页面 107
8.2.2 在Controller中接收文件 108
8.3 修改订单状态 109
8.4 本章小结 110
第9章 Grails的自动化测试 111
9.1 Grails自动化测试基础知识 111
9.2 编写测试用例 113
9.2.1 对Domain类进行测试 113
9.2.2 对Service类进行测试 116
9.2.3 对Controller进行测试 118
9.2.4 对Taglib进行测试 120
9.3 本章小结 121
第10章 部署应用 122
10.1 Grails对部署的支持 122
10.2 配置应用程序 124
10.3 本章小结 127
第三篇 深入了解Grails 130
第11章 深入GORM 130
11.1 自定义映射 130
11.1.1 基本映射 130
11.1.2 配置主键 131
11.1.3 “锁”与Version 133
11.1.4 事件与自动时间戳 134
11.1.5 映射Blob字段 134
11.1.6 定义非持久化属性 135
11.2 深入理解Domain间的关系 136
11.2.1 一对一关系 136
11.2.2 一对多关系 137
11.2.3 多对多关系 139
11.2.4 继承关系 141
11.2.5 合成关系 143
11.3 数据库查询小结 143
11.3.1 GORM提供了便捷的查询方法 143
11.3.2 基于HQL的查询 145
11.4 对GORM进行性能优化 146
11.4.1 设置抓取模式 147
11.4.2 使用二级缓存 147
11.5 使用GRAG工具生成Domain 151
11.6 本章小结 154
第12章 与Spring整合 155
12.1 依赖注入与Spring容器基础 155
12.1.1 依赖注入 155
12.1.2 Spring容器基础 157
12.2 在Grails中使用Spring 158
12.3 本章小结 160
第13章 深入Controller 161
13.1 Controller中常用的属性与方法 161
13.2 自定义URL Mapping 164
13.3 Web Flow 167
13.4 本章小结 172
第14章 深入Groovy Server Page 174
14.1 GSP基础知识 174
14.1.1 GSP输出表达式 174
14.1.2 GSP中预定义的变量与作用域 175
14.2 GSP标签库 175
14.2.1 常用的内置标签 176
14.2.2 开发自定义标签 179
14.3 Grails对Ajax的支持 182
14.4 本章小结 184
第15章 实现Web Service 185
15.1 REST风格的Web Service 185
15.1.1 什么是REST 185
15.1.2 在Grails中实现REST 185
15.1.3 在Client端调用服务 187
15.2 基于SOAP的传统Web Service 188
15.3 本章小结 189
第16章 使用Grails插件 190
16.1 插件的安装 190
16.2 插件的组织结构 196
16.3 插件的使用 197
16.3.1 Acegi插件 197
16.3.2 Debug插件 204
16.4 本章小结 205
第四篇 Grails解密 208
第17章 高级Groovy特性 208
17.1 动态方法调用与属性访问 208
17.1.1 动态方法调用 208
17.1.2 动态属性访问 208
17.2 invokeMethod和getProperty 209
17.3 MOP动态基础 211
17.3.1 遍历方法和属性 211
17.3.2 动态添加方法 213
17.3.3 动态添加属性 215
17.3.4 使用方法对象 216
17.3.5 为某一特定的实例添加方法 217
17.4 本章小结 218
第18章 Grails插件开发 219
18.1 创建与发布插件 219
18.2 插件能做什么 221
18.2.1 添加Spring配置信息 223
18.2.2 与Spring容器交互 224
18.2.3 修改web.xml 224
18.2.4 添加动态方法 226
18.2.5 捕获变更 227
18.3 插件的依赖关系 229
18.4 在安装或升级时执行附加操作 230
18.5 本章小结 230
第19章 浅析Grails的源程序 231
19.1 准备工作 231
19.1.1 下载源码 231
19.1.2 编译Grails源码 231
19.2 HibemateCriteriaBuilder的原理 233
19.3 开启Hibernate Query Cache 237
19.4 本章小结 241
第20章 未来Grails版本的新特性 242
20.1 GORM的新特性 242
20.1.1 更多的GORM事件 242
20.1.2 映射基本类型的集合 243
20.1.3 对Domain的只读访问 243
20.1.4 定义默认排序字段 243
20.1.5 改进的findBy 245
20.2 对插件系统的改进 245
20.3 数据绑定 245
20.4 在GSP中使用JSPP的标签 246
20.5 加密配置文件中的数据库密码 246
20.6 本章小结 246
参考文献 247
索引 248