第1部分 了解应用程序
第1章 引言
1.1 阅读本书的方法
1.1.1 本书的整体结构
1.1.2 阅读本书的方式
1.2 编写本书的原因
1.2.1 出发点
1.2.2 第1个Web应用程序:WebBBS
1.2.3 Selena Sol 脚本档案的诞生
1.2.4 让应用程序更规范
1.2.5 带有CGI/Perl的即时Web脚本
1.2.6 模型的局限性
1.2.7 面向对象的设计就是答案
1.2.8 eXtropia 应用程序开发工具箱(ADT)
1.2.9 即时CGI/Perl
第2章 有关安装的基础知识
2.1 12步骤的检查表
2.2 步骤1:准备站点
2.3 步骤2:获得安装文件
2.4 步骤3:复原应用程序档案文件
2.4.1 在UNIX上复原
2.4.2 在Windows和Mac上复原
2.4.3 复原时得到了什么
2.5 步骤4:指定文件权限
2.6 步骤5:修改Perl路径行
2.7 步骤6:配置应用程序
2.8 步骤7:修改应用程序的外观和感觉
2.9 步骤8:运行应用程序
2.10 步骤9:调试应用程序
2.10.1 Sherlock Holmes和被破坏的CGI应用程序的案例
2.10.2 CGI调试是一种思考状态
2.10.3 科学方法和调试的本质
2.10.4 从Hello World开始
2.10.5 找到您的位置
2.10.6 应用程序所看见的内容
2.11 高级错误诊断
2.11.1 命令行策略
2.11.2 日志文件分析
2.11.3 伪装为web浏览器
2.11.4 使用print“content-type:text/html\n\ntest”;exit;
2.11.5 使用Data::Dumper
2.11.6 小结
2.12 步骤10:检查安全性
2.12.1 可能发生的最糟糕情况是什么
2.12.2 安全和Web服务器
2.12.3 CGI应用程序
2.12.4 检查应用程序
2.12.5 编写安全的CGI应用程序
2.12.6 停止嗅探器
2.12.7 可写入目录
2.12.8 用户输入
2.12.9 交叉站点脚本问题
2.12.10 感染模式
2.12.11 安全性和eXtropia应用程序
2.12.12 移动数据文件目录
2.13 步骤11和12:测试和注册
2.14 小结
第3章 使用应用程序可执行文件配置EXTROPIA应用程序
3.1 什么是应用程序可执行文件
3.2 什么是ADT组件
3.3 配置整个应用程序
3.4 理解应用程序可执行文件的序言
3.4.1 执行Perl
3.4.2 导入支持perl模块
3.4.3 为eXtropia模块定义库路径
3.4.4 为了遵守mod_perl而删除库
3.4.5 导入eXtropia模块
3.4.6 对帮助程序对象作实例化处理
3.4.7 对输入表单数据进行标准化处理
3.5 怎样修改和测试配置选项
3.5.1 找到配置错误
3.5.2 怎样修改基于列表的配置参数
3.5.3 理解基于引用的配置参数
3.6 eXtropia应用程序的标准配置选项
3.6.1 会话和会话管理器配置
3.6.2 鉴别配置
3.6.3 鉴别管理器配置
3.6.4 数据处理程序管理器配置
3.6.5 数据源配置
3.6.6 日志配置
3.6.7 邮件设置
3.6.8 加密设置
3.6.9 视图设置
3.6.10 过滤器设置
3.6.11 操作处理程序设置
3.7 小结
第4章 用操作处理程序控制应用程序工作流程
4.1 操作处理程序基本知识
4.1.1 理解操作处理程序序言
4.1.2 用_rearrangeAsHash()方法预订@ACTION_HANDLER_ACTION_PARAMS
4.1.3 定义操作的逻辑
4.2 理解默认的操作处理程序
4.2.1 理解CheckForLogicalConfigurationErrorsAction
4.2.2 理解DisplaySessionTimeoutErrorAction
4.2.3 理解DownloadFileAction
4.2.4 理解DisplayAddFormAction
4.2.5 理解DisplayAddRecordConfirmationAction
4.2.6 理解ProceesAddRequestAcion
4.2.7 理解修改和删除操作处理程序
4.2.8 理解自定义搜索操作处理程序
4.3 理解Extropia::App
4.3.1 loadViewAndDisplay()方法
4.3.2 handleIncomingData()方法
4.3.3 getDataHandlerErrors()方法
4.3.4 setNextViewToDisplay()方法
4.3.5 setAdditionalViewDisplayParams()方法
4.3.6 sendMail()方法
4.3.7 getDate()方法
4.3.8 getCurrentTime()方法
4.4 理解Extropia::App::DBApp
4.4.1 loadData()方法
4.4.2 addRecord()方法
4.4.3 modifyRecord()方法
4.4.4 deleteRecord()方法
第5章 用视图定义应用程序的外观和感觉
5.1 基本视图介绍
5.1.1 定义包名
5.1.2 导入支持模块
5.1.3 声明视图继承
5.1.4 定义display()方法
5.2 视图和样式
5.3 用嵌入过滤器嵌入应用程序
5.4 其他视图内的视图
5.5 错误消息
5.6 棘手的表单
5.7 保持应用程序状态
5.8 添加自己的定制视图显示参数
5.9 处理记录集合
5.10 了解标准视图
5.10.1 默认eXtropia视图
5.10.2 理解ApplicationSubMenuView
5.10.3 理解ErrorDisplayView
5.10.4 理解InputWidgetDisplayView
5.10.5 理解PageTopView
5.10.6 理解PageBottomView
5.10.7 理解SessionTimeoutview
5.10.8 理解AddRecordView
5.10.9 理解AddRecordConfimationView
5.10.10 理解AddAcknowledgmentView
5.10.11 理解AddEventEmailView
5.10.12 理解BasicDataView
5.10.13 理解针对删除的视图
5.10.14 理解DetailsView
5.10.15 理解HiddenAdminFieldsView和URLAdminFieldsView
5.10.16 理解修改视图
5.10.17 理解和搜索相关的视图
第6章 应用程序高级设置
6.1 第一阶段:得到基本画面
6.1.1 理解应用程序可执行文件
6.1.2 理解SubmitAnswerView
6.2 第二阶段:添加数据源和额外字段
6.2.1 理解对应用程序可执行文件的改动
6.2.2 使用关系数据库
6.3 第三阶段:为执行数据源添加操作而添加操作处理程序
6.4 第四阶段:添加确认和肯定页面
6.4.1 理解对应用程序可执行文件的改动
6.4.2 理解对SubmitAnswerView的改动
6.5 第五阶段:数据处理和数据处理错误
6.5.1 理解对应用程序可执行文件的改动
6.5.2 理解对SubmitAnswerView的改动
6.6 第六阶段:从应用程序发送邮件
6.7 第七阶段:会话和鉴别
6.8 高级设置问题
6.8.1 载入设置文件
6.8.2 增强eXtropia应用程序性能
第7章 简单表单处理
7.1 表单处理功能
7.1.1 记录表单提交
7.1.2 鉴别
7.1.3 数据处理
7.1.4 确认和肯定
7.2 应用程序示例1:注释表单
7.2.1 应用程序可执行文件
7.2.2 自定义操作处理程序
7.2.3 定制视图
7.3 应用程序示例2:下载和跳转表单
7.3.1 应用程序可执行文件
7.3.2 定制操作处理程序
7.3.3 定制视图
7.4 应用程序示例3:Tell-a-Friend表单
7.4.1 应用程序可执行文件
7.4.2 定制操作处理程序
7.4.3 定制视图
7.5 应用程序示例4:在线调查表单
7.5.1 应用程序可执行文件
7.5.2 定制操作处理程序
7.5.3 定制视图
第8章 数据库前端
8.1 数据库功能
8.1.1 搜索、排序和查看数据
8.1.2 利用管理性接口添加、修改和删除数据
8.2 应用程序示例1:Guestbook
8.2.1 查看Guestbook条目
8.2.2 添加Guestbook条目
8.2.3 应用程序可执行文件
8.2.4 定制视图
8.3 应用程序示例2:Address Book
8.3.1 应用程序可执行文件
8.3.2 定制操作处理程序
8.3.3 定制视图
8.4 应用程序示例3:Document Manager
8.4.1 应用程序可执行文件
8.4.2 定制操作处理程序
8.4.3 定制视图
8.5 应用程序示例4:News Publisher
8.5.1 理解News Client
8.5.2 应用程序可执行文件
8.5.3 定制操作处理程序
8.5.4 定制视图
8.6 理解News Manager Administrator
8.6.1 应用程序可执行文件
8.6.2 定制操作处理程序
8.6.3 定制视图
第9章 进程管理应用程序
9.1 应用程序示例1:Project Tracker
9.1.1 应用程序可执行文件
9.1.2 定制视图
9.1.3 定制操作处理程序
9.2 应用程序示例2:Mailing List Manager
9.2.1 列表添加
9.2.2 列表删除
9.2.3 向整个列表发送邮件
9.2.4 应用程序可执行文件
9.2.5 定制视图
9.2.6 定制操作处理程序
9.3 应用程序示例3:Bug Tracker
9.3.1 应用程序可执行文件
9.3.2 定制视图
9.3.3 定制操作
第2部分 理解应用程序开发工具包
第10章 应用程序工具包体系结构
10.1 应用程序中的灵活性
10.1.1 灵活性
10.1.2 代码重用中的灵活性
10.1.3 应用程序开发工具包内的灵活性
10.2 处理Web应用程序
10.2.1 Web应用程序代码的演化
10.2.2 面向对象的Perl的演化
10.2.3 任务临界型应用程序的演化
10.3 应用程序体系结构
10.3.1 原则1:利用现有的代码
10.3.2 原则2:代码必须在所有Perl环境上运行
10.3.3 原则3:利用Perl的加速优点
10.3.4 原则4:提供安全保障
10.3.5 原则5:恰当地处理错误
10.3.6 原则6:提供模块应用程序设计
10.4 eXtropia对象
10.5 引用和数据结构
10.5.1 引用
10.5.2 Cookies
10.5.3 蛋糕示例与Perl的关系
10.5.4 使用引用
10.5.5 使用引用来表示数据结构
10.5.6 引用小结
10.6 面向对象编程
10.6.1 过程化编程
10.6.2 过程化编程的局限性
10.6.3 面向对象编程的诞生
10.6.4 对象
10.6.5 更面向对象的抽象
10.6.6 封装
10.6.7 应用程序编程接口(API)
10.6.8 继承
10.6.9 多态
10.6.10 在Perl中编写对象
10.6.11 创建对象
10.7 接口和驱动程序
10.7.1 接口示例
10.7.2 接口的工作方式
10.8 接口/驱动程序模板
10.8.1 编码约定
10.8.2 如何编写接口和驱动程序
10.8.3 接口模板
10.8.4 驱动程序模板
10.9 使用Extropia::Base
10.9.1 接受命名和位置参数
10.9.2 指定默认值
10.9.3 加载驱动程序
10.9.4 使用复杂的数据结构
10.9.5 处理错误
10.10 处理错误
10.10.1 使用die()、croak()和confess()
10.10.2 使用Extropia::Error
10.10.3 用Eval处理异常
10.11 小结
第11章 用视图和筛选设计用户界面
11.1 分离UI与View模块的设计
11.1.1 要点1:视图从其他视图继承
11.1.2 要点2:视图可以包含其他视图
11.1.3 要点3:视图返回数据
11.1.4 要点4:视图可以筛选
11.1.5 要点5:视图可以缓存
11.2 使用视图和筛选
11.2.1 视图
11.2.2 筛选
11.3 _loadViewAndDisplay()方便方法
11.4 如何编写视图
11.4.1 创建视图模块
11.4.2 视图代码示例
11.4.3 创建视图模块小结
11.5 如何编写筛选驱动程序
11.6 理解视图模块
11.6.1 视图体系结构
11.6.2 视图方法
第12章 使用数据处理程序处理输入数据
12.1 验证
12.2 解除感染
12.3 数据转换
12.4 使用数据处理程序管理器
12.4.1 使用数据处理程序管理器的小结
12.4.2 创建数据处理程序管理器
12.4.3 数据的验证
12.4.4 “清洁”数据
12.4.5 转换数据
12.4.6 综合应用所有处理程序
12.5 使用数据处理程序
12.6 如何编写数据处理程序管理器
12.7 如何编写数据处理程序
12.8 基本的数据处理程序管理器的体系结构
12.9 基本的数据处理程序的体系结构
第13章 使用EXTROPIA::LOCK锁定资源
13.1 不使用flock()的原因
13.2 锁定资源和锁定文件
13.3 使用锁
13.3.1 创建锁
13.3.2 定义锁驱动程序
13.3.3 锁定资源和资源解锁
13.3.4 处理锁的错误
13.3.5 锁定资源后的清除
13.4 如何编写锁驱动程序
13.5 基本的锁体系结构
第14章 使用EXTROPIA::ENCRYPT保护数据
14.1 加密基础 448
14.1.1 传统的双向加密
14.1.2 对称加密
14.1.3 非对称加密
14.1.4 数据签名
14.1.5 单向加密
14.2 使用加密模块
14.2.1 创建加密程序
14.2.2 加密驱动程序的定义
14.2.3 加密数据
14.2.4 比较加密数据
14.2.5 配置PGP加密
14.3 如何编写加密驱动程序
第15章 使用KEYGENERATOR生成密钥
15.1 密钥生成的策略
15.1.1 POSIX
15.1.2 随机
15.1.3 计数器
15.1.4 进程
15.1.5 组合
15.1.6 总结
15.2 使用KeyGenerator
15.2.1 密钥生成器驱动程序
15.2.2 创建密钥生成器
15.2.3 密钥生成器驱动程序的定义
15.2.4 创建密钥
15.3 编写密钥生成器驱动程序的方式
第16章 使用UNIQUEFILE创建独立文件
16.1 生成独立文件名
16.1.1 短暂的文件名
16.1.2 不容易猜测的文件名
16.1.3 包含基于计数器ID的文件名
16.1.4 包含应用程序信息的文件名
16.1.5 使用Extropia::UniqueFile处理这些情形
16.2 使用独立文件
16.2.1 创建独立文件
16.2.2 删除独立文件
16.2.3 其他独立文件操作
16.2.4 查找临时目录
16.2.5 总结
第17章 使用EXTROPIA::MAIL从应用程序中发送电子邮件
17.1 使用Mail
17.1.1 创建邮寄程序
17.1.2 邮件驱动程序的定义
17.1.3 发送邮件
17.1.4 安装驱动程序
17.2 如何编写邮件驱动程序
第18章 使用SESSION和SESSIONMANAGER维护状态
18.1 会话基础
18.1.1 方法1:HTML表单变量
18.1.2 方法2:PATH_INFO环境变量
18.1.3 方法3:Cookies
18.1.4 总结
18.1.5 会话
18.1.6 会话管理器
18.2 使用会话
18.2.1 创建会话
18.2.2 会话驱动程序的定义
18.2.3 获取属性和设置属性
18.2.4 可选方法:使用会话散列
18.2.5 会话元数据的管理
18.2.6 数据和锁定策略
18.3 使用会话管理器
18.3.1 创建会话管理器
18.3.2 会话管理器驱动程序的定义
18.3.3 创建会话
18.3.4 获取当前活动会话的列表
18.3.5 删除旧会话
18.4 如何编写会话驱动程序
18.5 如何编写会话管理器驱动程序
18.5.1 实现会话管理器
18.5.2 结论
第19章 使用EXTROPIA::DATASOURCE访问数据
19.1 Data Source的优点
19.1.1 数据抽象
19.1.2 数据源术语
19.2 使用DataSource
19.2.1 创建数据源
19.2.2 使用数据源查询语言
19.2.3 增加数据
19.2.4 删除数据
19.2.5 更新数据
19.2.6 批处理更改
19.2.7 检索数据
19.3 使用RecordSets
19.3.1 检索数据
19.3.2 获取整个RecordSet的信息
19.3.3 RecordSet的其他方法
19.3.4 选择作业的正确RecordSet类型
19.3.5 RecordSets和CGI
19.4 使用DataType和Sort对象
19.4.1 使用DataTypes
19.4.2 使用Sort
19.5 编写定制驱动程序
19.5.1 体系结构概述
19.5.2 编写DataSource驱动程序
19.5.3 编写RecordSet驱动程序
19.5.4 编写Sort对象
19.5.5 编写DataType对象
19.6 理解DataSource和RecordSet
19.6.1 幕后添加记录
19.6.2 幕后搜索
第20章 用EXTROPIA::AUTH实现WEB应用程序安全性
20.1 身份认证和授权
20.1.1 Extropia::auth体系结构
20.1.2 auth管理
20.1.3 auth
20.1.4 auth缓存
20.1.5 auth场景
20.2 使用auth管理器
20.2.1 创建auth管理器
20.2.2 auth管理器驱动程序的说明
20.2.3 用户身份认证
20.2.4 用户授权
20.2.5 获取用户信息
20.2.6 设置缓存用户信息
20.2.7 刷新缓存的用户信息
20.2.8 注销
20.3 使用auth
20.3.1 创建auth对象
20.3.2 auth驱动程序的说明
20.3.3 用户身份认证
20.3.4 用户注册
20.3.5 搜索用户
20.3.6 用户授权
20.3.7 获取用户信息
20.3.8 设置缓存用户信息
20.3.9 刷新缓存用户信息
20.4 使用Auth::Cache
20.4.1 创建Auth::Cache对象
20.4.2 Auth::Cache驱动程序的说明
20.4.3 获取用户信息
20.4.4 设置缓存用户信息
20.4.5 用户授权
20.4.6 管理组缓存
20.4.7 清除缓存
20.5 如何编写auth管理器驱动程序
20.6 如何编写auth驱动程序
20.7 如何编写Auth::Cache驱动程序
第21章 使用EXTROPIA::LOG记录日志
21.1 使用日志
21.1.1 创建日志
21.1.2 定义日志驱动程序
21.1.3 写入日志
21.2 编写日志驱动程序的方式
21.2.1 实现日志
21.2.2 浏览Extropia::Log::File 代码
21.3 理解基础日志模块