即时应用CGI/Perl(附光盘)
分類: 图书,计算机/网络,程序设计,Perl,
作者: 美.索尔 美.伯尼克 美.切内斯 著 王宏秦 译
出 版 社: 人民邮电出版社
出版时间: 2002-5-1字数: 1080千版次: 1版1次页数: 626印刷时间: 2002/04/01开本:印次:纸张: 胶版纸I S B N : 9787115100795包装: 平装内容简介
本书是一本关于CGI/Perl的综合参考书。其内容包括:工具包和体系结构、CGI安装和定制、文件设置和归档、修改Perl路径、理解和使用eXtropia应用程序、管理和保护数据等。
全书内容结构清晰,可以帮助读者快速找到所需要的信息,利用书中提供的大量代码和应用程序,你可以立即开始改造自己的网站。本书提供了有关CGI/Perl的高级技术,适合各类网络开发人员。
目录
第1部分 了解应用程序
第1章 引言2
1.1 阅读本书的方法2
1.1.1 本书的整体结构2
1.1.2 阅读本书的方式2
1.2 编写本书的原因3
1.2.1 出发点3
1.2.2 第1个Web应用程序:WebBBS3
1.2.3 Selena Sol 脚本档案的诞生4
1.2.4 让应用程序更规范5
1.2.5 带有CGI/Perl的即时Web脚本7
1.2.6 模型的局限性8
1.2.7 面向对象的设计就是答案9
1.2.8 eXtropia 应用程序开发工具箱(ADT)10
1.2.9 即时CGI/Perl10
第2章 有关安装的基础知识12
2.1 12步骤的检查表12
2.2 步骤1:准备站点12
2.3 步骤2:获得安装文件14
2.4 步骤3:复原应用程序档案文件16
2.4.1 在UNIX上复原16
2.4.2 在Windows和Mac上复原18
2.4.3 复原时得到了什么19
2.5 步骤4:指定文件权限22
2.6 步骤5:修改Perl路径行24
2.7 步骤6:配置应用程序26
2.8 步骤7:修改应用程序的外观和感觉26
2.9 步骤8:运行应用程序27
2.10 步骤9:调试应用程序28
2.10.1 Sherlock Holmes和被破坏的CGI应用程序的案例28
2.10.2 CGI调试是一种思考状态29
2.10.3 科学方法和调试的本质29
2.10.4 从Hello World开始29
2.10.5 找到您的位置30
2.10.6 应用程序所看见的内容32
2.11 高级错误诊断34
2.11.1 命令行策略35
2.11.2 日志文件分析35
2.11.3 伪装为web浏览器36
2.11.4 使用print "content-type:text/html\n\ntest";exit;36
2.11.5 使用Data::Dumper38
2.11.6 小结39
2.12 步骤10:检查安全性39
2.12.1 可能发生的最糟糕情况是什么40
2.12.2 安全和Web服务器40
2.12.3 CGI应用程序40
2.12.4 检查应用程序41
2.12.5 编写安全的CGI应用程序41
2.12.6 停止嗅探器42
2.12.7 可写入目录44
2.12.8 用户输入44
2.12.9 交叉站点脚本问题45
2.12.10 感染模式45
2.12.11 安全性和eXtropia应用程序53
2.12.12 移动数据文件目录54
2.13 步骤11和12:测试和注册55
2.14 小结56
第3章 使用应用程序可执行文件配置 EXTROPIA应用程序57
3.1 什么是应用程序可执行文件57
3.2 什么是ADT组件57
3.3 配置整个应用程序58
3.4 理解应用程序可执行文件的序言59
3.4.1 执行Perl60
3.4.2 导入支持perl模块60
3.4.3 为eXtropia模块定义库路径61
3.4.4 为了遵守mod_perl而删除库61
3.4.5 导入eXtropia模块62
3.4.6 对帮助程序对象作实例化处理62
3.4.7 对输入表单数据进行标准化处理62
3.5 怎样修改和测试配置选项63
3.5.1 找到配置错误63
3.5.2 怎样修改基于列表的配置参数65
3.5.3 理解基于引用的配置参数66
3.6 eXtropia应用程序的标准配置选项67
3.6.1 会话和会话管理器配置67
3.6.2 鉴别配置69
3.6.3 鉴别管理器配置73
3.6.4 数据处理程序管理器配置76
3.6.5 数据源配置80
3.6.6 日志配置85
3.6.7 邮件设置87
3.6.8 加密设置90
3.6.9 视图设置91
3.6.10 过滤器设置94
3.6.11 操作处理程序设置95
3.7 小结99
第4章 用操作处理程序控制应用程序工作流程101
4.1 操作处理程序基本知识101
4.1.1 理解操作处理程序序言102
4.1.2 用_rearrangeAsHash()方法预订@ACTION_HANDLER_ACTION_PARAMS103
4.1.3 定义操作的逻辑104
4.2 理解默认的操作处理程序107
4.2.1 理解CheckForLogicalConfigurationErrorsAction108
4.2.2 理解DisplaySessionTimeoutErrorAction112
4.2.3 理解DownloadFileAction113
4.2.4 理解DisplayAddFormAction113
4.2.5 理解DisplayAddRecordConfirmationAction115
4.2.6 理解ProceesAddRequestAcion117
4.2.7 理解修改和删除操作处理程序120
4.2.8 理解自定义搜索操作处理程序120
4.3 理解Extropia::App122
4.3.1 loadViewAndDisplay()方法123
4.3.2 handleIncomingData()方法123
4.3.3 getDataHandlerErrors()方法124
4.3.4 setNextViewToDisplay()方法124
4.3.5 setAdditionalViewDisplayParams()方法124
4.3.6 sendMail()方法124
4.3.7 getDate()方法124
4.3.8 getCurrentTime()方法124
4.4 理解Extropia::App::DBApp125
4.4.1 loadData()方法125
4.4.2 addRecord()方法125
4.4.3 modifyRecord()方法126
4.4.4 deleteRecord()方法126
第5章 用视图定义应用程序的外观和感觉128
5.1 基本视图介绍128
5.1.1 定义包名129
5.1.2 导入支持模块129
5.1.3 声明视图继承129
5.1.4 定义display()方法129
5.2 视图和样式131
5.3 用嵌入过滤器嵌入应用程序133
5.4 其他视图内的视图135
5.5 错误消息137
5.6 棘手的表单137
5.7 保持应用程序状态140
5.8 添加自己的定制视图显示参数141
5.9 处理记录集合142
5.10 了解标准视图144
5.10.1 默认eXtropia视图144
5.10.2 理解ApplicationSubMenuView145
5.10.3 理解ErrorDisplayView148
5.10.4 理解InputWidgetDisplayView150
5.10.5 理解PageTopView154
5.10.6 理解PageBottomView156
5.10.7 理解SessionTimeoutview156
5.10.8 理解AddRecordView157
5.10.9 理解AddRecordConfimationView160
5.10.10 理解AddAcknowledgmentView163
5.10.11 理解AddEventEmailView165
5.10.12 理解BasicDataView166
5.10.13 理解针对删除的视图172
5.10.14 理解DetailsView173
5.10.15 理解HiddenAdminFieldsView和URLAdminFieldsView178
5.10.16 理解修改视图181
5.10.17 理解和搜索相关的视图181
第6章 应用程序高级设置182
6.1 第一阶段:得到基本画面182
6.1.1 理解应用程序可执行文件182
6.1.2 理解SubmitAnswerView185
6.2 第二阶段:添加数据源和额外字段187
6.2.1 理解对应用程序可执行文件的改动187
6.2.2 使用关系数据库190
6.3 第三阶段:为执行数据源添加操作而添加操作处理程序194
6.4 第四阶段:添加确认和肯定页面197
6.4.1 理解对应用程序可执行文件的改动198
6.4.2 理解对SubmitAnswerView的改动201
6.5 第五阶段:数据处理和数据处理错误203
6.5.1 理解对应用程序可执行文件的改动203
6.5.2 理解对SubmitAnswerView的改动207
6.6 第六阶段:从应用程序发送邮件210
6.7 第七阶段:会话和鉴别215
6.8 高级设置问题222
6.8.1 载入设置文件223
6.8.2 增强eXtropia应用程序性能223
第7章 简单表单处理227
7.1 表单处理功能228
7.1.1 记录表单提交228
7.1.2 鉴别228
7.1.3 数据处理230
7.1.4 确认和肯定230
7.2 应用程序示例1:注释表单230
7.2.1 应用程序可执行文件232
7.2.2 自定义操作处理程序234
7.2.3 定制视图238
7.3 应用程序示例2:下载和跳转表单244
7.3.1 应用程序可执行文件245
7.3.2 定制操作处理程序246
7.3.3 定制视图246
7.4 应用程序示例3:Tell-a-Friend表单247
7.4.1 应用程序可执行文件248
7.4.2 定制操作处理程序249
7.4.3 定制视图249
7.5 应用程序示例4:在线调查表单249
7.5.1 应用程序可执行文件249
7.5.2 定制操作处理程序252
7.5.3 定制视图252
第8章 数据库前端253
8.1 数据库功能253
8.1.1 搜索、排序和查看数据253
8.1.2 利用管理性接口添加、修改和删除数据255
8.2 应用程序示例1:Guestbook256
8.2.1 查看Guestbook条目257
8.2.2 添加Guestbook条目258
8.2.3 应用程序可执行文件258
8.2.4 定制视图260
8.3 应用程序示例2:Address Book266
8.3.1 应用程序可执行文件267
8.3.2 定制操作处理程序268
8.3.3 定制视图268
8.4 应用程序示例3:Document Manager269
8.4.1 应用程序可执行文件270
8.4.2 定制操作处理程序271
8.4.3 定制视图271
8.5 应用程序示例4:News Publisher271
8.5.1 理解News Client272
8.5.2 应用程序可执行文件272
8.5.3 定制操作处理程序273
8.5.4 定制视图273
8.6 理解News Manager Administrator278
8.6.1 应用程序可执行文件279
8.6.2 定制操作处理程序280
8.6.3 定制视图280
第9章 进程管理应用程序281
9.1 应用程序示例1:Project Tracker281
9.1.1 应用程序可执行文件281
9.1.2 定制视图283
9.1.3 定制操作处理程序283
9.2 应用程序示例2:Mailing List Manager284
9.2.1 列表添加285
9.2.2 列表删除285
9.2.3 向整个列表发送邮件287
9.2.4 应用程序可执行文件287
9.2.5 定制视图290
9.2.6 定制操作处理程序299
9.3 应用程序示例3:Bug Tracker307
9.3.1 应用程序可执行文件307
9.3.2 定制视图309
9.3.3 定制操作314
第2部分 理解应用程序开发工具包
第10章 应用程序工具包体系结构318
10.1 应用程序中的灵活性318
10.1.1 灵活性318
10.1.2 代码重用中的灵活性319
10.1.3 应用程序开发工具包内的灵活性320
10.2 处理Web应用程序320
10.2.1 Web应用程序代码的演化321
10.2.2 面向对象的Perl的演化321
10.2.3 任务临界型应用程序的演化321
10.3 应用程序体系结构321
10.3.1 原则1:利用现有的代码322
10.3.2 原则2:代码必须在所有Perl环境上运行322
10.3.3 原则3:利用Perl的加速优点322
10.3.4 原则4:提供安全保障323
10.3.5 原则5:恰当地处理错误323
10.3.6 原则6:提供模块应用程序设计324
10.4 eXtropia 对象327
10.5 引用和数据结构329
10.5.1 引用329
10.5.2 Cookies330
10.5.3 蛋糕示例与Perl的关系330
10.5.4 使用引用331
10.5.5 使用引用来表示数据结构334
10.5.6 引用小结335
10.6 面向对象编程335
10.6.1 过程化编程335
10.6.2 过程化编程的局限性336
10.6.3 面向对象编程的诞生337
10.6.4 对象337
10.6.5 更面向对象的抽象339
10.6.6 封装339
10.6.7 应用程序编程接口(API)339
10.6.8 继承340
10.6.9 多态341
10.6.10 在Perl中编写对象342
10.6.11 创建对象343
10.7 接口和驱动程序350
10.7.1 接口示例350
10.7.2 接口的工作方式353
10.8 接口/驱动程序模板353
10.8.1 编码约定354
10.8.2 如何编写接口和驱动程序357
10.8.3 接口模板358
10.8.4 驱动程序模板360
10.9 使用Extropia::Base363
10.9.1 接受命名和位置参数365
10.9.2 指定默认值366
10.9.3 加载驱动程序367
10.9.4 使用复杂的数据结构367
10.9.5 处理错误368
10.10 处理错误369
10.10.1 使用die()、croak()和confess()369
10.10.2 使用Extropia::Error370
10.10.3 用Eval处理异常371
10.11 小结373
第11章 用视图和筛选设计用户界面374
11.1 分离UI与View模块的设计374
11.1.1 要点1:视图从其他视图继承375
11.1.2 要点2:视图可以包含其他视图375
11.1.3 要点3:视图返回数据376
11.1.4 要点4:视图可以筛选376
11.1.5 要点5:视图可以缓存377
11.2 使用视图和筛选378
11.2.1 视图379
11.2.2 筛选381
11.3 _loadViewAndDisplay()方便方法382
11.4 如何编写视图384
11.4.1 创建视图模块384
11.4.2 视图代码示例386
11.4.3 创建视图模块小结387
11.5 如何编写筛选驱动程序387
11.6 理解视图模块388
11.6.1 视图体系结构389
11.6.2 视图方法390
第12章 使用数据处理程序处理输入数据391
12.1 验证392
12.2 解除感染392
12.3 数据转换392
12.4 使用数据处理程序管理器393
12.4.1 使用数据处理程序管理器的小结396
12.4.2 创建数据处理程序管理器399
12.4.3 数据的验证399
12.4.4 “清洁”数据405
12.4.5 转换数据412
12.4.6 综合应用所有处理程序417
12.5 使用数据处理程序418
12.6 如何编写数据处理程序管理器419
12.7 如何编写数据处理程序420
12.8 基本的数据处理程序管理器的体系结构430
12.9 基本的数据处理程序的体系结构431
第13章 使用EXTROPIA::LOCK锁定资源433
13.1 不使用flock()的原因433
13.2 锁定资源和锁定文件433
13.3 使用锁436
13.3.1 创建锁437
13.3.2 定义锁驱动程序438
13.3.3 锁定资源和资源解锁442
13.3.4 处理锁的错误443
13.3.5 锁定资源后的清除444
13.4 如何编写锁驱动程序444
13.5 基本的锁体系结构446
第14章 使用EXTROPIA::ENCRYPT保护数据447
14.1 加密基础448
14.1.1 传统的双向加密449
14.1.2 对称加密450
14.1.3 非对称加密451
14.1.4 数据签名451
14.1.5 单向加密451
14.2 使用加密模块453
14.2.1 创建加密程序456
14.2.2 加密驱动程序的定义456
14.2.3 加密数据460
14.2.4 比较加密数据461
14.2.5 配置PGP加密461
14.3 如何编写加密驱动程序463
第15章 使用KEYGENERATOR生成密钥465
15.1 密钥生成的策略465
15.1.1 POSIX465
15.1.2 随机465
15.1.3 计数器466
15.1.4 进程467
15.1.5 组合467
15.1.6 总结467
15.2 使用KeyGenerator467
15.2.1 密钥生成器驱动程序468
15.2.2 创建密钥生成器470
15.2.3 密钥生成器驱动程序的定义470
15.2.4 创建密钥473
15.3 编写密钥生成器驱动程序的方式474
第16章 使用UNIQUEFILE创建独立文件475
16.1 生成独立文件名476
16.1.1 短暂的文件名476
16.1.2 不容易猜测的文件名476
16.1.3 包含基于计数器ID的文件名476
16.1.4 包含应用程序信息的文件名477
16.1.5 使用Extropia::UniqueFile处理这些情形477
16.2 使用独立文件477
16.2.1 创建独立文件478
16.2.2 删除独立文件479
16.2.3 其他独立文件操作479
16.2.4 查找临时目录480
16.2.5 总结480
第17章 使用EXTROPIA::MAIL从应用程序中发送电子邮件481
17.1 使用Mail481
17.1.1 创建邮寄程序482
17.1.2 邮件驱动程序的定义482
17.1.3 发送邮件484
17.1.4 安装驱动程序486
17.2 如何编写邮件驱动程序488
第18章 使用SESSION和SESSIONMANAGER 维护状态490
18.1 会话基础490
18.1.1 方法1:HTML表单变量491
18.1.2 方法2:PATH_INFO环境变量491
18.1.3 方法3:Cookies492
18.1.4 总结492
18.1.5 会话493
18.1.6 会话管理器494
18.2 使用会话494
18.2.1 创建会话498
18.2.2 会话驱动程序的定义499
18.2.3 获取属性和设置属性506
18.2.4 可选方法:使用会话散列507
18.2.5 会话元数据的管理507
18.2.6 数据和锁定策略508
18.3 使用会话管理器510
18.3.1 创建会话管理器511
18.3.2 会话管理器驱动程序的定义512
18.3.3 创建会话515
18.3.4 获取当前活动会话的列表515
18.3.5 删除旧会话515
18.4 如何编写会话驱动程序515
18.5 如何编写会话管理器驱动程序520
18.5.1 实现会话管理器520
18.5.2 结论521
第19章 使用EXTROPIA::DATASOURCE访问数据522
19.1 Data Source的优点522
19.1.1 数据抽象523
19.1.2 数据源术语524
19.2 使用DataSource525
19.2.1 创建数据源527
19.2.2 使用数据源查询语言536
19.2.3 增加数据538
19.2.4 删除数据540
19.2.5 更新数据541
19.2.6 批处理更改542
19.2.7 检索数据544
19.3 使用RecordSets548
19.3.1 检索数据549
19.3.2 获取整个RecordSet的信息551
19.3.3 RecordSet的其他方法551
19.3.4 选择作业的正确RecordSet类型553
19.3.5 RecordSets和CGI556
19.4 使用DataType和Sort对象558
19.4.1 使用DataTypes558
19.4.2 使用Sort559
19.5 编写定制驱动程序560
19.5.1 体系结构概述560
19.5.2 编写DataSource驱动程序561
19.5.3 编写RecordSet驱动程序572
19.5.4 编写Sort对象573
19.5.5 编写DataType对象573
19.6 理解DataSource和RecordSet576
19.6.1 幕后添加记录576
19.6.2 幕后搜索577
第20章 用EXTROPIA::AUTH实现WEB应用程序安全性581
20.1 身份认证和授权581
20.1.1 Extropia :: auth体系结构581
20.1.2 auth管理583
20.1.3 auth584
20.1.4 auth缓存584
20.1.5 auth场景585
20.2 使用auth管理器589
20.2.1 创建auth管理器590
20.2.2 auth管理器驱动程序的说明590
20.2.3 用户身份认证596
20.2.4 用户授权596
20.2.5 获取用户信息596
20.2.6 设置缓存用户信息597
20.2.7 刷新缓存的用户信息597
20.2.8 注销597
20.3 使用auth598
20.3.1 创建auth对象598
20.3.2 auth驱动程序的说明599
20.3.3 用户身份认证605
20.3.4 用户注册606
20.3.5 搜索用户606
20.3.6 用户授权607
20.3.7 获取用户信息607
20.3.8 设置缓存用户信息607
20.3.9 刷新缓存用户信息607
20.4 使用Auth::Cache607
20.4.1 创建Auth::Cache对象607
20.4.2 Auth::Cache驱动程序的说明608
20.4.3 获取用户信息610
20.4.4 设置缓存用户信息610
20.4.5 用户授权611
20.4.6 管理组缓存611
20.4.7 清除缓存611
20.5 如何编写auth管理器驱动程序611
20.6 如何编写auth驱动程序613
20.7 如何编写Auth::Cache驱动程序615
第21章 使用EXTROPIA::LOG记录日志617
21.1 使用日志617
21.1.1 创建日志618
21.1.2 定义日志驱动程序619
21.1.3 写入日志625
21.2 编写日志驱动程序的方式625
21.2.1 实现日志625
21.2.2 浏览Extropia::Log::File 代码626
21.3 理解基础日志模块627