今日更新
技术新闻
精彩专题
IBM软件技术专区
微软开发专区
技术文档中心
编程语言
网络通信
网络安全
LINUX/UNIX
软件工程与管理
数据库开发
WEB开发
企业应用与开发
移动开发
资源中心
原创专栏
开放系统世界
人才与培训
技术天地论坛
厂商列表
社区推荐

· 女性身体内部人体受孕..
· 十部顶级的变态与情色..
· 感情放纵让我毁了两个..
· 当我撞见姐姐和男友在..
· 卖淫少女惨遭泄愤民工..
· 偷拍街上的走光mm绝对..
· 百度打击google的广告
· 港娱乐圈与黑社会揭秘
赛迪网>>技术应用>>技术开发
关键字: xml;cgi;CGI
来  源: 赛迪网
XML和现代CGI应用程序 (1)
作者:刘彦青 发文时间:2002.12.11
Perl的普及与互联网的蓬勃发展有直接的关系。在互联网发展的早期,人们发现仅仅使用静态的HTML文档不能生成有效的交互式环境,于是引进了公用网关接口(CGI)的概念。Perl强大的功能和容易扩充的特性使得它成为开发CGI应用最自然的选择,并由此迅速地成为CGI脚本的首选语言。CGI本身并非十全十美。但由于得到了众多开发商的青睐,CGI的应用至今仍然十分广泛,而且没有迹象表明在近期会“退休”。

CGI::XMLApplication提供了一个基于XML、可以作为传统CGI脚本的模块。典型的CGI::XMLApplication脚本包括三部分:一个很小的提供对该应用程序访问支持的可执行脚本、实现各种管理者方法的逻辑模块、根据应用状态可能有一个或多个XSLT样式表,XSLT样式表能够将模块返回的结果转化成浏览器可以向用户显示的格式。

下面我们通过例子来简要地介绍CGI::XMLApplication的应用。

例1:CGI XSLT网关

CGI::XMLApplication假定,参与一个项目的设计和开发人员使用XSLT样式表分离应用的逻辑和表示,这样可以使这种分离显得非常直接,也不会对项目带来影响。开发人员只要能够使setStylesheet返回符合当前应用状态的XSLT样式表的位置即可。应用建立的DOM树的转换、XSLT参数向转换引擎的传递、转换后内容向浏览器的传输对用户而言都是透明的。

为了重点说明这种分离,我们的第一个例子不是传统意义上的Web应用,而是一个通用的XSLT网关,它可以添加到服务器的cgi-bin中,将整个XML内容的目录树转化为符合请求的浏览器的格式,而这一切对于用户、样式表和文档的作者而言也都是透明的。

第一步是建立连接客户端的请求和应用的CGI脚本。我们希望XML文档能够方便地通过URL浏览,并使创建这些文档间的超链接非常直观。因此,我们将创建一个没有扩展名的CGI脚本,以便将它作为URL路径中的一个节点,节点右边的所有内容将在包含XML内容的虚拟文档环境中进行解释。在这种情况下,我们将CGI称作是样式表选择者。

use strict;
use lib '/path/to/secure/webapp/libs';
use XSLGateway;
use CGI qw(:standard);my $q = CGI->new();
my %context = ();
my $gateway_name = 'stylechooser';


在加载合适的模块和设置一些在整个脚本范围内有效的变量后,我们开始向被传递给处理该应用逻辑的类的%context中添加一些域。在这个应用软件中,我们只传输要求的指向脚本文件路径右边的URL(REQUEST条目)和包含有存储在查询参数style中的数据的STYLE关健字。

$context{REQUEST} = $q->url(-path => 1);
$context{REQUEST} =~ s/^$gateway_name\/?//;
$context{REQUEST} ||= 'index.xml';
$context{STYLE} = $q->param('style') if $q->param('style');


最后,我们创建了XSLGateway逻辑类的一个实例,并通过调用其run方法处理请求,将%context作为唯一的参数。

my $app = XSLGateway->new();
$app->run(%context);


CGI脚本就完成了。下面我们创建完成大部分工作的XSLGateway模块:

