第一部分 servlet入门 3
第1章 概述 3
1.1 Java引起的变革 4
1.1.1 Java适用的应用场合 4
1.1.2 电子商务的作用 4
1.2 本书的内容安排 5
1.2.1 读者的知识背景 6
1.2.2 本书的组织 6
1.3 小结 6
第2章 Web环境的编程 7
2.1 万维网 8
2.1.1 Web的起源 8
2.1.2 Web应用程序的发展 8
2.2.1 Web浏览器和Web服务器的交互 9
2.2 超文本传输协议(HTTP) 9
2.2.2 HTTP请求 11
2.2.3 HTTP响应 12
2.2.4 组合请求 12
2.3 小结 14
第3章 servlet概述 15
3.1 基本知识 16
3.1.1 servlet是什么 16
3.1.2 servlet的生命周期 17
3.1.3 servlet和HTTP 17
3.2 一个完整的示例 18
3.3 小结 21
第二部分 servlet宝典 25
第4章 HTML客户端 25
4.1.2 技术 32
4.1.3 讨论 32
4.1.1 问题 32
4.1 提取参数的值 32
4.2 处理多值参数 35
4.2.1 问题 35
4.2.2 技术 35
4.2.3 讨论 36
4.3 同时处理GET和POST请求 37
4.3.1 问题 37
4.3.2 技术 37
4.3.3 讨论 37
4.4 创建用来返回的Web页 38
4.4.1 问题 38
4.4.2 技术 38
4.4.3 讨论 38
4.5.3 讨论 39
4.5.2 技术 39
4.5.1 问题 39
4.5 结构化的HTML生成 39
4.6 把错误消息发送回客户端 54
4.6.1 问题 54
4.6.2 技术 54
4.6.3 讨论 54
4.7.3 讨论 56
4.7.2 技术 56
4.7.1 问题 56
4.7 重定向用户到不同的Web页 56
4.8 servlet生成的框架 57
4.8.1 问题 57
4.8.2 技术 57
4.8.3 讨论 57
第5章 数据库访问 69
5.1 创建来自数据库查询的Web页 71
5.1.1 问题 71
5.1.3 讨论 72
5.1.2 技术 72
5.2 连接池 78
5.2.1 问题 78
5.2.2 技术 78
5.2.3 讨论 79
5.3 正确得到列号 103
5.3.1 问题 103
5.3.2 技术 103
5.3.3 讨论 104
5.4 JDBC和ODBC桥 104
5.4.1 问题 104
5.4.2 技术 104
5.4.3 讨论 105
5.5.3 讨论 111
5.5.2 技术 111
5.5.1 问题 111
5.5 注册JDBC驱动程序 111
5.6 使用PreparedStatement 112
5.6.1 问题 112
5.6.2 技术 113
5.6.3 讨论 113
5.7 使用Commit和Rollback处理事务 116
5.7.1 问题 116
5.7.2 技术 116
5.7.3 讨论 116
5.8 为通用代码使用DatabaseMetaData 117
5.8.1 问题 117
5.8.2 技术 117
5.8.3 讨论 118
5.9.3 讨论 140
5.9.2 技术 140
5.9 分析ResultSet中的列 140
5.9.1 问题 140
5.10 处理SQL日期 144
5.10.1 问题 144
5.10.2 技术 144
5.10.3 讨论 144
5.11 从数据库读取二进制对象 145
5.11.1 问题 145
5.11.2 技术 145
5.11.3 讨论 145
5.12 记录JDBC驱动程序的活动 148
5.12.1 问题 148
5.13 检测空值数据 149
5.13.1 问题 149
5.12.2 技术 149
5.12.3 讨论 149
5.13.2 技术 150
5.13.3 讨论 150
第6章 调试servlet 151
6.1.2 技术 153
6.1.3 讨论 153
6.1.1 问题 153
6.1 常见错误的校验表 153
6.2 理解类路径 154
6.2.1 问题 154
6.2.2 技术 154
6.2.3 讨论 154
6.3 截获servlet请求 156
6.3.1 问题 156
6.3.2 技术 156
6.3.3 讨论 165
6.4.2 技术 167
6.4.1 问题 167
6.4 Web服务器看到的是什么 167
6.4.3 讨论 168
6.5 servlet日志 179
6.5.1 问题 179
6.5.2 技术 179
6.5.3 讨论 179
6.6 使用Java调试器 182
6.6.1 问题 182
6.6.2 技术 182
6.6.3 讨论 182
6.7.2 技术 191
6.7.3 讨论 191
6.7.1 问题 191
6.7 Allaire的ServletDebugger 191
6.8 使用New Atlanta的ServletExec调试器 206
6.8.1 问题 206
6.8.2 技术 206
6.8.3 讨论 206
第7章 会话管理 209
7.1 创建HTTP会话 210
7.1.1 问题 210
7.1.2 技术 211
7.1.3 讨论 211
7.2 控制应用程序的顺序 216
7.2.1 问题 216
7.2.2 技术 216
7.2.3 讨论 216
7.3.2 技术 224
7.3.3 讨论 224
7.3.1 问题 224
7.3 在隐藏字段中保存状态 224
7.4 在Cookies中保存状态 234
7.4.1 问题 234
7.4.2 技术 234
7.4.3 讨论 234
7.5.3 讨论 237
7.5.2 技术 237
7.5.1 问题 237
7.5 URL重写 237
7.4.4 参见 237
7.6 HTTP会话绑定事件 238
7.6.1 问题 238
7.6.2 技术 238
7.6.3 讨论 238
7.7.3 讨论 262
7.7.2 技术 262
7.7.1 问题 262
7.7 防止名称空间冲突 262
7.8 购物车应用程序 263
7.8.1 问题 263
7.8.2 技术 263
7.8.3 讨论 263
第8章 servlet的生命周期问题 297
8.1 servlet类路径和动态重加载 300
8.1.1 问题 300
8.1.2 技术 300
8.1.3 讨论 300
8.2 初始化参数 305
8.2.1 问题 305
8.2.2 技术 305
8.2.3 讨论 305
8.3.3 讨论 306
8.3.2 技术 306
8.3 指定多个初始化参数 306
8.3.1 问题 306
8.4 服务请求 307
8.4.1 问题 307
8.4.2 技术 307
8.4.3 讨论 307
8.4.4 参见 310
8.5 关闭servlet 311
8.5.1 问题 311
8.5.2 技术 311
8.5.3 讨论 311
8.6.2 技术 315
8.6.3 讨论 315
8.6 保存调用之间的状态 315
8.6.1 问题 315
8.6.4 参见 318
8.7 预先加载servlet 318
8.7.1 问题 318
8.7.2 技术 319
8.7.3 讨论 319
第9章 线程问题 321
9.1.2 技术 330
9.1.3 讨论 330
9.1 线程的安全性 330
9.1.1 问题 330
9.2 SingleThreadModel 342
9.2.1 问题 342
9.2.2 技术 342
9.2.3 讨论 343
9.3.3 讨论 344
9.3.2 技术 344
9.3.1 问题 344
9.3 多线程的应用程序 344
第10章 servlet之间的通信 363
10.1 servlet链 365
10.1.1 问题 365
10.1.2 技术 365
10.1.3 讨论 365
10.2 使用MIME类型的servlet链 373
10.2.1 问题 373
10.2.2 技术 373
10.2.3 讨论 373
10.3 用JRun配置servlet链 380
10.3.1 问题 380
10.3.2 技术 380
10.3.3 讨论 381
10.4.2 技术 382
10.4.1 问题 382
10.4 用ServletExec配置servlet链 382
10.4.3 讨论 383
10.5 HTTP重定向 384
10.5.1 问题 384
10.5.2 技术 384
10.5.3 讨论 384
10.6 转发请求 394
10.6.1 问题 394
10.6.2 技术 394
10.6.3 讨论 395
10.7 包含来自其他servlet的输出 395
10.7.1 问题 395
10.7.2 技术 395
10.7.3 讨论 395
第11章 其他客户端 401
11.1.2 技术 402
11.1.1 问题 402
11.1 小程序与servlet之间的通信 402
11.1.3 讨论 403
11.2 扩充Java小程序功能 413
11.2.1 问题 413
11.2.2 技术 413
11.2.3 讨论 413
11.3 Perl客户端 416
11.3.1 问题 416
11.3.2 技术 416
11.3.3 讨论 416
11.4 XML客户端 424
11.4.1 问题 424
11.4.2 技术 424
11.4.3 讨论 424
第12章 其他服务器 443
12.1.3 讨论 444
12.1.2 技术 444
12.1 用HTTP PUT实现文件上载 444
12.1.1 问题 444
12.2 用multipart/form-data上载文件 452
12.2.1 问题 452
12.2.2 技术 452
12.2.3 讨论 452
12.3 使用servlet中的本机方法 461
12.3.1 问题 461
12.3.2 技术 461
12.3.3 讨论 461
12.4 从CGI脚本获得数据 474
12.4.1 问题 474
12.4.2 技术 474
12.4.3 讨论 474
12.5.3 讨论 482
12.5.2 技术 482
12.5 调用ASP 482
12.5.1 问题 482
12.6 用servlet当FTP代理 488
12.6.1 问题 488
12.6.2 技术 488
12.6.3 讨论 488
12.7 servlet作为CORBA客户端 514
12.7.1 问题 514
12.7.2 技术 514
12.7.3 讨论 514
第13章 JSP 527
13.1 表达式 530
13.1.1 语法 530
13.1.2 说明 530
13.1.3 示例 530
13.2.2 说明 532
13.2.3 示例 532
13.2 Scriptlet 532
13.2.1 语法 532
13.3 隐式对象 541
13.4 声明 542
13.4.1 语法 542
13.4.2 说明 542
13.4.3 示例 542
13.5 注释 555
13.5.1 语法 555
13.5.2 说明 555
13.5.3 示例 556
13.6.3 示例 557
13.6.2 说明 557
13.6.1 语法 557
13.6 包含文件 557
13.7 转发请求 563
13.7.1 语法 563
13.7.2 说明 563
13.7.3 示例 563
13.8 page伪指令 567
13.8.1 语法 567
13.8.2 说明 568
13.9 使用JSP和JavaBeans 595
13.9.1 语法 595
13.9.2 说明 595
13.9.3 示例 599
第14章 应用程序 639
14.1.1 转换图像格式的类库 640
14.1 支持新图像类型 640
14.1.2 集成转换软件和Web的servlet 641
14.1.3 使用Image Viewer Servlet 642
14.2 作为电子表格下载数据 644
14.2.1 MIME类型和CSV 644
14.2.2 servlet弥补差距 645
14.3 发送邮件 651
14.3.1 Java邮件包 652
14.3.2 SMTP 652
14.3.3 实用的例子 652
14.4 接收邮件 658
14.4.1 实用的例子 658
14.5 servlet转换成JSP(LogViewer) 664
14.5.1 LogViewer servlet 664
14.6 基于Web的类浏览器 672
14.6.1 一个检验类的JSP网页 672
14.6.2 浏览JSP类 687
14.7 仿真Unix监护程序和Windows NT服务 688
14.7.1 servlet解决方案 689
14.8 4个4的问题 707
14.8.1 说明符号运算 707
14.8.2 解决算法 713
附录A Servlet APl参考 727
A.1 Cookie 728
A.1.1 上下文 728
A.1.2 说明 728
A.1.3 概要 728
A.1.4 构造函数 729
A.1.5 方法 729
A.2.3 概要 732
A.2.2 说明 732
A.2.1 上下文 732
A.2 GenericServlet 732
A.2.4 构造函数 733
A.2.5 方法 733
A.3 HttpJSPPage 735
A.3.1 上下文 735
A.3.2 说明 735
A.3.3 概要 735
A.3.4 方法 735
A.4 HttpServlet 735
A.4.1 上下文 735
A.4.2 说明 736
A.4.3 概要 736
A.4.4 构造函数 736
A.4.5 方法 737
A.5.2 说明 739
A.5.3 概要 739
A.5.1 上下文 739
A.5 HttpServletRequest 739
A.5.4 方法 740
A.6 HttpServletResponse 743
A.6.1 上下文 743
A.6.2 说明 743
A.6.3 概要 743
A.6.4 方法 745
A.7 HttpSession 747
A.7.1 上下文 747
A.7.2 说明 747
A.7.3 概要 747
A.7.4 方法 748
A.8.4 构造函数 750
A.8.3 概要 750
A.8.2 说明 750
A.8.1 上下文 750
A.8 HttpSessionBindingEvent 750
A.8.5 方法 751
A.9 HtttpSessionBindingListener 751
A.9.1 上下文 751
A.9.2 说明 751
A.9.3 概要 751
A.9.4 方法 751
A.10 HttpSessionContext 752
A.10.1 上下文 752
A.10.2 说明 752
A.10.3 概要 752
A.10.4 方法 752
A.11.5 方法 753
A.11.4 构造函数 753
A.11.3 概要 753
A.11.2 说明 753
A.11.1 上下文 753
A.11 HttpUtils 753
A.12 JspEngineInfo 754
A.12.1 上下文 754
A.12.2 说明 754
A.12.3 概要 754
A.12.4 构造函数 755
A.12.5 方法 755
A.13 JspFactory 755
A.13.1 上下文 755
A.13.2 说明 755
A.13.3 概要 755
A.13.4 构造函数 756
A.13.5 方法 756
A.14.1 上下文 757
A.14 JspPage 757
A.14.2 说明 758
A.14.3 概要 758
A.14.4 方法 758
A.15 JspWriter 758
A.15.1 上下文 758
A.15.2 说明 758
A.15.3 概要 759
A.15.5 方法 760
A.15.4 构造函数 760
A.16 PageContext 765
A.16.1 上下文 765
A.16.2 说明 765
A.16.3 概要 765
A.16.4 构造函数 767
A.16.5 方法 767
A.17.4 方法 771
A.17.3 概要 771
A.17 RequestDispatcher 771
A.17.2 说明 771
A.17.1 上下文 771
A.18 servlet 772
A.18.1 上下文 772
A.18.2 说明 772
A.18.3 概要 772
A.18.4 方法 772
A.19 ServletConfig 773
A.19.1 上下文 773
A.19.2 说明 773
A.20.2 说明 774
A.20.1 上下文 774
A.20 ServletContext 774
A.19.4 方法 774
A.19.3 概要 774
A.20.3 概要 775
A.20.4 方法 775
A.21 ServletException 778
A.21.1 上下文 778
A.21.2 说明 778
A.21.3 概要 778
A.21.4 构造函数 779
A.21.5 方法 779
A.22 ServletInputStream 779
A.22.1 上下文 779
A.23 ServletOutputStream 780
A.22.5 方法 780
A.23.1 上下文 780
A.22.4 构造函数 780
A.22.3 概要 780
A.22.2 说明 780
A.23.2 说明 781
A.23.3 概要 781
A.23.4 构造函数 782
A.23.5 方法 782
A.24.1 上下文 784
A.24 ServletRequest 784
A.24.2 说明 785
A.24.3 概要 785
A.24.4 方法 785
A.25 ServletResponse 788
A.25.1 上下文 788
A.25.2 说明 788
A.25.3 概要 788
A.26.1 上下文 789
A.25.4 方法 789
A.26 SingleThreadModel 789
A.26.2 说明 790
A.26.3 方法 790
A.27 UnavailableException 790
A.27.1 上下文 790
A.27.2 说明 790
A.27.3 概要 790
A.27.4 构造函数 791
A.27.5 方法 791
附录B HTTP头快速参考 793
附录C servlet引擎 799
C.1 JSWDK 800
C.2 JRun 800
C.3 ServletExec 800
C.4 Apache JServ 800
C.5 Tomcat 801