第一部分 概述 3
第1章 Java敏捷开发介绍 3
1.1 本章内容 4
1.2 本书中使用的技术 4
1.2.1 运行时技术 6
1.2.2 开发工具 7
1.3 本书使用的软件开发方法 10
1.4 小结 12
1.5 推荐资源 12
第2章 范例程序:一个在线的时间报表系统 13
2.1 本章内容 14
2.2 业务需求 15
2.3 软件开发方法 16
2.3.1 XP和AMDD概述 16
2.3.2 探索阶段 18
2.3.3 计划阶段 18
2.3.4 产品的迭代开发阶段(渐进式构建软件) 19
2.3.5 项目的范围 20
2.3.6 系统维护 20
2.4 将XP和AMDD应用到范例程序中 20
2.4.1 领域建模 20
2.4.2 用户界面原形 21
2.4.3 故事板 24
2.4.4 用户故事 24
2.4.5 发布(和迭代)计划 26
2.4.6 术语表 27
2.4.7 白板上的框架 28
2.5 关于Wiki软件 29
2.6 小结 29
2.7 推荐资源 29
第二部分 构建范例程序 33
第3章 基于XP和AMDD的架构和设计模型 33
3.1 本章内容 34
3.2 设计方法和工件的选择 35
3.3 灵活的架构图 36
3.4 从用户故事到设计 37
3.5 使用CRC卡对类进行分析 37
3.6 程序流程图(自创工件) 39
3.6.1 一种补充技术 39
3.6.2 使用CRUD列对程序流程图进行扩展 39
3.7 UML类图 39
3.8 UML包图 41
3.9 文件目录结构 42
3.12 验收测试 43
3.10 范例文件名 43
3.11 端到端的开发步骤 43
3.12.1 登录 44
3.12.2 时间报表清单 44
3.12.3 输入工时 44
3.13 其他要考虑的问题 44
3.14 小结 45
3.15 推荐资源 46
第4章 环境安装:JDK,Ant和JUnit 47
4.3 目录结构 48
4.2 Java平台标准版开发包(JDK) 48
4.1 本章内容 48
4.4 Ant 49
4.4.1 一个简单的Ant构建文件 50
4.4.2 一个全面的Ant构建文件 51
4.5 JUnit 55
4.5.1 独立的JUnit运行器 55
4.5.2 在Eclipse SDK中使用JUnit 56
4.6 SimpleTest程序:把工具整合在一起使用 56
4.6.1 SimpleTest.java 56
4.6.3 运行SimpleTest(一个单独的JUnit的测试用例) 57
4.6.2 JUnit的断言方法 57
4.6.4 在一个批处理中执行JUnit测试 59
4.7 测试先行的设计和重构 59
4.8 小结 61
4.9 推荐资源 61
第5章 使用Hibernate使对象持久化 63
5.1 本章内容 64
5.2 对象—关系映射(ORM)简介 64
5.2.1 关系和基数 65
5.2.3 级联 66
5.2.2 对象标识 66
5.2.4 映射 67
5.2.5 内存数据与持久化对象 67
5.3 设计范例数据库 67
5.3.1 非规范化 68
5.3.2 命名习惯 68
5.3.3 数据库设计的声明 69
5.3.4 DDL脚本 69
5.4 HSQLDB和Hibernate在整个架构中的位置 70
5.5 HSQLDB 70
5.5.1 HSQLDB服务器与Ant任务 71
5.5.4 将HSQLDB打包到可部署的存档文件 72
5.5.3 HSQLDB的持久模式与内存模式 72
5.5.2 HSQLDB数据库管理器和SqlTool 72
5.6 使用Hibernate 73
5.6.1 不再需要DAO或DTO了 73
5.6.2 支持的数据库 74
5.6.3 Hibernate和EJB 3.x 74
5.6.4 Hibernate配置的简单测试 74
5.6.5 安装Hibernate 78
5.6.6 Hibernate基础 80
5.6.7 用Hibernate开发TimesheetManager.java 83
5.6.9 Classpath中需要的文件 86
5.6.8 Employee.*和DepartmentManager.java 86
5.6.10 使用Ant运行测试用例 87
5.6.11 删除记录 87
5.6.12 条件查询 88
5.6.13 异常处理 88
5.7 其他Hibernate特性 89
5.7.1 关联 89
5.7.2 锁定对象(并发控制) 90
5.7.3 更多知识 91
5.8 小结 92
5.9 推荐资源 92
第6章 Spring框架概述 95
6.1 本章内容 96
6.2 什么是Spring 97
6.3 Spring开发包结构 98
6.4 Spring的部署包结构 98
6.5 Spring模块概述 99
6.5.1 Spring核心 99
6.5.2 Spring上下文 100
6.5.3 Spring AOP 100
6.5.4 Spring DAO 101
6.5.5 Spring ORM 101
6.6 Spring框架在哪些地方适合我们的程序结构 102
6.7 使用Spring的优点 103
6.8 Spring基础概念 104
6.8.1 依赖注入模式(和IoC容器) 104
6.8.2 两种注入方式 105
6.8.3 Beans,BeanFactory和Application Context 105
6.8.4 属性编辑器 107
6.9 Spring子项目 107
6.10 小结 108
6.11 推荐资源 108
第7章 Spring Web MVC框架 111
7.2 Spring Web MVC框架的优点 112
7.1 本章内容 112
7.3 Spring Web MVC概念 113
7.3.1 Spring MVC Java基础概念 114
7.3.2 Spring MVC配置概念 116
7.4 Time Expression中的Spring配置 117
7.4.1 安装Servlet容器(Apache Tomcat) 117
7.4.2 安装Spring框架 118
7.4.3 运行我们的SpringTest 120
7.4.4 配置Spring MVC 120
7.5 使用Spring开发Time Expression用户界面 121
7.5.1 报表页面 121
7.5.3 Java文件 122
7.5.2 工时输入页面 122
7.6 级联样式表(CSS) 123
7.7 Timesheet列表页面:无表单控制器示例 124
7.7.1 逐步配置 124
7.7.2 逐步编程 125
7.8 工时输入页面:表单控制器示例 129
7.8.1 逐步配置 129
7.8.2 逐步编码 131
7.8.3 绑定自定义的Command对象 134
7.8.5 JSP标签库 135
7.8.4 DateUtil.java 135
7.9 没有控制器的视图 136
7.10 Spring拦截器 136
7.11 运行示例 138
7.12 Spring框架2.0中的新标签库 140
7.13 Spring Web Flow和Portlet API 141
7.13.1 Spring Web Flow 141
7.13.2 Spring Portlet API 141
7.14 小结 141
7.15 推荐资源 142
第8章 Eclipse风潮 143
8.1 本章内容 144
8.2 Eclipse基金会 145
8.3 Eclipse平台和项目 146
8.4 Eclipse SDK概念 148
8.4.1 工作空间 148
8.4.2 工作台、透视图、编辑器和视图 149
8.4.3 项目 151
8.4.4 插件 151
8.4.5 向导 151
8.5 安装Eclipse 152
8.6 向Time Expression中装载Eclipse 154
8.7 Java开发工具(JDT)的特性 160
8.8 安装Eclipse Web工具平台(WTP)插件 167
8.9 使用Eclipse开发Time Expression 168
8.9.1 预绑定的JDT插件 169
8.9.2 数据插件(支持HSQLDB) 170
8.9.3 服务器插件(支持Tomcat) 172
8.9.4 Hibernate插件 173
8.9.5 Spring IDE插件 174
8.10.2 插件路径 176
8.10.1 eclipse.org项目 176
8.10 Eclipse有相当丰富的插件 176
8.9.6 其他值得关注的WTP插件 176
8.10.3 MyEclipseIDE.com 177
8.10.4 google.com 177
8.11 Eclipse对组的支持 177
8.12 Eclipse帮助系统 179
8.13 技巧和窍门 182
8.13.1 快捷键 182
8.13.2 首选项 183
8.13.3 书签 184
8.13.4 运行外部工具和Web浏览器 184
8.13.9 转换分隔符 185
8.13.8 清理项目 185
8.13.10 Eclipse/JVM启动参数 185
8.13.5 本地历史记录 185
8.13.7 拷贝元素 185
8.13.6 重新设置透视图 185
8.13.11 浏览第三方的源码 186
8.13.12 Eclipse隐藏文件 186
8.14 卸载Eclipse 187
8.15 一个对IntelliJ和NetBeans不公平的比较 187
8.15.1 IntelliJ 5.0 187
8.15.2 NetBeans 5.0 188
8.15.3 启动时间 189
8.16 小结 190
8.17 推荐资源 190
第三部分 高级特性 195
第9章 日志、调试、监控和性能分析 195
9.1 本章内容 196
9.2 日志介绍 197
9.3 Jakarta Commons日志工具(Log4j和JDK日志工具) 197
9.3.1 JCL如何工作 198
9.3.2 使用JCL开发 198
9.3.3 日志消息级别 199
9.3.4 TimesheetListController中的范例日志 200
9.3.5 关于格式 201
9.3.6 在Spring和Hibernate中使用日志 201
9.4 使用Eclipse调试Java应用程序 201
9.5 使用Firefox调试Web用户界面 205
9.5.1 JavaScript调试器 206
9.5.2 Web开发工具 206
9.5.3 其他的Firefox功能扩展 206
9.5.4 JavaScript控制台 207
9.6 调试TimesheetManagerTest(从浏览器到数据库) 207
9.7 JMX管理和监控 209
9.8 Java性能分析器 210
9.9 调试技巧 210
9.10 小结 212
9.11 推荐资源 212
第10章 超越基础 215
10.1 本章内容 216
10.2 新增的Java特性 216
10.2.1 静态引用 217
10.2.2 泛型 217
10.2.3 加强的for循环 217
10.2.6 Varargs 218
10.2.4 自动封箱 218
10.2.5 枚举 218
10.2.7 其他特性 219
10.3 Ant任务 219
10.3.1 CVS 220
10.3.2 Exec 220
10.3.3 Get 220
10.3.4 Sleep 220
10.3.5 FTP 220
10.4 JUnit 221
10.3.7 丰富的任务 221
10.3.6 Mail 221
10.4.1 自定义测试组 222
10.4.2 测试固定代码 222
10.5 Hibernate 223
10.5.1 内部SQL查询 223
10.5.2 拦截器 223
10.6 Spring框架 224
10.6.1 调度任务 224
10.6.2 Spring邮件支持 226
10.6.3 JMX支持 227
10.6.4 更多的内容 228
10.7 Spring与Hibernate的集成 229
10.7.1 在Spring中配置事务管理 230
10.7.2 更简洁的Java代码 232
10.7.3 对集成代码进行单元测试 233
10.7.4 基于接口的方式 233
10.8 JSP标签库 235
10.8.1 Displaytag 235
10.8.2 编写自定义标签库 235
10.9 重构 236
10.9.1 范例程序中重构的例子 237
10.9.4 关于Eclipse中的重构 238
10.10 其他事项 238
10.9.2 尽可能地重构,别忘了备份 238
10.9.3 在线重构目录列表(refactoring.com和agiledata.org) 238
10.10.1 事务管理 239
10.10.2 应用安全 240
10.10.3 异常处理 241
10.11 集群 243
10.12 多线程 244
10.13 关于Java GUI(厚客户端)应用程序 244
10.14 配置管理(CM)环境 245
10.16 Java文档和注释 246
10.15 异步JavaScript与XML(AJaX) 246
10.18 小结 247
10.17 将整个系统打包到WAR文件中 247
10.19 推荐资源 248
第11章 下一阶段 249
11.1 本章内容 250
11.2 完成Time Expression程序 250
11.3 基于XP和AMDD的软件开发 250
11.5 Ant 251
11.6 JUnit 251
11.4 Java平台 251
11.7 Hibernate 252
11.8 Spring框架 252
11.9 Eclipse SDK 253
11.10 日志、调试、监控和性能分析 253
11.11 获得帮助 254
11.11.1 在线讨论论坛 254
11.11.2 Javadoc和源代码 254
11.12 关于代码质量工具 255
11.13 小结 255
11.14 推荐资源 255
第12章 分别寄语 257
12.1 我的近期计划 258
12.2 未来,敏捷方法,Java技术 258
12.3 干杯 259
第四部分 附录 263
附录A 本书代码下载 263
A.1 第三方库文件的共享目录 263
A.2 范例程序目录(rapidjava/timex/) 264
A.2.1 Ant文件 264
A.2.3 配置Java源 265
A.2.2 HSQLDB数据库文件 265
A.3 重构后的范例程序目录(rapidjava/timex2/) 266
A.4 Spring-Hibernate集成演示目录(rapidjava/springhibernate/) 266
附录B 对范例程序的重构 269
B.1 SignInController.java:JMX监控 269
B.2 TimesheetListController.java:JMX监控 270
B.3 管理者类:Spring-Hibernate集成 270
B.4 timesheetlist.jsp:转而包括文件和Displaytag 271
B.5 enterhours.jsp:转而包括文件和Timex标签库 272
B.6 *测试类和TimexTestCase 272
B.7 DateUtil.java:新方法 272
B.9 timexhsqldb.xml:错误数据问题的修改 273
B.8 timex.css:新样式 273
附录C Java代码规范 275
附录D Web应用安全 277
附录E 范例程序开发过程一览表 279
E.1 项目初期 279
E.2 项目探索阶段 279
E.3 计划 280
E.4 在迭代中进行渐进式的软件构建过程 280
附录F 敏捷建模的价值、实践和原则一览表 281
附录G 极限编程(XP)一览表 283
H.1 跨平台工具 285
附录H 一些不错的工具 285
H.2 基于Windows的工具 286
H.3 基于Mac OS X的工具 287
H.4 基于Linux的工具(KDE) 287
附录I 可视化模式研究 289
I.1 问题 289
I.2 过去 289
I.3 程序开发的未来:敏捷开发方式 290
I.4 我的观点 292
I.4.1 BRUF和BDUF 292
I.4.2 术语 292
I.5 加入社区 293