第1章 Java网络编程入门 1
1.1 进程之间的通信 1
1.2 计算机网络的概念 3
1.3 OSI参考模型 5
1.4 TCP/IP参考模型和TCP/IP 7
1.4.1 IP 10
1.4.2 TCP以及端口 14
1.4.3 RFC简介 15
1.4.4 客户/服务器通信模式 16
1.5 用Java编写客户/服务器程序 17
1.5.1 创建EchoServer 18
1.5.2 创建EchoClient 20
1.6 小结 23
1.7 练习题 24
第2章 Socket用法详解 26
2.1 构造Socket 26
2.1.1 设定等待建立连接的超时时间 27
2.1.2 设定服务器的地址 28
2.1.3 设定客户端的地址 28
2.1.4 客户连接服务器时可能抛出的异常 29
2.1.5 使用代理服务器 33
2.1.6 InetAddress地址类的用法 33
2.1.7 NetworkInterface类的用法 36
2.2 获取Socket的信息 36
2.3 关闭Socket 39
2.4 半关闭Socket 40
2.5 设置Socket的选项 45
2.5.1 TCP_NODELAY选项 46
2.5.2 SO_RESUSEADDR选项 46
2.5.3 SO_TIMEOUT选项 47
2.5.4 SO_LINGER选项 50
2.5.5 SO_RCVBUF选项 53
2.5.6 SO_SNDBUF选项 53
2.5.7 SO_KEEPALIVE选项 53
2.5.8 OOBINLINE选项 54
2.5.9 IP服务类型选项 54
2.5.10 设定连接时间、延迟和带宽的相对重要性 55
2.6 发送邮件的SMTP客户程序 56
2.7 小结 61
2.8 练习题 62
第3章 ServerSocket用法详解 64
3.1 构造ServerSocket 64
3.1.1 绑定端口 64
3.1.2 设定客户连接请求队列的长度 65
3.1.3 设定绑定的IP地址 68
3.1.4 默认构造方法的作用 68
3.2 接收和关闭与客户的连接 68
3.3 关闭ServerSocket 69
3.4 获取ServerSocket的信息 70
3.5 ServerSocket选项 72
3.5.1 SO_TIMEOUT选项 72
3.5.2 SO_REUSEADDR选项 73
3.5.3 SO_RCVBUF选项 74
3.5.4 设定连接时间、延迟和带宽的相对重要性 75
3.6 创建多线程的服务器 75
3.6.1 为每个客户分配一个线程 76
3.6.2 创建线程池 78
3.6.3 使用JDK类库提供的线程池 84
3.6.4 向线程池提交有异步运算结果的任务 85
3.6.5 使用线程池的注意事项 89
3.7 关闭服务器 91
3.8 小结 95
3.9 练习题 96
第4章 非阻塞通信 98
4.1 线程阻塞的概念 98
4.1.1 线程阻塞的原因 98
4.1.2 服务器程序用多线程处理阻塞通信的局限 99
4.1.3 非阻塞通信的基本思想 101
4.2 非阻塞通信API的用法 102
4.2.1 缓冲区 103
4.2.2 字符编码Charset 106
4.2.3 通道 106
4.2.4 SelectableChannel类 108
4.2.5 ServerSocketChannel类 109
4.2.6 SocketChannel类 109
4.2.7 Selector类 112
4.2.8 SelectionKey类 114
4.2.9 Channels类 116
4.2.10 Socket选项 117
4.3 服务器编程范例 119
4.3.1 创建阻塞的EchoServer 120
4.3.2 创建非阻塞的EchoServer 123
4.3.3 在EchoServer中混合用阻塞模式与非阻塞模式 131
4.4 客户端编程范例 135
4.4.1 创建阻塞的EchoClient 135
4.4.2 创建非阻塞的EchoClient 137
4.5 异步通道和异步运算结果 141
4.6 在GUI中用SwingWorker实现异步交互 147
4.6.1 SwingWorker类的用法 150
4.6.2 用SwingWorker类来展示进度条 152
4.6.3 用SwingWorker类实现异步的AsynEchoClient 154
4.7 小结 155
4.8 练习题 156
第5章 创建非阻塞的HTTP服务器 159
5.1 HTTP简介 159
5.1.1 HTTP请求格式 160
5.1.2 HTTP响应格式 162
5.1.3 测试HTTP请求 163
5.2 创建非阻塞的HTTP服务器 168
5.2.1 服务器主程序:HttpServer类 168
5.2.2 具有自动增长的缓冲区的ChannelIO类 170
5.2.3 负责处理各种事件的Handler接口 172
5.2.4 负责处理接收连接就绪事件的AcceptHandler类 172
5.2.5 负责接收HTTP请求和发送HTTP响应的RequestHandler类 173
5.2.6 代表HTTP请求的Request类 175
5.2.7 代表HTTP响应的Response类 178
5.2.8 代表响应正文的Content接口及其实现类 180
5.2.9 运行HTTP服务器 183
5.3 小结 183
5.4 练习题 185
第6章 客户端协议处理框架 186
6.1 客户端协议处理框架的主要类 186
6.2 在客户程序中运用协议处理框架 187
6.2.1 URL类的用法 187
6.2.2 URLConnection类的用法 189
6.3 实现协议处理框架 194
6.3.1 创建EchoURLConnection类 195
6.3.2 创建EchoURLStreamHandler及工厂类 196
6.3.3 创建EchoContentHandler类及工厂类 197
6.3.4 在EchoClient类中运用ECHO协议处理框架 200
6.4 小结 201
6.5 练习题 202
第7章 用Swing组件展示HTML文档 204
7.1 在按钮等组件上展示HTML文档 205
7.2 用JEditorPane组件创建简单的浏览器 207
7.2.1 处理HTML页面上的超级链接 208
7.2.2 处理HTML页面上的表单 209
7.2.3 创建浏览器程序 211
7.3 小结 215
7.4 练习题 216
第8章 基于UDP的数据报和套接字 218
8.1 UDP简介 218
8.2 DatagramPacket类 222
8.2.1 选择数据报的大小 223
8.2.2 读取和设置DatagramPacket的属性 223
8.2.3 数据格式的转换 224
8.2.4 重用DatagramPacket 225
8.3 DatagramSocket类 227
8.3.1 构造DatagramSocket 227
8.3.2 接收和发送数据报 228
8.3.3 管理连接 229
8.3.4 关闭DatagramSocket 229
8.3.5 DatagramSocket的选项 230
8.3.6 IP服务类型选项 232
8.4 DatagramChannel类 232
8.4.1 创建DatagramChannel 232
8.4.2 管理连接 232
8.4.3 用send()方法发送数据报 233
8.4.4 用receive()方法接收数据报 233
8.4.5 用write()方法发送数据报 238
8.4.6 用read()方法接收数据报 238
8.4.7 Socket选项 242
8.5 组播 243
8.5.1 MulticastSocket类 245
8.5.2 组播Socket的范例 248
8.6 小结 251
8.7 练习题 251
第9章 对象的序列化与反序列化 254
9.1 JDK类库中的序列化API 254
9.1.1 把对象序列化到文件 256
9.1.2 把对象序列化到网络 258
9.2 实现Serializable接口 260
9.2.1 序列化对象图 263
9.2.2 控制序列化的行为 265
9.2.3 readResolve()方法在单例类中的运用 273
9.3 实现Externalizable接口 275
9.4 可序列化类的不同版本的序列化兼容性 277
9.5 小结 280
9.6 练习题 280
第10章 Java语言的反射机制 283
10.1 Java Reflection API简介 283
10.2 在远程方法调用中运用反射机制 289
10.3 代理模式 294
10.3.1 静态代理类 294
10.3.2 动态代理类 296
10.3.3 在远程方法调用中运用代理类 300
10.4 小结 305
10.5 练习题 307
第11章 RMI框架 309
11.1 RMI的基本原理 310
11.2 创建第1个RMI应用 312
11.2.1 创建远程接口 312
11.2.2 创建远程类 313
11.2.3 创建服务器程序 315
11.2.4 创建客户程序 318
11.2.5 运行RMI应用 320
11.3 远程对象工厂设计模式 323
11.4 远程方法中的参数与返回值传递 328
11.5 回调客户端的远程对象 332
11.6 远程对象的并发访问 337
11.7 分布式垃圾收集 341
11.8 远程对象的equals()、hashCode()和clone()方法 346
11.9 使用安全管理器 346
11.10 RMI应用的部署以及类的动态加载 348
11.11 远程激活 350
11.12 小结 356
11.13 练习题 357
第12章 通过JDBC API访问数据库 359
12.1 JDBC的实现原理 360
12.2 安装和配置MySQL数据库 362
12.3 JDBC API简介 364
12.4 JDBC API的基本用法 368
12.4.1 处理字符编码的转换 372
12.4.2 把连接数据库的各种属性放在配置文件中 374
12.4.3 管理Connection、Statement和ResultSet对象的生命周期 377
12.4.4 执行SQL脚本文件 382
12.4.5 处理SQLException 385
12.4.6 输出JDBC日志 386
12.4.7 获得新插入记录的主键值 386
12.4.8 设置批量抓取属性 387
12.4.9 检测驱动器使用的JDBC版本 388
12.4.10 元数据 388
12.5 可滚动以及可更新的结果集 390
12.6 行集 398
12.7 调用存储过程 405
12.8 处理Blob和Clob类型数据 407
12.9 控制事务 412
12.9.1 事务的概念 412
12.9.2 声明事务边界的概念 414
12.9.3 在mysql.exe程序中声明事务 416
12.9.4 通过JDBC API声明事务边界 417
12.9.5 保存点 419
12.9.6 批量更新 420
12.9.7 设置事务隔离级别 422
12.10 数据库连接池 424
12.10.1 创建连接池 424
12.10.2 DataSource数据源 432
12.11 小结 434
12.12 练习题 435
第13章 基于MVC和RMI的分布式应用 439
13.1 MVC设计模式简介 439
13.2 store应用简介 441
13.3 创建视图 447
13.4 创建控制器 455
13.5 创建模型 458
13.6 创建独立应用 462
13.7 创建分布式应用 464
13.8 小结 466
13.9 练习题 467
第14章 通过JavaMail API收发邮件 470
14.1 E-mail协议简介 470
14.1.1 SMTP 471
14.1.2 POP3 471
14.1.3 接收邮件的新协议IMAP 471
14.1.4 MIME简介 472
14.2 JavaMail API简介 472
14.3 建立JavaMail应用程序的开发环境 474
14.3.1 获得JavaMailAPI的类库 474
14.3.2 安装和配置邮件服务器 475
14.4 创建JavaMail应用程序 477
14.5 身份验证 482
14.6 授权码验证 485
14.7 URLName类 488
14.8 创建和读取复杂电子邮件 490
14.8.1 邮件地址 491
14.8.2 邮件头部 493
14.8.3 邮件标记 493
14.8.4 邮件正文 495
14.9 操纵邮件夹 501
14.10 小结 507
14.11 练习题 508
第15章 安全网络通信 510
15.1 SSL简介 510
15.1.1 加密通信 511
15.1.2 安全证书 511
15.1.3 SSL握手 512
15.1.4 创建自我签名的安全证书 514
15.2 JSSE简介 516
15.2.1 KeyStore、KeyManager与TrustManager类 519
15.2.2 SSLContext类 520
15.2.3 SSLServerSocketFactory类 521
15.2.4 SSLSocketFactory类 521
15.2.5 SSLSocket类 521
15.2.6 SSLServerSocket类 525
15.2.7 SSLEngine类 526
15.3 创建基于SSL的安全服务器和安全客户 531
15.4 小结 536
15.5 练习题 536
第16章 XML数据处理 539
16.1 用DOM处理XML文档 539
16.2 用SAX处理XML文档 542
16.2.1 创建XML文档的具体处理类CustomerHandler 544
16.2.2 创建XML文档的解析类SaxDemo 546
16.3 用JDOM处理XML文档 547
16.4 用DOM4J处理XML文档 551
16.5 Java对象的XML序列化和反序列化 554
16.6 小结 556
16.7 练习题 556
第17章 用Axis发布Web服务 558
17.1 SOAP简介 558
17.2 建立Apache Axis环境 560
17.3 在Tomcat上发布Apache-Axis Web应用 561
17.4 创建SOAP服务 562
17.4.1 创建提供SOAP服务的Java类 562
17.4.2 创建SOAP服务的发布描述文件 562
17.5 发布和管理SOAP服务 563
17.5.1 发布SOAP服务 563
17.5.2 管理SOAP服务 565
17.6 创建和运行SOAP客户程序 567
17.7 小结 569
17.8 练习题 570
第18章 用Spring整合CXF发布Web服务 571
18.1 创建Web服务接口和实现类 571
18.2 在Spring配置文件中配置Web服务 572
18.3 在web.xml配置文件中配置Spring和CXF 572
18.4 在Tomcat中发布Web服务 573
18.5 创建和运行客户程序 575
18.6 小结 576
18.7 练习题 576
附录A 本书范例的运行方法 577
A.1 本书所用软件的下载地址 577
A.2 部分软件的安装 578
A.2.1 安装JDK 578
A.2.2 安装ANT 579
A.2.3 安装Tomcat 579
A.3 编译源程序 580
A.4 运行客户/服务器程序 580
A.5 处理编译和运行错误 581