第一部分 基础知识 1
第1章 服务器设置和配置 1
1.1 下载Java开发工具包(JDK) 2
1.2 为桌面系统下载一个服务器 2
1.3 更改端口及配置其他服务器设置 4
1.3.1 Apache Tomcat 4
1.3.2 Allaire/Macromedia JRun 5
1.4 测试服务器 7
1.3.3 New Atlanta ServletExec 7
1.5 简单的HTML和JSP页测试 8
1.6 设置开发环境 11
1.6.1 建立开发目录 11
1.6.2 制作启动和停止服务器的快捷方式 11
1.6.3 设置CLASSPATH 12
1.6.4 寻找或安装servlet和JSP API文档 13
1.7 编译和测试某些简单的servlet 13
1.7.1 测试1:不使用程序包的servlet 14
1.7.2 测试2:使用程序包的servlet 15
1.7.3 测试3:使用程序包和实用程序的servlet 16
1.8 建立一种简化的部署方法 18
1.8.1 复制到某个快捷方式或符号链接 19
1.8.2 使用javac的-d选项 19
1.8.3 让IDE负责部署 19
1.8.4 使用ant或类似的工具 20
1.9 缺省Web应用部署目录汇总 20
1.9.1 Tomcat 20
1.9.2 JRun 21
1.9.3 ServletExec 22
第2章 基本servlet程序设计快速入门 23
2.1 servlet较“传统”CGI的优越之处 25
2.1.1 有效性 25
2.1.2 方便性 25
2.1.3 功能强 25
2.1.4 可移植性 26
2.1.5 安全性 26
2.1.6 廉价 26
2.2 基本servlet结构 26
2.2.1 生成纯文本的servlet 27
2.2.2 生成HTML的servlet 28
2.2.3 servlet打包 30
2.2.4 简单的用HTML建立的实用程序 31
2.3 servlet的生存期 33
2.3.1 init方法 33
2.3.2 service方法 35
2.3.3 doGet、doPost和doXxx方法 36
2.3.4 SingleThreadModel接口 36
2.4 客户机请求:表单数据 37
2.4.1 从CGI程序中读取表单数据 37
2.3.5 destroy方法 37
2.4.2 从servlet中读取表单数据 38
2.4.3 例子:读取三个明确的参数 38
2.4.4 过滤查询数据 41
2.5 客户机请求:HTTP请求头 41
2.5.1 从servlet读取请求头 42
2.5.2 例子:构造一个所有请求头的表 43
2.5.3 理解HTTP 1.1请求头 45
2.6 标准CGI变量的servlet等价物 48
2.7.1 指定状态代码 50
2.7 服务器响应:HTTP状态代码 50
2.7.2 HTTP 1.1状态代码 51
2.7.3 各种搜索引擎的前端 55
2.8 服务器响应:HTTP响应头 60
2.8.1 从servlet中设置响应头 60
2.8.2 了解HTTP 1.1响应头 61
2.9 cookie 65
2.9.1 cookie的好处 65
2.9.2 cookie的某些问题 66
2.9.3 servlet cookie API 67
2.9.4 设置和读取cookie的例子 69
2.9.5 基本cookie实用程序 73
2.10 会话跟踪 75
2.10.1 会话跟踪的需求 75
2.10.2 会话跟踪API 76
2.10.3 终止会话 79
2.10.4 显示每个客户机访问计数的servlet 80
2.10.5 一个简化的购物车应用 81
第3章 基本JSP程序设计快速入门 85
3.1 JSP综述 86
3.2 JSP的优点 87
3.2.1 与ASP或ColdFusion比较 87
3.2.2 与PHP比较 87
3.2.3 与纯servlet比较 87
3.2.4 与JavaScript比较 88
3.3 利用JSP脚本元素调用代码 88
3.3.1 表达式 89
3.3.2 scriptlet 93
3.3.3 声明 96
3.3.4 预定义变量 99
3.4 构造自动生成的servlet:JSP页指令 100
3.4.1 import属性 101
3.4.2 contentType属性 103
3.4.3 isThreadSafe属性 105
3.4.4 session属性 106
3.4.5 buffer属性 106
3.4.6 autoflush属性 106
3.4.11 language属性 107
3.4.10 isErrorPage属性 107
3.4.8 info属性 107
3.4.9 errorPage属性 107
3.4.7 extends属性 107
3.4.12 pageEncoding属性 108
3.4.13 指令的XML语法 108
3.5 在JSP文档中包含文件和applet 108
3.5.1 在页转换时包含文件:include指令 108
3.5.2 在请求时包含页:jsp:include动作 109
3.5.3 基于Java插件包含applet 111
3.6 对JSP使用JavaBeans 118
3.6.1 基本bean的使用 119
3.6.2 例子:StringBean 121
3.6.3 设置bean属性 122
3.6.4 共享bean 127
3.7 定义定制的JSP标记库 130
3.7.1 构成标记库的组件 131
3.7.2 定义基本标记 134
3.7.3 给标记分配属性 139
3.7.4 包含标记体 143
3.7.5 有选择地包含标记体 147
3.7.6 操纵标记体 150
3.7.7 多次包含或操纵标记体 153
3.7.8 使用嵌套的标记 156
3.8 集成servlet和JSP:MVC体系结构 162
3.8.1 发送请求 163
3.8.2 例子:网上旅游代理 166
3.8.3 从JSP页中发送请求 174
第二部分 Web应用 177
第4章 使用和部署Web应用 177
4.1 注册Web应用 178
4.1.1 对Tomcat注册一个Web应用 179
4.1.2 对JRun注册Web应用 182
4.1.3 对ServletExec注册一个Web应用 184
4.2 Web应用的结构 186
4.2.1 各种文件类型的位置 187
4.2.2 样例层次结构 189
4.3 在WAR文件中部署Web应用 190
4.4 记录对服务器库的依赖关系 191
4.4.1 建立一个清单文件 191
4.4.2 清单文件的内容 192
4.5 处理Web应用中的相对URL 193
4.6 在Web应用之间共享数据 196
第5章 用web.xml控制Web应用的行为 203
5.1 定义头和根元素 204
5.2 部署描述符文件内的元素次序 205
5.3 分配名称和定制的URL 206
5.3.1 分配名称 206
5.3.2 定义定制的URL 208
5.3.3 命名JSP页面 210
5.4.1 重新映射/servlet/URL模式 212
5.4 禁止激活器servlet 212
5.4.2 全局禁止激活器:Tomcat 214
5.4.3 全局禁止激活器:JRun 216
5.5 初始化和预装载servlet与JSP页面 216
5.5.1 分配servlet初始化参数 216
5.5.2 分配JSP初始化参数 218
5.5.3 提供应用范围内的初始化参数 221
5.5.4 在服务器启动时装载servlet 221
5.6 声明过滤器 222
5.7 指定欢迎页 224
5.8.1 error-code元素 225
5.8 指定处理错误的页面 225
5.8.2 exception-type元素 227
5.9 提供安全性 229
5.9.1 指定验证的方法 229
5.9.2 限制对Web资源的访问 231
5.9.3 分配角色名 233
5.10 控制会话超时 233
5.12 关联文件与MIME类型 234
5.11 Web应用的文档化 234
5.13 定位TLD 235
5.14 指定应用事件监听程序 235
5.15 J2EE元素 236
第6章 Web应用样例:网上船舶商店 239
6.1 通用配置文件 240
6.2 顶层页面 242
6.3 第二层页面 245
6.4 物品项的显示servlet 249
6.5 购买的显示页面 256
第三部分 Web应用的安全性 261
第7章 声明性的安全性 261
7.1 基于表单的验证 262
7.1.1 设置用户名、口令和角色 264
7.1.2 告诉服务器验证类型并指定登录和登录失败页面的位置 266
7.1.3 建立登录页面 267
7.1.4 建立报告登录失败的页面 268
7.1.5 指定受口令保护的URL 268
7.1.6 指定只对SSL有效的URL 270
7.1.7 关闭激活器servlet 272
7.2 例子:基于表单的验证 273
7.2.1 主页 273
7.2.2 部署描述符文件 273
7.2.3 口令文件 276
7.2.4 登录和登录失败页面 277
7.2.5 investing目录 278
7.2.6 ssl目录 280
7.2.7 admin目录 284
7.2.8 重定向器servlet 285
7.2.9 无保护的页面 286
7.3 BASIC验证 288
7.3.1 设置用户名、口令和角色 289
7.3.2 告诉服务器你正在使用BASIC验证并指定域名 290
7.3.3 指定受口令保护的URL 290
7.3.4 指定只对SSL有效的URL 290
7.4 例子:BASIC验证 290
7.4.1 主页 291
7.4.2 部署描述符文件 292
7.4.3 口令文件 293
7.4.4 财政计划 294
7.4.5 业务计划 295
7.4.6 重定向servlet 296
7.5 配置Tomcat使用SSL 297
第8章 可编程的安全性 303
8.1 组合容器管理的及可编程的安全性 304
8.2 例子:组合容器管理的及可编程的安全性 306
8.3 编程处理所有的安全性 310
8.4 例子:编程处理所有的安全性 311
8.5.2 重定向非SSL的请求 314
8.5 使用可编程安全性及SSL 314
8.5.1 确定是否正在使用SSL 314
8.5.3 查找密钥位数 315
8.5.4 查找加密算法 315
8.5.5 访问客户机的X509证书 315
8.6 例子:可编程的安全性和SSL 316
第四部分 servlet和JSP的新功能 319
第9章 servlet和JSP过滤器 319
9.1 建立基本过滤器 320
9.1.1 建立一个实现Filter接口的类 321
9.1.2 将过滤行为放入doFilter方法 322
9.1.3 调用FilterChain对象的doFilter方法 322
9.1.4 对适当的servlet和JSP页面注册过滤器 322
9.1.5 禁用激活器Servlet 323
9.2 样例:报告过滤器 325
9.3 从过滤器中访问servlet环境 330
9.4 例子:日志记录过滤器 331
9.5 利用过滤器的初始化参数 333
9.6 例子:访问时的过滤器 334
9.8 例子:禁止站点过滤器 337
9.7 阻塞响应 337
9.9 修改响应 343
9.10 例子:替换过滤器 345
9.10.1 通用替换过滤器 345
9.10.2 一个特殊的替换过滤器 348
9.11 例子:压缩过滤器 351
9.12 完整的过滤器部署描述符文件 356
第10章 应用事件框架 361
10.1 监控servlet环境的建立和消除 363
10.2 例子:初始化最经常使用的数据 364
10.3 检测servlet环境属性中的改变 370
10.4 例子:监控最常用的数据的改变 370
10.5 用标记库封装监听程序 378
10.6 例子:封装公司名监听程序 380
10.7 识别会话的建立和消除 386
10.8 例子:对会话进行计数的监听程序 387
10.9 监视会话属性中的改变 393
10.10 例子:监控游艇对象 394
10.11.1 跟踪日用特价物品的订单 400
10.11 使用多个协同监听程序 400
10.11.2 重置日用特价物品订单计数 407
10.12 完整的事件部署描述符文件 411
第五部分 新标记库功能 417
第11章 JSP 1.2中的新标记库功能 417
11.1 使用新标记库描述符文件格式 418
11.1.1 新的DOCTYPE声明 418
11.1.2 重命名的元素 419
11.1.3 新元素 420
11.1.4 汇总 420
11.2 将监听程序与标记库一起打包 421
11.2.1 跟踪活动的会话 422
11.2.2 测试会话计数 428
11.3 利用TagLibraryValidator检查语法 431
11.3.1 例子:跟踪标记结构 433
11.3.2 例子:实施标记嵌套次序 437
11.4 补充知识:用SAX 2.0分析XML 446
11.4.1 安装和设置 446
11.4.2 分析 447
11.5 用TryCatchFinally接口处理异常 448
11.7 循环而不生成BodyContent 452
11.6 返回值的新名称 452
11.7.1 JSP 1.1循环标记 453
11.7.2 JSP 1.2循环标记 456
11.8 在TLD文件中引入脚本变量 458
第12章 JSP标准标记库 459
12.1 使用JSTL:综述 460
12.1.1 jr和jx库 460
12.1.2 forEach循环标记 461
12.1.4 根据条件求值的标记 462
12.1.3 forTokens循环标记 462
12.1.5 表达式语言支持标记 463
12.2 安装和配置JSTL 464
12.2.1 下载JSTL文件 464
12.2.2 访问JSTL文档资料 464
12.2.3 使JSTL类对服务器有效 465
12.2.4 将JSTL TLD文件放入WEB-INF目录 465
12.2.5 建立TLD文件位置的别名 465
12.2.6 在web.xml中定义表达式语言 466
12.3.1 对直接数字值进行循环 467
12.3 用forEach标记进行循环 467
12.2.7 下载和安装XML分析程序 467
12.3.2 用指定的步长进行循环 470
12.3.3 对数组进行循环 475
12.3.4 对枚举类型进行循环 479
12.3.5 对串中的项进行循环 482
12.3.6 对多种数据类型进行循环 485
12.4 访问循环状态 493
12.5 用forTokens标记进行循环 495
12.5.1 一个简单的记号循环 497
12.5.2 嵌套的记号循环 498
12.6 对项进行条件求值 502
12.6.1 if标记 503
12.6.2 choose、when和otherwise标记 505
12.6.3 带choose标记的set标记的用法 508
12.7 使用表达式语言 511
12.7.1 set标记 512
12.7.2 expr标记 513
12.7.3 declare标记 516
附录 服务器的组织和结构 519