大型机构很有可能已经具有了相当数量的原有应用程序。这些“旧”应用程序如何捆绑在一起才能组成一个具有合理结构的Web前端呢?
所有必要的应用程序和Web客户程序之间必须设置Web服务器,但这种结构通常会产生许多安全方面的问题。首先,你可能并不希望这些系统暴露给Web世界。其次,大量的此类应用程序中重复编写错误处理代码需要投入过多的精力。第三,在涉及多个Web服务器的情况下,可视的HTML
Web页面成为最简单的集成点。而这一切都直接暴露给了用户,很难成为开发中的系统隐藏信息之地。最后,这样的系统不能同数据脱离关系独立存在:表单提交只能前往预先设置的唯一方向获取Web服务器提供的服务。
依赖于数据的提交操作可以两种简单方式添加。最简便的方法就是在客户端编写JavaScript程序检查表单数据。在用户按下提交按钮时,JavaScript脚本程序就修改目标URL。然而,这个小技巧缺乏安全性。另一个办法是采用重定向系统。也就是说,表单被提交给Web服务器,一个服务器端应用程序拾取数据,然后不是处理这些提交数据而是发回一个HTTP重定向。这一回复等于告诉Web浏览器把表单数据重新发送给“真正”负责数据处理的Web服务器。于是,在采用该方式的情况下系统集成点就从HTML网页转到了HTTP协议,可是这样做毕竟集成点还是在用户端,所以系统还是部分暴光了。
更好的解决方案就是让一个Web服务器做网关。而其他所有的服务器都隐藏在公共视野的背后。所有的请求都发给这台网关服务器,它检查每一个请求并直接转发给正确的处理服务器。于是系统集成点就转移到了网关服务器之后的私有处理服务器。这里当然安全多了。比方说,为了把提交URL映射到另一主机的物理URL采用这一技术就不但安全而且实用。该系统还可以根据用户的类型让用户自己动态地定制Web处理。我们现在就用一个简单的Perl
CGI程序向大家描述以上的原则。
我们的示例系统其工作原理就是理解HTTP及其请求-响应消息风格。请你参考RFC 2616 了解更多的细节。该RFC可以从www.w3.org
网站获得。为了产生和操作这样的消息你应该采取强大的HTTP工具。
档次最低的就是LWP Perl模块了,LWP是lib-www-(in)-Perl的缩写。Lib-www 是标准的HTTP接口,一种用C语言编写的函数库。LWP是一个对应lib-www
的模块但却是用Perl编写的。LWP::UserAgent 子模块就是你需要的LWP专门部分。它处理HTTP两台计算机之间的客户-服务器交互。
LWP本身读起来可够烦的,所以很多其他模块为加快脚本开发应运而生,尤其是HTTP::Request和HTTP::Headers都提供了用于创建HTTP请求的对象。此外还有HTTP::Response;而这些对象都是由LWP提供。
最后,你需要的无非是旧式CGI模块来捕获用户提交的数据。虽然用户表单提交是一种HTTP请求消息,在它被传递给CGI的时候,你所要做的不过是处理一些环境变量和表单数据。程序清单A演示了所需要的步骤。