package XSLGateway;
use strict;
use vars qw(@ISA);
use CGI::XMLApplication;
use XML::LibXML;
@ISA = qw(CGI::XMLApplication);


象我在简介中提到的那样,CGI::XMLApplication通过事件调用起作用:应用程序类中一个给定的方法的执行依赖于一个指定域的输入(一般情况下是用来提交表格的按钮的名字。),必须执行二种调用方法:selectStylesheet和requestDOM方法。

selectStylesheet返回有关的XSLT样式表的全文件系统路径。为了简单起见,我们假定样式表将保存在一个单一的目录中。我们可以通过$context->{STYLE}域提供其他的样式表,从而增加系统的灵活性。

sub selectStylesheet {
my $self = shift;
my $context = shift;
my $style = $context->{STYLE} || 'default';
my $style_path = '/opt/www/htdocs/stylesheets/';
return $style_path . $style . '.xsl';
}


下一步,我们需要创建requestDOM方法,该方法将返回被传输的XML文档的XML::LibXML DOM表达式。由于我们的网关只适用于静态文件,我们需要使用XML::LibXML对文档进行解析,并返回结果树。

sub requestDOM {
my $self = shift;
my $context = shift;
my $xml_file = $context->{REQUEST} || 'index.xml';
my $doc_path = '/opt/www/htdocs/xmldocs/';
my $requested_doc = $doc_path . $xml_file;
my $parser = XML::LibXML->new;
my $doc = $parser->parse_file($requested_doc);
return $doc;
}


1 2 3 下一页>>



赛迪网推出“IT博客”,花不到一分钟就完成注册
评论】 【推荐】 【 】 【打印】 【关闭

·Linux专区· ·黑客攻防·
· Linux下添加硬盘、分区、格式化任务详解
· FreeBSD服务器的安装与优化之优化篇
· 初学者入门:FreeBSD服务器的安装与优化
· 金企鹅杯两岸四地开源软件大赛圆满结束
· 如何提高Linux系统安全性的十大招数
· 构筑Linux防火墙之为个人用户设置防火墙
· 谁更安全?黑客眼中的防火墙与路由器
· 识破骗局 练就识别QQ活动真伪火眼金睛
· 应用安全大有可为:目的、挑战、总结
· 道高一尺魔高一丈:安全防御的动感魅力
· 警惕网络“内”院起火 积极谋求安内之路
· HHCTRL漏洞被黑客利用 疯狂传播木马
·中国信息化· ·成功案例·
· ERP普及化是饮鸩止渴 精细化才是应用之道
· 赛门铁克第八期《互联网安全威胁报告》解析
· 抢食“数字工商” 国产中间件杀出血路
· 从IBM等操作系统的发展看软件创新的启示
· 服务成就蓝色快车 品牌是怎样炼成的?
· 三大技术应用大会合为一体甲骨文上演三重奏
· 南阳教育城域网 拆掉学校间的“围墙”
· 金算盘助申意美步入信息化快车道
· 不为人知的索尼信息化 谁是幕后英雄?
· InforBus/Q在穗高速路联网收费系统中的应用
· J2EE构建最新金融理念和运作模式的网上银行
· 食品安全令人担心 信息化能否保驾护航
*姓  名: 更多资料 了解方案 认识厂商
*单位名称:
*联系电话:
*电子邮件:
    
◆ 相关文章   ◆ 站内热点推荐
· 用Digester简化XML配置文件处理
· 使用VB.NET实现 Google Web Service
· 用Digester简化XML文档处理
· 用Xalan在IE中浏览XML文件
· [.net] 在传统com程序中使用xml
· 网管员论坛
· 开发者之家
· WLAN无限未来
· 我是如何掉进C#的……
· 中国“人件”非正式调查

   
合作网站: IBM dW中国网站 LinuxAID 软件工程专家网 中国系统分析员 UMLChina MATRIX Mobile2008 JavaResearch 华储网 UML软件工程组织 中国JAVA手机网 JAVA中文站 金山在线 海量科技