perl编程_19 复杂窗体.PDF
文本预览下载声明
下载
第1 9学时 复 杂 窗 体
We b上的窗体不只是简单的单页面窗体。有时窗体要跨越若干页。这些复杂的窗体以调
查、查询和购物车等应用程序的形式出现。
这些比较复杂的窗体需要使用某些不同的编程技巧,本学时你将要学习这些技巧。
在本学时中,你将要学习:
• 如何创建多页窗体。
19.1 复杂的多页窗体
使用C G I程序来编写复杂的多页窗体时,你会遇到一个特殊的编程难题。We b浏览器与We b
服务器之间的连接根本不是一个持久的连接。 We b浏览器与服务器建立连接,检查 We b页,然
后便断开与We b服务器之间的连接。在服务器与你的We b浏览器之间并不保持不间断的连接。
更为复杂的是:浏览器每次与 We b服务器连接时,We b服务器并不认为该浏览器预先访问
过该站点。服务器并不每次都能很容易地识别该浏览器。
类似的一种情况是:图书馆的读者与没有记忆力的图书馆管理员之间进行谈话,读者每
次只能向管理员提出一个问题。
读者向图书管理员借阅一本书,比如关于亚利桑那州的一本书,图书管理员可以检索这
本书。图书管理员之所以能够检索这本书,是因为这个请求很容易满足。但是读者不能要求
借阅同一个专题的另一本书。图书管理员不能记住上一个借书请求,因此他无法借给你同一
个专题的另一本书。如果借书的请求改为“给我另一本关于亚利桑那州的书”,图书管理员仍
然无法满足读者的要求,因为他检索的书可能与第一次检索的这本书一样。
若要检索同一专题的第二本书,惟一的办法是说:“我需要另一本关于亚利桑那州的书,
我已经有了一本名叫《在亚利桑那州定居》的书”。这个借阅请求带有足够的能够说明问题的
信息,使图书管理员能够知道什么应答是不适当的。
为We b页编写多页窗体,也可以使用同样的解决办法。每个问题 / 答复会话必须包含足够
的信息,使We b服务器能够知道它需要做什么。你可以用几种不同的方法来创建这样的会话,
其中的一种方法,即使用隐藏的 H T M L域,将在本学时中介绍。
19.2 隐藏域
要使We b窗体能够“记住”信息,最容易的方法是使用隐藏域,将以前的信息嵌入 We b窗
体。隐藏域是H T M L 窗体的组成部分,它使域和值成为H T M L 的组成部分,但是在显示窗体时,
窗体中并不出现这些域和值。在H T M L 中,这些域和值编写为下面的形式:
如果将上面的 H T M L代码放入一个窗体,新的名字(“f u l l n a m e ”)和值(“Pink Floyd ”)
将成为窗体的组成部分。如果该窗体被提交给一个 Perl CGI 程序,p a r a m 函数将返回一个关键
字和隐藏域的值。
218使用第三部分 将Perl 用于C G I
下载
在线商店
如果要举一个如何使用隐藏域的例子,可以看一看在线商店,它使用一系列的 We b 页,
使人们能够根据在线目录来选购商品。目前,我们只是向你介绍复杂窗体的运行情况,在本
学时后面部分的内容中,要介绍另一个复杂的窗体,它包含用于创建一个在线调查的代码。
如果不能实现某种形式的安全 We b事务处理,那么请不要使用这个在线
商店的例子,请注意,这个例子并不包含任何真实的个人信息,如电话号码
或信用卡号码等,因为隐藏域就像正规的 H T M L 窗体,它根本不具备任何安
全性。
图1 9 - 1所示的在线商店第一页显示了该商店的商品清单。
图19-1 在线商店的第一页
当用户单击Go to Store (去商店)按钮时,C G I程序接收来自窗体的值,然后显示完整的
目录,如图1 9 - 2所示。
图19-2 显示在线商店的商
品目录
第二页显示完整的目录。当第一页(带有商店拥有商品的目录)提交时, C G I程序接收各
个值,然后当它为完整的目录输出 H T M L 时,它将商品的指定数量作为隐藏域放入新窗体。
每当C G I程序接收来自H T M L 窗体的值时,新页将包含隐藏域中的旧值,以及普通窗体元
素中的新值。
采用这个方法,
显示全部