第1章 Web服务器的发展 1
1.1 基本的Web服务器 1
1.2 CGI:公共网关接口 2
1.3 NSAPI,ISAPI和其他可装载模块 4
1.4 Active Server Pages 6
1.5 Servlets 8
1.6 XML和XSL样式单 9
1.7 Java Server Pages 10
2.1 JSP实例“Hello World” 11
第2章 开始学习JSP 11
2.2 在JSP中使用<%%>标签 13
2.3 用<%=%>显示一个值 16
2.4 插入注释 18
2.5 用<%!%>声明方法和变量 19
2.6 在一个JSP中处理多线程 21
2.7.1 访问页面时出错 25
2.7 故障排除 25
2.7.3 无法显示HTML 26
2.7.2 编译错误 26
3.1 一个“Hello World”的servlet例子 27
第3章 开始学习Servlet 27
3.1.2 运行时的类路径 28
3.1.1 Servlet的编译 28
3.1.3 HelloWorldServlet的进一步分析 29
3.2.1 Service方法 30
3.2 一个Servlet例子的详细分析 30
3.2.2 Init方法 31
3.3 发送一个响应到浏览器 32
3.2.4 GetServletInfo方法和getServletConfig方法 32
3.2.3 Destroy方法 32
3.5.1 JSP的优点和缺点 34
3.5 JSP和Servlet的选择 34
3.4 类HttpServlet 34
3.5.2 Servlet的优点和缺点 35
3.6.2 Servlet无法运行 36
3.6.1 无法编译servlet 36
3.6 故障排除 36
4.1 一个简单的HTML表单 37
第4章 创建HTML表单 37
4.2 使用对象request 39
4.3 在Servlet中获取表单变量 44
4.4 JavaScript和JSP 45
4.5.1 一个实际的HTML和JSP结合的例子 47
4.5 处理表单的各种方法 47
4.5.2 设置配置参数 52
4.5.3 锁定输出文件 53
4.6 调用JSP表单处理器的JSP输入表单 56
4.7 使用相同的JSP实现输入表单和表单处理器 65
4.8.2 JavaScript问题 70
4.8.1 表单和表单变量名 70
4.8 故障排除 70
4.8.3 文件锁定问题 71
5.1 存储不可见的表单变量数据 72
第5章 保存请求中的数据 72
5.2.1 在JSP中使用session对象 80
5.2 存储session对象中的数据 80
5.2.2 在servlet中使用session对象 82
5.3 session如何工作 84
5.4 强加一个session 85
5.5 session终止处理 86
5.6 处理不带Cookie的会话 90
5.6.1 关闭IE中的cookie 93
5.6.2 关闭Netscape中的cookie 94
5.7 存储应用程序范围内的数据 95
5.8.2 cookie设置 96
5.8.1 存储和接收数据 96
5.8 故障排除 96
5.8.3 URL重写 97
6.2 使用记录文件来调试应用程序 98
6.1 为什么调试比较困难 98
第6章 调试和错误处理 98
6.2.3 将记录写到一个文件 99
6.2.2 使用servlet Logging API 99
6.2.1 使用System.out和System.err 99
6.3 使用调试器 100
6.2.4 使用异常处理 100
6.3.1 使用Tomcat来调试servlet 101
6.3.2 用Tomcat来调试JSP 103
6.4.1 为JSP指定一个错误处理页面 104
6.4 错误处理 104
6.4.2 为Web服务器错误指定错误处理程序 105
6.5.3 调试问题 106
6.5.2 记录问题 106
6.5 故障排除 106
6.5.1 一般问题 106
7.1 引用其他文件 107
第7章 组织应用程序 107
7.1.1 JSP在运行时引用文件 109
7.1.2 将参数传递到被引用文件 111
7.1.3 从servlet中引用文件 113
7.2.1 JSP中跳转到其他页面 114
7.2 跳转到其他页面 114
7.2.2 servlet中跳转到其他页面 115
7.4 让你的应用程序更加模块化 117
7.3 在JSP和servlet中传递Java对象 117
7.2.3 传递参数到跳转后的页面 117
7.5 模块视图控制器的范例 126
7.5.2 一个控制器例子 127
7.5.1 模块视图控制器模型给了什么帮助? 127
7.5.3 一个视图例子 131
7.6 调用多个控制器和视图 133
7.7 在表单中使用applet 136
7.8.1 编译时调用 138
7.8 故障排除 138
7.8.2 运行时调用 139
8.1 设计购物车 140
第8章 进一步了解数据保存 140
8.1.1 创建数据对象 141
8.1.2 创建ShippingCart类 143
8.1.3 显示购物车的内容 146
8.1.4 添加和删除条目 149
8.1.5 定购结束 162
8.2 在cookie中存储数据 165
8.3.2 cookie问题 169
8.3.1 购物车问题 169
8.3 故障排除 169
9.1.1 页面中添加JavaBean 170
9.1 <jsp:useBean>标签 170
第9章 与JavaBean互动 170
9.1.3 设置JavaBean属性 172
9.1.2 获取JavaBean属性 172
9.1.4 直接通过参数设置属性 173
9.1.5 初始化一个新的JavaBean 177
9.1.6 己有JavaBean的类型 179
9.2 一个基于JavaBean的Web应用程序 180
9.3.3 修改bean类 185
9.3.2 JavaBean属性问题 185
9.3 故障排除 185
9.3.1 范围问题 185
10.1 设定JSP和Servlet线程安全 187
第10章 性能 187
10.3 用高速缓冲对象减少启动时间 190
10.2 用缓冲页面提高性能 190
10.4 预编译JSP 191
10.5.1 使用StringBuffer类 194
10.5 简单的Java优化 194
10.6.1 线程问题 195
10.6 故障排除 195
10.5.2 解析数字 195
10.5.3 创建对象 195
10.6.2 预编译问题 196
11.1.1 servlet装载 197
11.1 servlet的生命周期 197
第11章 JSP和servlet的生命周期 197
11.1.2 servlet初始化 198
11.1.3 servlet执行 199
11.2.1 JSP编译 200
11.2 JSP的生命周期 200
11.1.4 servlet清理 200
11.2.5 JSP清理 201
11.2.4 JSP执行 201
11.2.2 JSP装载 201
11.2.3 JSP初始化 201
11.3 重载其他类 202
11.4.1 init方法疑问 203
11.4 故障排除 203
11.4.2 类的重载 204
12.1.1 各种版本的HTTP协议 205
12.1 HTTP协议 205
第12章 浏览器和服务器的交互 205
12.1.2 查看浏览器产生的请求报头 207
12.3 常用的响应报头 210
12.2.4 User-Agent报头 210
12.2 常用的请求报头 210
12.2.1 Accept报头 210
12.2.2 Accept-Language报头 210
12.2.3 Accept-Charset报头 210
12.3.2 Content-Length报头 211
12.3.1 Content-Type报头 211
12.4 HTTP的POST命令 212
12.3.3 Cache-Control报头 212
12.5 GET与POST 213
12.7.1 请求报头 214
12.7 故障排除 214
12.6 HTTPS:安全的HTTP 214
12.7.2 运行Dumper程序 215
13.1.1 访问request参数 216
13.1 ServletRequest类 216
第13章 核心servlet组件 216
13.1.3 获取协议方面的信息 217
13.1.2 访问request的属性 217
13.1.5 处理上载文件 219
13.1.4 接收请求数据 219
13.1.6 获取地区(locale)信息 224
13.2.2 获取HTTP方法 225
13.2.1 获取报头各项值 225
13.2 HttpServletRequest类 225
13.2.5 获取Session信息 226
13.2.4 接收cookie 226
13.2.3 访问查询字符串 226
13.3.3 保存应用程序范围的对象 227
13.3.2 参数初始化 227
13.3 ServletContext类 227
13.3.1 获取服务器版本信息 227
13.3.6 访问应用程序资源 228
13.3.5 调用其他servlet和JSP 228
13.3.4 记录信息 228
13.4.3 设置地区特定信息 229
13.4.2 打开一个输出流 229
13.4 ServletResponse类 229
13.4.1 设定内容类型和长度 229
13.5.1 设置报头变量 230
13.5 HttpServletResponse类 230
13.4.4 缓冲响应 230
13.5.5 发送cookie 231
13.5.4 给URL编码 231
13.5.2 让浏览器重定向 231
13.5.3 返回状态信息 231
13.7 ServletOutputStream类 232
13.6 ServletInputStream类 232
13.8.2 控制session的终止 233
13.8.1 存储和接收对象 233
13.8 HttpSession类 233
13.8.3 获取session状态信息 234
13.10.1 设置域和路径 235
13.10 创建新的session 235
13.9 Cookie类 235
13.10.3 cookie的安全性 236
13.10.2 cookie的生命周期 236
13.10.5 cookie注释 237
13.10.4 cookie协议版本 237
13.11.3 cookie 238
13.11.2 记录消息 238
13.11 故障排除 238
13.11.1 报头各项值 238
14.1.1 request对象 239
14.1 内建JSP对象 239
第14章 核心JSP组件 239
14.1.8 page对象 240
14.1.7 config对象 240
14.1.2 response对象 240
14.1.3 out对象 240
14.1.4 session对象 240
14.1.5 application对象 240
14.1.6 pageContext对象 240
14.2.1 发送输出数据 241
14.2 JspWriter类 241
14.1.9 exception对象 241
14.2.2 缓冲区控制 242
14.2.3 使用PrintWriter 243
14.3.1 访问内建对象 244
14.3 PageContext类 244
14.3.2 从PageContext类访问各项属性 245
14.4 JspEngineInfo类 248
14.3.3 跳转和引用 248
14.5.1 缓冲问题 249
14.5 故障排除 249
14.5.2 引用和跳转问题 250
15.1.1 language选项 251
15.1 page指示符 251
第15章 JSP指示符 251
15.1.2 import选项 252
15.1.3 session选项 253
15.1.4 buffer和autoFlush选项 254
15.1.5 isThreadSafe选项 255
15.1.6 ErrorPage选项 257
15.1.7 isErrorPage选项 257
15.1.9 info选项 258
15.1.8 contentType选项 258
15.1.10 extends选项 259
15.2 include指示符 261
15.4.2 错误页面问题 262
15.4.1 page指示错误 262
15.3 taglib指示符 262
15.4 故障排除 262
15.4.3 超类问题 263
16.1 应用程序的三层结构 264
第16章 应用程序体系结构概述 264
16.1.2 应用程序随着时间的演变过程 265
16.1.1 应用程序级 265
16.1.4 你如何才能有半个层 266
16.1.3 物理级和逻辑级 266
16.2 单级应用程序 267
16.1.5 作者认为的级的概念 267
16.3 两级应用程序 268
16.4 三级应用程序 269
16.5.3 开发进度表的压力 270
16.5.2 可维护性 270
16.5 各因素的权衡 270
16.5.1 应用程序的复杂性 270
16.5.5 其他因素 271
16.5.4 开发小组的能力 271
16.6 混合结构 272
17.2 重写整个页面 273
17.1 设计Web屏幕 273
第17章 浏览器和服务器的交互 273
17.3 使用帧来显示内容 274
17.4 发送数据到一个隐藏帧 277
17.4.1 将数据发送到浏览器 279
17.4.2 处理多调用 282
17.5.2 JavaScript数据问题 283
17.5.1 隐藏帧问题 283
17.5 故障排除 283
17.5.3 多调用问题 284
18.1 存储和获取数据 285
第18章 单级Web应用程序 285
18.2 锁定文件 286
18.3 在文本文件中存储数据 292
18.4 在serialization对象中存储数据 307
18.5 在随机访问文件中存储数据 312
18.6.2 串行化 318
18.6.1 文件锁定 318
18.6 故障排除 318
19.1 创建连接池 319
第19章 创建两级应用程序 319
19.2 将对象映射到数据库表 323
19.2.1 一个对象到关系映射的例子 324
19.2.2 一个数据对象的例子 330
19.3 两级结构的问题报告系统 338
19.3.1 登录界面 340
19.3.2 主菜单 345
19.3.3 查询己有的问题报告 346
19.3.4 创建和更新问题报告 350
19.4 数据库锁定 360
19.5 创建更完善的连接池 361
19.6.1 使用JDBC 370
19.6 故障排除 370
19.6.2 连接池问题 371
20.1 代码存根和框架 372
第20章 三级应用程序的设计 372
20.2.1 可伸缩性 374
20.2 单客户端对象和多客户端对象 374
20.3 优化数据访问 375
20.2.3 合理权衡 375
20.2.2 可维护性 375
20.4 数据库锁定 376
20.5 采用企业级Java Bean的三级应用程序 377
21.1 使用单个RMI对象为所有请求服务 379
第21章 Web应用程序中使用RMI 379
21.2 每个浏览器session使用一个对象 383
21.3.1 数据库接口 384
21.3 一个RMI的应用程序 384
21.3.2 远程接口 387
21.3.3 ServiceRequests接口的实现 389
21.3.4 RemoteServiceRequest接口的实现 392
21.3.5 创建Web接口 395
21.3.6 编辑服务请求 397
21.4.2 运行RM工程序问题 400
21.4.1 运行rmic问题 400
21.4 故障排除 400
22.1 所有session使用一个CORBA 401
第22章 Web中使用CORBA 401
22.2 每个session使用独立的CORBA 408
22.2.1 使用CORBA结构 409
22.2.2 处理空(null)字符串 410
22.2.3 null字符的另一个解决方法 412
22.3 CORBA应用程序例子 413
22.4.2 运行CORBA程序 424
22.4.1 将IDL编译到Java 424
22.4 故障排除 424
23.1.1 entity Bean和session Bean 425
23.1 什么是企业级JavaBean 425
第23章 Web应用程序中使用企业级JavaBean 425
23.1.5 连接统筹 426
23.1.4 事务 426
23.1.2 containers(容器) 426
23.1.3 persistence(继续存在) 426
23.3 创建entity Bean 427
23.2 如何组合EJB、servlet和JSP 427
23.1.6 对象统筹 427
23.3.1 创建entity Bean工具 428
23.3.2 创建Home接口 442
23.3.3 创建Remote接口 443
23.4 创建sessionBean 444
23.5 创建无范围sessionBean 445
23.6 从JSP访问EJB 446
23.7 封装一个完整的EJB和JSP应用程序 448
23.8.2 JSP和EJB问题 454
23.8.1 EJB问题 454
23.8 故障排除 454
第24章 创建XML应用程序 455
24.1.1 JSP中发送XML 456
24.1 一个XML页面——“Hello World” 456
24.1.2 servlet中发送XML 457
24.2 XML的几个简单规则 458
24.3.1 自动生成XML 459
24.3 为什么使用带JSP和servlet的XML 459
24.3.2 使用SAX和DOM来解析XML 463
24.4.3 使用JOX问题 472
24.4.2 使用Sun的XML库 472
24.4 故障排除 472
24.4.1 JSP中生成XML 472
25.1 什么是XSL? 473
第25章 添加XSL样式表来提高XML应用程序性能 473
25.2 一个简单的XSL样式表 474
25.3 使用XPath标准来操作XML文档 478
25.4 浏览器中应用XML模板 480
25.5 应用来自servlet的XSL模板 481
25.6 选择JSP还是样式表? 487
25.7 故障排除 488
第26章 创建无线Web应用程序 489
26.1 无线“Hello World”程序页面 490
26.2.1 卡间导航 492
26.2 WML简介 492
26.2.2 创建输入表单 495
26.2.3 处理表单输入 496
26.3 在JSP和servlet中检测无线客户端 498
26.4 一个无线得分登记和报告系统 499
26.5 故障排除 516
26.5.1 在模拟器上运行 516
26.5.2 在电话上实际运行 516
第27章 图像传输的创建 517
27.1 图像不仅仅是静态文件 517
27.2 从servlet中发送图像 517
27.3 使用Java上载图像到servlet 520
27.4 从浏览器上载图像到servlet 521
27.5 在线执行图像处理 523
27.5.1 添加图像标题 524
27.5.2 图像压纹 529
27.5.3 边缘检测 533
27.5.4 舞台灯光效果 535
27.6.1 刷新问题 539
27.6.2 性能问题 539
27.6 故障排除 539
第28章 将JSP应用程序打包 540
28.1 一个简单的WAR文件 540
28.2 在Tomcat下安装一个WAR文件 542
28.3 在JRun下安装一个WAR文件 543
28.4 WAR配置选项 544
28.4.1 常规应用程序选项 544
28.4.2 Servlet选项 546
28.4.3 其他选项 548
28.5 故障排除 548
第29章 使用新标签扩展JSP 549
29.1 “Hello World”标签 549
29.2 包装和建立标签 551
29.3 使用自定义标签的条件引用 554
29.4 访问标签属性 557
29.5 使用自定义标签处理主体内容 562
29.6 添加脚本变量 564
29.7.2 属性值 567
29.7.1 安装问题 567
29.7.3 主体标签 567
29.7 故障排除 567
29.7.4 脚本变量 568
第30章 国际化 569
30.1 检测浏览器的地区选项 569
30.2 使用基于地区的文本格式 570
30.2.1 创建locale对象 571
30.2.2 日期格式化 572
30.2.3 货币格式化 573
30.2.4 获取浏览器指定语言的地区 574
30.3 在Web页面中使用资源包 577
30.4.1 多语言Web站点测试 583
30.4.2 资源包的装载 583
30.4 故障排除 583
31.1 基于角色的安全技术 584
31.2 基本身份验证 584
第31章 安全性 584
32.4 故障排除 605
32.4.1 直接运行XML-JSP文件 605
32.4.2 运行XMLToJSP程序 606
A.1 JSP语法 607
附录A JSP语法与API参考 607
附录 607
A.2 XML语法 612
A.3 Java Server Page的API 613
B.1 javax.servlet API 631
附录B Servlet API参考 631
B.2 Javax.servlet.http API 643
附录C Apache和Tomcat 653
C.1 怎样得到Tomcat 654
C.2 安装Tomcat 656
C.3 运行Tomcat Standalone 660
C.4 在Netscape Server for Windows下运行Tomcat 660
C.5 在IIS下运行Tomcat 663
C.6 在Apache下运行Tomcat 664
C.7 Tomcat配置 664
C.8 工作路径 665
C.9 登录 665
C.10 设置类的路径 665
C.11 验证 665
C.12 Tomcat的特点 665
附录D JRun 666
D.1 怎样获得JRun 667
D.2 安装JRun for Windows 667
D.3 安装JRun for Linux 670
D.4 启动JRun 671
D.5 JRun理 671
D.6 连接JRun和其他Web服务器 672
D.7 使用JRun作为Standalone服务器 676
D.8 工作路径 676
D.9 安装Web应用程序 677
D.10 设置类路径 678
D.11 日志文件 678
D.12 JRun的特殊点 678
附录E ServletExec 678
E.1 怎样得到ServletExec 679
E.2 安装ServletExec ISAPI Plug-In 680
E.3 安装ServletExec NSAPI Plug-In 681
E.4 安装ServletExec Standalone Server for Windows 681
E.5 安装ServletExec Standalone Server for Linux/UNIX 683
E.6 ServletExec管理 685
E.8 安装Web应用程序 685
E.7 工作路径 685
31.2.1 <security-constraint>标签 685
31.2.2 <login-config>标签 686
E.9 登录消息 687
E.10 设置类路径 687
E.11 ServletExec的特点 687
附录F Resin 687
31.3 创建自定义的登录表单 687
F.1 怎样得到Resin 688
F.2 在Windows上安装Resin 688
F.3 在Linux/UNIX上安装Resin 690
31.4 程序自动检查安全角色 690
F.4 运行Resin Standalone 691
F.5 在其他Web服务器上运行Resin 691
F.6 以Windows NT服务方式运行http和srun 691
F.12 添加验证用户 692
F.7 Resin管理 692
F.8 工作路径 692
F.10 日志 692
F.11 设置类路径 692
F.9 安装Web应用程序 692
F.13 Resin的特点 693
31.5 身份验证中使用客户端安全证书 693
31.6.2 安全证书问题 694
31.6.1 身份验证问题 694
31.6 故障排除 694
32.1 XML JSP语法 695
第32章 JSP的XML语法 695
32.3 XML JSP语法翻译 697
32.2 XML中的HelloWorld JSP 697