第1章 Ajax概述 1
1.1 重新思考Web应用 2
1.1.1 应用系统的发展史 2
1.1.2 传统Web应用的优势和缺点 4
1.2 重新设计Web应用 5
1.2.1 富Internet应用 5
1.2.2 异步发送请求,避免等待 7
1.2.3 使用Ajax 7
1.3 Ajax介绍 7
1.3.1 Ajax的工作方式 8
1.3.2 Ajax的核心:XMLHttpRequest 8
1.3.3 Ajax的编程脚本:JavaScript语言 9
1.3.4 HTML页面的DOM模型 9
1.3.5 数据交换和显示 10
1.4 Ajax的基本特征 10
1.4.1 异步发送请求 10
1.4.2 服务器响应是数据,而不是页面内容 11
1.4.3 浏览器中的是应用,不是简单视图 11
1.5 Ajax的替代技术 11
1.5.1 Sun的Java Web Start技术 11
1.5.2 Microsoft的ClickOnce技术 12
1.5.3 基于Flash的Flex 12
1.6 搭建Ajax开发环境 13
1.6.1 本书的Ajax开发环境 13
1.6.2 安装Tomcat服务器 13
1.6.3 配置Tomcat的服务端口 15
1.6.4 进入Tomcat控制台 15
1.6.5 部署Web应用 17
1.6.6 配置Tomcat的数据源 18
1.6.7 安装Ant 19
1.6.8 Eclipse的下载和安装 21
1.6.9 在线安装Eclipse插件 21
1.6.10 手动安装Eclipse插件 22
1.7 调试JavaScript脚本 23
1.8 本章小结 24
第2章 Ajax初体验 25
2.1 Ajax带来的优势 26
学生提问 即使使用Ajax技术,客户端和服务器一样有网络通信延迟,尤其是当网络状况不好时,通信延迟将更严重,用户一样感受不到更新延迟吗? 27
2.2 开始传统的JSP聊天室 28
2.2.1 实现业务逻辑组件 28
2.2.2 实现控制器 31
2.2.3 实现视图 33
2.2.4 JSP聊天室的问题 34
2.3 AjaX聊天室 34
2.3.1 异步发送请求 35
学生提问 使用Ajax技术是不是会带来更大的工作量? 37
2.3.2 解决多余刷新的问题 37
2.3.3 解析服务器响应 39
2.3.4 何时发送请求 40
学生提问 客户端频繁发送请求,难道不会加重服务器负担? 41
2.3.5 Ajax聊天室的特点 44
2.4 Ajax编程的技术难点 44
2.5 传统Web应用与AjaX应用的对比 45
2.6 本章小结 46
第3章 XHTML语言详解 47
3.1 XHTML简介 48
3.1.1 HTML的作用和历史 48
学生提问 在保存HTML文件时,到底采用.htm扩展名还是采用.html扩展名呢? 48
学生提问 我应该使用FrontPage学习HTML文档呢?还是使用Dreamweaver好? 49
3.1.2 HTML 4.01和XHTML 49
学生提问 如果我使用XHTML编写互联网页,会不会有浏览器不支持? 50
3.2 XHTML的基本语法 50
3.2.1 XHTML的基本结构和规则 50
3.2.2 XHTML和DTD 52
3.3 XHTML的常用标签 54
3.3.1 基本标签 54
3.3.2 文本格式化标签 55
学生提问 如果我希望HTML页面内的文本更美观,例如改变它们的颜色、背景等,那该用什么标签呢? 57
3.3.3 超级链接和锚点 57
3.3.4 列表相关标签 58
3.3.5 图像相关标签 59
3.3.6 表格相关标签 61
3.3.7 框架相关标签 64
3.4 XHTML的表单标签 65
3.4.1 表单标签 66
3.4.2 使用input元素 67
学生提问 前面的页面中包含5个单选框,为何前面3个只能选中一个,后面2个只能选中一个,但一共可以选择2个呢? 69
3.4.3 使用label定义标签 69
学生提问 在表单里直接定义普通文本不可以作为标签吗?专门使用<label.../>元素定义标签有什么作用? 69
3.4.4 使用button定义按钮 70
3.4.5 列表框和下拉菜单 71
3.4.6 使用textarea定义文本域 72
3.5 XHTML头部和元信息 73
3.6 本章小结 74
本章练习 74
第4章 JavaScript语法详解 75
4.1 JavaScript简介 76
4.1.1 运行JavaScript 77
4.1.2 导入JavaScript文件 77
4.2 数据类型和变量 77
4.2.1 定义变量的方式 78
4.2.2 类型转换 78
4.2.3 变量 80
4.3 基本数据类型 82
4.3.1 数值类型 82
4.3.2 字符串类型 86
4.3.3 布尔类型 89
4.3.4 undefined和null 90
4.3.5 正则表达式 91
4.4 复合类型 93
4.4.1 对象 93
4.4.2 数组 93
4.4.3 函数 94
4.5 运算符 96
4.5.1 赋值运算符 96
4.5.2 算术运算符 97
4.5.3 位运算符 98
4.5.4 加强的赋值运算符 99
4.5.5 比较运算符 100
4.5.6 逻辑运算符 101
4.5.7 三目运算符 102
4.5.8 逗号运算符 103
4.5.9 void运算符 103
4.5.10 typeof和instanceof运算符 104
4.6 语句 104
4.6.1 语句块 105
4.6.2 空语句 105
4.6.3 异常抛出语句 105
4.6.4 异常捕捉语句 106
4.6.5 with语句 107
4.7 流程控制 108
4.7.1 分支 108
4.7.2 while循环 110
4.7.3 do while循环 111
4.7.4 for循环 111
4.7.5 for in循环 112
4.7.6 break和continue 113
4.8 函数 116
4.8.1 函数定义 116
4.8.2 局部变量和局部函数 117
4.8.3 匿名函数 118
4.8.4 函数和类 120
4.8.5 函数的实例属性和静态属性 121
4.8.6 递归函数 123
4.9 函数的参数处理 124
4.9.1 基本类型和复合类型的参数传递 125
4.9.2 空参数 126
4.9.3 参数类型 127
4.10 对象 128
4.10.1 面向对象的概念 129
4.10.2 对象和关联数组 129
4.10.3 继承和prototype 130
4.11 建对象 135
4.11.1 使用关键字new创建对象 135
4.11.2 使用Object直接创建对象 135
4.11.3 使用JSON语法创建对象 137
4.12 本章小结 140
本章练习 140
第5章 级联样式单详解 141
5.1 样式单概述 142
5.2 CSS的基本使用 143
5.2.1 引入外部样式文件 143
5.2.2 使用内部CSS样式 144
5.2.3 使用内联样式 146
5.3 使用CSS属性 147
5.3.1 文字相关属性 148
5.3.2 整体段落相关属性 150
5.3.3 背景相关属性 151
5.3.4 表格相关属性 152
5.3.5 大小相关属性 155
5.3.6 位置相关属性 155
5.3.7 边框相关属性 157
5.3.8 轮廓相关属性 159
5.3.9 三个常用属性 160
5.4 选择器定义 161
5.4.1 属性选择器 162
5.4.2 ID选择器 163
5.4.3 class选择器 164
5.4.4 包含选择器和子元素选择器 165
5.4.5 超级链接相关选择器 166
5.5 在脚本中修改显示样式 166
5.5.1 随机改变页面的背景色 167
5.5.2 卷帘效果 167
5.5.3 动态增加立体效果 169
5.6 本章小结 170
第6章 DOM模型详解 171
6.1 DOM模型概述 172
6.2 DOM模型和XHTML文档 173
6.2.1 XHTML元素之间的继承图 173
6.2.2 XHTML元素之间常见的包含关系 174
6.3 访问XHTML元素 175
6.3.1 根据ID访问XHTML元素 175
学生提问 如何让每个XHTML元素都有唯一的id属性呢?以前我见到很多XHTML页面元素并没有id属性啊。 175
学生提问 程序中为了访问<div.../>元素和<textarea.../>元素的“内容”,为何一个用innerHTML属性,另一个用value属性? 176
6.3.2 利用节点关系访问XHTML元素 176
6.3.3 访问表单域控件 178
6.3.4 访问列表框、下拉菜单的选项 179
6.3.5 访问表格子元素 180
6.4 修改XHTML元素 182
6.5 新增XHTML元素 183
6.5.1 创建或复制节点 183
6.5.2 添加节点 185
6.5.3 为列表框、下拉菜单增加选项 185
6.5.4 动态添加表格内容 187
6.6 删除XHTML元素 188
6.6.1 删除节点 188
6.6.2 删除列表框、下拉菜单的选项 189
6.6.3 删除表格的行或单元格 191
6.7 传统DHTML模型 192
6.8 使用window对象 194
6.8.1 访问历史 196
6.8.2 浏览器对象 197
6.8.3 访问页面URL 197
6.8.4 客户机屏幕信息 198
6.8.5 弹出新窗口 199
6.8.6 确认对话框和输入对话框 199
6.8.7 使用定时器 200
6.9 使用document对象 201
6.9.1 动态页面 202
6.9.2 读写Cookje 203
6.10 两个常用范例 204
6.10.1 可编辑表格 204
6.10.2 导航菜单 206
6.11 DOM模型和XML文档 210
6.11.1 使用DOM解析XML文档 210
6.11.2 使用DOM解析器创建XML 212
6.12 本章小结 214
本章练习 214
第7章 事件处理机制 215
7.1 基本事件模型 216
7.1.1 绑定XHTML元素属性 216
7.1.2 绑定DOM对象的属性 218
7.1.3 事件处理函数和关键字this 219
7.1.4 使用返回值改变默认行为 221
7.1.5 在代码中触发事件 222
学生提问 为什么在<form.../>元素中<input.../>元素的id属性值不能是submit呢? 223
7.2 Ajax应用的MVC 224
7.3 Internet Explorer的事件模型 226
7.3.1 使用script for绑定 227
7.3.2 使用attachEvent方法执行绑定 227
7.3.3 访问事件对象 229
学生提问 此处介绍的是Internet Explorer中访问事件的方式,那么其他浏览器呢? 232
7.3.4 事件冒泡 232
7.3.5 重定向事件 234
7.3.6 取消事件默认行为 236
7.3.7 捕获鼠标事件 237
7.4 DOM 2的事件模型 239
7.4.1 绑定事件处理器 239
7.4.2 访问事件对象 241
学生提问 DOM 2事件模型和Internet Explorer事件模型里访问事件对象的方式完全不同,如果我们需要写一个跨浏览器的程序,是不是只能将事件处理函数绑定到XHTML元素,并将event显式作为参数传入事件处理函数? 241
7.4.3 事件传播 243
7.4.4 转发事件 247
7.4.5 取消事件的默认行为 249
7.5 本章小结 250
本章练习 250
第8章 XMLHttpRequest对象详解 251
8.1 XMLHttpRequest对象概述 252
8.2 XMLHttpRequest的方法和属性 252
8.2.1 XMLHttpRequest的方法 252
8.2.2 XMLHttpRequest的属性 256
8.3 发送请求 258
8.3.1 发送简单请求 259
8.3.2 发送GET请求 261
8.3.3 发送POST请求 263
8.3.4 发送请求时的编码问题 264
8.3.5 发送XML请求 268
8.4 处理服务器响应 270
8.4.1 处理的时机 270
8.4.2 使用文本响应 271
8.4.3 使用XML响应 271
8.4.4 使用DOM模型生成页面 273
8.5 XMLHttpRequest对象的运行周期 273
8.6 Ajax必须解决的问题 274
8.6.1 跨浏览器问题 274
8.6.2 安全性问题 275
8.6.3 性能问题 277
8.7 本章小结 280
第9章 Prototype库详解 281
9.1 Prototype的下载和安装 282
9.1.1 什么是Prototype库 282
9.1.2 下载Prototype库 282
9.1.3 安装Prototype库 283
9.1.4 使用Prototype对象 283
9.2 Prototype的工具函数 284
9.2.1 使用$()函数 284
9.2.2 使用$$()函数 286
9.2.3 使用$A()函数 288
9.2.4 使用$F()函数 289
9.2.5 使用$H()函数 290
9.2.6 使用$R()函数 291
9.2.7 使用Try.these()函数 291
9.3 Prototype的JSON支持 293
9.4 Prototype的自定义对象和类 294
9.4.1 使用Element对象 294
9.4.2 使用Element.Methods 298
9.4.3 使用Enumerable 298
9.4.4 使用ObjectRange 302
9.4.5 使用Form.Element操作表单控件 302
9.4.6 使用Form操作表单 304
9.4.7 使用Hash对象 305
9.4.8 使用Event 307
学生提问 element()和findElement()的关系到底是怎么回事呢? 307
9.4.9 使用Template 308
9.4.10 使用Class 309
9.4.11 两个常用的监听器 310
9.5 Prototype常用的扩展 312
9.5.1 扩展Array 312
9.5.2 扩展document 313
9.5.3 扩展String 314
9.5.4 扩展Function 316
9.5.5 扩展Number 318
9.6 Prototype的Ajax支持 319
9.6.1 使用Ajax.Request类 319
9.6.2 使用Form.request方法 322
9.6.3 使用Ajax.Responders对象 324
9.6.4 使用Ajax对象 325
9.6.5 使用Ajax.Updater类 325
9.6.6 使用Ajax.PeriodicalUpdater类 328
9.7 本章小结 329
第10章 基于Prototype库的应用:自动完成 330
10.1 应用的基本分析和设计 331
10.1.1 数据要求 331
10.1.2 数据表结构 331
10.2 Domain Object和持久层 331
10.2.1 Domain Object 332
10.2.2 实现DAO组件 333
10.3 实现Service组件 337
10.4 使用Servlet提供服务器响应 341
10.4.1 根据前缀查询品牌 341
10.4.2 根据品牌查询型号 342
10.4.3 根据型号查询详细信息 343
10.5 客户端HTML页面实现 344
10.6 增加HTML页面的事件响应能力 346
10.6.1 实现品牌输入框的事件处理器 346
10.6.2 实现键盘事件的处理器 347
10.6.3 根据品牌提示型号 350
10.6.4 根据型号显示描述 351
10.6.5 注册Ajax事件监听器 352
10.7 本章小结 352
第11章 jQuery库详解 353
11.1 jQuery入门 354
11.1.1 理解jQuery的设计 354
学生提问 上面的程序中target对象到底是什么?它怎么会拥有height、width、css这些方法? 355
11.1.2 下载和安装jQuery 355
11.1.3 让jQuery与其他JavaScript库共存 356
11.2 获取jQuery对象 356
11.2.1 jQuery核心函数 356
11.2.2 以CSS选择器访问DOM元素 357
11.2.3 选择器的附加限定词 359
11.2.4 表单相关的选择器 362
11.3 jQuery操作类数组的工具方法 363
11.3.1 过滤相关方法 364
11.3.2 仿DOM导航的相关方法 365
11.3.3 链接方法 367
11.4 jQuery支持的方法 368
11.4.1 jQuery命名空间的方法 368
11.4.2 数据存储的相关方法 370
11.4.3 操作属性的相关方法 370
11.4.4 操作CSS属性的相关方法 371
11.4.5 操作元素内容的相关方法 373
11.4.6 操作DOM节点的相关方法 374
11.5 jQuery事件相关方法 378
11.6 动画效果相关的方法 380
11.7 Ajax相关方法 383
11.7.1 两个工具方法 383
11.7.2 使用load方法 384
11.7.3 使用jQuery.ajax(options)方法 385
11.7.4 使用get/post方法 387
11.8 扩展jQuery和jQuery插件 389
11.9 本章小结 390
第12章 基于jQuery的应用:电子相册系统 391
12.1 实现持久层 392
12.1.1 实现持久化类 392
12.1.2 配置SessionFactory 394
12.2 实现DAO组件 395
12.2.1 DAO接口定义 395
12.2.2 完成DAO组件的实现类 397
12.3 实现业务逻辑层 402
12.3.1 实现业务逻辑组件 402
12.3.2 配置业务逻辑组件 405
12.4 实现客户端调用 405
12.4.1 访问业务逻辑组件 406
12.4.2 处理用户登录 406
12.4.3 获得用户相片列表 408
12.4.4 处理翻页 409
12.4.5 处理文件上传 411
学生提问 当Servlet重定向到album.html页面后,如何弹出如图12.5所示对话框? 413
12.4.6 页面加载时的处理 413
学生提问 HttpSession里的curImg属性是从哪里来的呢? 415
12.5 本章小结 415
本章练习 415
第13章 DWR框架详解 416
13.1 DWR的下载和安装 417
13.1.1 什么是DWR 417
13.1.2 下载和安装DWR 418
13.2 使用DWR 422
13.2.1 编写处理类 422
13.2.2 配置DWR 424
13.3 使用DWR的转换器 425
13.3.1 基本转换器 425
13.3.2 对象转换器 426
13.3.3 数组转换器 428
13.3.4 集合类型转换器 428
13.4 方法声明定义 429
13.5 使用DWR的创建器 430
13.5.1 创建器的配置 430
13.5.2 使用new创建器 432
13.5.3 使用none创建器 433
学生提问 既然none创建器不创建任何对象,哪有对象暴露给JavaScript代码”? 433
13.5.4 使用script创建器 433
13.6 调用服务器端的方法 434
13.6.1 调用服务器端方法的通用配置 434
13.6.2 使用简单回调 435
13.6.3 使用JSON格式的回调 440
13.6.4 将客户端参数传递到回调函数 442
13.7 使用engine.js 443
13.7.1 设置调用顺序 443
13.7.2 设置全局超时时长 443
13.7.3 设置全局Hook函数 444
13.7.4 设置全局处理函数 444
13.7.5 设置常用的全局选项 444
13.7.6 批处理 445
13.8 使用util.js 445
13.8.1 使用$() 446
13.8.2 处理列表 446
13.8.3 处理表格 450
13.8.4 访问HTML元素值 454
学生提问 getValues()可以一次获取多个HTML元素的值,那返回的值如何保存呢? 455
13.8.5 几个工具函数 456
13.9 整合第三方Java EE框架 458
13.9.1 访问Servlet API 458
学生提问 老师你以前教我们:谁调用方法,谁负责为形参赋值。现在我们调用addSession()方法时没有为第二个参数赋值,那第二个参数从哪里获得参数值呢? 460
13.9.2 整合Spring 461
13.10 使用DWR注释 463
13.10.1 初始配置 464
学生提问 如果我有很多类需要列出,那岂不是很臃肿,classes属性值是否支持通配符?如果想列出内部类应该怎么写? 464
13.10.2 标注创建器和转换器 464
13.11 异常处理 465
13.12 反向Ajax 467
13.12.1 配置使用反向Ajax 468
学生提问 反向Ajax技术不是依赖HTTP协议的吗?它怎么可以违反请求-响应架构的规律呢? 468
13.12.2 在Java方法中操作Web页 469
13.12.3 在客户端调用反向Ajax方法 471
13.13 本章小结 472
第14章 基于DWR的应用:即时消息系统 473
14.1 实现Hibernate持久层 474
14.1.1 Hibernate持久层的POJO 474
14.1.2 将POJO映射成持久化对象 476
14.2 实现DAO组件 477
14.2.1 扩展HibernateDaoSupport来实现分页 478
学生提问 为什么不扩展Hibernate Template类来实现分页?扩展HibernateDaoSup-port是不是会引起一些混乱? 478
14.2.2 实现DAO组件 480
14.3 实现业务逻辑组件 482
14.3.1 业务逻辑组件的接口 483
14.3.2 业务逻辑组件的实现类 484
14.3.3 部署业务逻辑组件 487
14.3.4 基于AOP的权限控制 488
14.4 调用业务逻辑组件 490
14.4.1 将Spring容器中的Bean创建成JavaScript对象 490
14.4.2 处理用户登录 491
学生提问 既然已经在JavaScript代码里进行了权限控制,为何还要在业务逻辑层控制呢? 492
14.4.3 处理用户注册 493
14.4.4 处理消息发布 494
14.4.5 获取消息列表 495
14.4.6 处理分页 496
14.4.7 查看消息内容 497
14.4.8 页面加载函数 498
14.5 本章小结 498
本章练习 498
第15章 AjaxTags框架详解 499
15.1 AjaxTags的下载和安装 500
15.1.1 什么是AjaxTags 500
15.1.2 下载和安装AjaxTags 500
15.2 AjaxTags入门 501
15.2.1 编写处理类 502
15.2.2 使用标签 503
15.3 处理类的几种形式 505
15.3.1 使用普通Servlet生成响应 505
15.3.2 使用AjaxXmlBuilder辅助类 507
15.3.3 使用BaseAjaxServlet生成响应 509
15.3.4 使用非Java响应 510
15.4 使用AjaxTags标签 511
15.4.1 使用自动完成标签 511
15.4.2 使用area标签 515
15.4.3 使用anchors标签 516
15.4.4 使用callout标签 517
15.4.5 使用htmlContent标签 518
15.4.6 使用portlet标签 520
15.4.7 使用select标签 522
15.4.8 创建Tab页 523
15.4.9 使用displayTag标签 524
15.4.10 使用tree标签创建树 526
15.4.11 使用updateField标签 528
15.5 关于AjaxTags的选择 530
15.5.1 AjaxTags的优势和使用场景 530
15.5.2 AjaxTags的缺点 531
15.6 本章小结 531
第16章 Ajax实例:简易Blog系统 532
16.1 实现Hibernate持久层 533
16.1.1 设计Hibernate的持久化类 533
16.1.2 完成映射文件 535
16.1.3 数据表的结构 537
16.2 实现DAO组件 538
16.2.1 DAO接口定义 538
16.2.2 实现DAO组件 539
16.2.3 配置DAO组件 542
16.3 实现业务逻辑组件 543
16.3.1 业务逻辑组件的接口 543
16.3.2 业务逻辑组件的实现类 544
16.3.3 配置业务逻辑组件 547
16.4 整合DWR框架 548
16.4.1 配置web.xml文件 548
16.4.2 将Spring容器中的Bean转化成JavaScript对象 549
16.5 在客户端调用JavaScript对象 550
16.5.1 获取Blog文章列表 550
16.5.2 控制Blog文章列表的翻页 551
16.5.3 页面加载时的动作 551
16.5.4 查看评论 552
16.5.5 控制回复的翻页 554
16.5.6 添加回复 554
16.5.7 查看Blog文章内容 556
16.5.8 添加新的Blog文章 556
16.6 本章小结 558
本章练习 558
第17章 电子拍卖系统 559
17.1 总体说明和概要设计 560
17.1.1 系统的总体架构设计 560
17.1.2 数据库设计 561
17.2 实现Hibernate持久化类 562
17.2.1 设计Domain Object 562
17.2.2 实现Domain Object 563
17.3 DAO层实现 568
17.3.1 DAO的基础配置 568
17.3.2 实现DAO组件 569
17.3.3 部署DAO组件 574
17.4 业务逻辑层实现 575
17.4.1 设计业务逻辑组件 575
17.4.2 业务逻辑组件的异常处理 576
17.4.3 发送竞价通知邮件 578
17.4.4 实现业务逻辑层组件 578
17.4.5 业务层的权限控制 587
17.4.6 业务层的任务调度 588
17.4.7 事务管理 589
17.5 暴露业务逻辑方法 590
17.5.1 初始化Spring容器 590
17.5.2 配置DWR的核心Servlet 590
17.5.3 暴露业务逻辑方法 591
17.6 调用业务逻辑方法响应用户请求 592
17.6.1 页面加载时的函数 592
17.6.2 处理返回首页的请求 593
17.6.3 浏览所有流拍物品 593
17.6.4 处理用户登录 596
17.6.5 管理物品 600
17.6.6 管理物品种类 603
17.6.7 查看竞得物品 606
17.6.8 查看自己的竞价记录 608
17.6.9 浏览拍卖物品 609
17.6.10 参与竞价 611
17.7 本章小结 614
本章练习 614