- 写在前面的话
- 引言
- 第 1 章 对象入门
- 第 2 章 一切都是对象
- 第 3 章 控制程序流程
- 第 4 章 初始化和清除
- 第 5 章 隐藏实施过程
- 第 6 章 类再生
- 第 7 章 多形性
- 第 8 章 对象的容纳
- 第 9 章 违例差错控制
- 第 10 章 Java IO 系统
- 第 11 章 运行期类型鉴定
- 第 12 章 传递和返回对象
- 第 十三 章 创建窗口和程序片
- 第 14 章 多线程
- 第 15 章 网络编程
- 第 16 章 设计范式
- 第 17 章 项目
- 附录 A 使用非 JAVA 代码
- 附录 B 对比 C++和 Java
- 附录 C Java 编程规则
- 附录 D 性能
- 附录 E 关于垃圾收集的一些话
- 附录 F 推荐读物
15.6.1 CGI 数据的编码
在这个版本中,我们将收集名字和电子函件地址,并用下述形式将其保存到文件中:
First Last <email@domain.com>;
这对任何 E-mail 程序来说都是一种非常方便的格式。由于只需收集两个字段,而且 CGI 为字段中的编码采用了一种特殊的格式,所以这里没有简便的方法。如果自己动手编制一个原始的 HTML 页,并加入下述代码行,即可正确地理解这一点:
<Form method="GET" ACTION="/cgi-bin/Listmgr2.exe"> <P>Name: <INPUT TYPE = "text" NAME = "name" VALUE = "" size = "40"></p> <P>Email Address: <INPUT TYPE = "text" NAME = "email" VALUE = "" size = "40"></p> <p><input type = "submit" name = "submit" > </p> </Form>
上述代码创建了两个数据输入字段(区),名为 name 和 email。另外还有一个 submit(提交)按钮,用于收集数据,并将其发给 CGI 程序。Listmgr2.exe 是驻留在特殊程序目录中的一个可执行文件。在我们的 Web 服务器上,该目录一般都叫作“cgi-bin”(注释③)。如果在那个目录里找不到该程序,结果就无法出现。填好这个表单,然后按下提交按钮,即可在浏览器的 URL 地址窗口里看到象下面这样的内容:
http://www.myhome.com/cgi-bin/Listmgr2.exe?name=First+Last&email=email@domain.com&submit=Submit
③:在 Windows32 平台下,可利用与 Microsoft Office 97 或其他产品配套提供的 Microsoft Personal Web Server(微软个人 Web 服务器)进行测试。这是进行试验的最好方法,因为不必正式连入网络,可在本地环境中完成测试(速度也非常快)。如果使用的是不同的平台,或者没有 Office 97 或者 FrontPage 98 那样的产品,可到网上找一个免费的 Web 服务器供自己测试。
当然,上述 URL 实际显示时是不会拆行的。从中可稍微看出如何对数据编码并传给 CGI。至少有一件事情能够肯定——空格是不允许的(因为它通常用于分隔命令行参数)。所有必需的空格都用“+”号替代,每个字段都包含了字段名(具体由 HTML 页决定),后面跟随一个“=”号以及正式的字段数据,最后用一个“&”结束。
到这时,大家也许会对“+”,“=”以及“&”的使用产生疑惑。假如必须在字段里使用这些字符,那么该如何声明呢?例如,我们可能使用“John & MarshaSmith”这个名字,其中的“&”代表“And”。事实上,它会编码成下面这个样子:
John+%26+Marsha+Smith
也就是说,特殊字符会转换成一个“%”,并在后面跟上它的十六进制 ASCII 编码。
幸运的是,Java 有一个工具来帮助我们进行这种编码。这是 URLEncoder 类的一个静态方法,名为 encode()。可用下述程序来试验这个方法:
//: EncodeDemo.java // Demonstration of URLEncoder.encode() import java.net.*; public class EncodeDemo { public static void main(String[] args) { String s = ""; for(int i = 0; i < args.length; i++) s += args[i] + " "; s = URLEncoder.encode(s.trim()); System.out.println(s); } } ///:~
该程序将获取一些命令行参数,把它们合并成一个由多个词构成的字串,各词之间用空格分隔(最后一个空格用 String.trim() 剔除了)。随后对它们进行编码,并打印出来。
为调用一个 CGI 程序,程序片要做的全部事情就是从自己的字段或其他地方收集数据,将所有数据都编码成正确的 URL 样式,然后汇编到单独一个字串里。每个字段名后面都加上一个“=”符号,紧跟正式数据,再紧跟一个“&”。为构建完整的 CGI 命令,我们将这个字串置于 CGI 程序的 URL 以及一个“?”后。这是调用所有 CGI 程序的标准方法。大家马上就会看到,用一个程序片能够很轻松地完成所有这些编码与合并。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论