Linux中国  设为主页
 收藏本站
 
当前位置: > 首页 ->Linux技术 ->Linux程序设计 ->用Perl 来创建可重用的Web应用程序
  相关分类: 
入门与提高
系统管理
网络应用
嵌入式系统
内核研究
服务器相关
发行版专区
Linux程序设计
Linux安全
BSD相关
桌面应用
  站内搜索: 
热门文章排行
热门文章排行 Linux系统下C语言编程 基础知识介绍 (05-01)
快速编辑Shell命令行(06-04)
Linux系统环境下的Socket编程详细解(04-19)
Awk 实例(一) (04-22)
基于libmad 的简单MP3流媒体播放器的(04-22)
精采文章排行
精采文章排行 快速编辑Shell命令行(06-04)
从2.4到2.6内核发展中的改进(06-04)
两个很详细的shell实例(06-04)
内核设计篇(06-04)
shell技巧(06-04)
  ·从2.4到2.6内核发展中的改进·两个很详细的shell实例·内核设计篇·shell技巧·批量添加用户·HowtoCreatingandBootingaNewKernelWitha·利用ip_conntrack表实现封ip的shell脚本,·30分钟搞定BASH脚本编程!·Shell初学者的入门知识

用Perl 来创建可重用的Web应用程序

作者:Eugene Logvinov    来源:IBM DW中国   点击:   日期:2007-04-22 [收藏] [投稿]

  IE是否经常中毒?推荐您

Perl 是面向复杂 Web 应用程序开发的方便而有效的工具。然而,即使是经验丰富的程序员也会因为 Perl 的学习和使用难度太高而不愿使用。本文阐述了 Perl 面向对象的执行能简化工作,特别是因为其分布式设计及应用程序的功能性能使其比其他 Web 技术更为有效

当我尝试寻找一个好的留言簿脚本时发现,在 CGI 脚本中,面向对象的执行并不常见。我想要一个能通过改变式样、添加新功能等方式能进行轻易的修改,并能用来建立论坛的脚本。在 Web 上三十种免费留言簿中,没有一种符合我的需要。因此我转向了对象技术,作为面向基于 HTML 模板的、可重用的 Web 应用程序的解决方案。

对象和类的关系

在设计对象模型前,最好检查一下现有的可能有用的 CPAN (Comprehensive Perl Archive Network) 模块。主要问题是新创建的类与 CPAN 模块类之间的关系。这种关系可能会是:a) 一个标准类对象包含在新创建的类中(“包含”关系),或者不太常见的 b) 新创建的类从标准类继承而来(“等价”关系)。

下面列出的代码是一个面向 My 类的构造程序示例,它从 BaseClass 继承而来。此外, My 类包括 AnotherClass 对象,该对象是私有的(其名称以下划线字符开始 -- 这是个并非由 Perl 本身实施的传统)。


清单 1. My 类:执行关系
package My;
require BaseClass; #required if BaseClass is present in BaseClass.pm
@ISA=qw(BaseClass);
use AnotherClass;
sub new {
    my $package=shift;
    my $self=$package->SUPER::new($package); #create object in BaseClass
    $self->{_another_class_object}=new AnotherClass;
    $self;
}

执行特定的 CGI 类

Lincoln Stein 的 CGI 模块非常适合处理脚本参数,但不适合用来生成 HTML 元素(当 HTML 嵌在脚本内部时)。有意思的是,CGI 模块既能以面向函数的方式使用,也能以面向对象的方式使用,并保持了被继承的能力。例如,CGI 模块能被 CGI::Apache 和 CGI::Fast 模块所继承,它们分别是 Perl-Apache API 和 Open Market FastCGI 标准的 CGI 接口。

大多数 Web 服务器保留有它们自己的 API,该 API 执行 CGI API,并以特定的功能对其予以增强。Apache::ASP 模块(移植到 Apache Web 服务器上的 Active Server Pages)使用了五个面向 CGI 和会话管理的对象,这种管理使 CGI 脚本的编写更加容易。

对于留言簿脚本设计来说,可以使用 API 来创建一个抽象类。一个抽象类至少需要一个纯虚拟函数。在一般情况下,它可能包括 new() 构造程序函数和 get_param() 方法(没有为之定义执行程序)。它应该包括使用 CGI 所需要的所有函数: get_cookie(), set_cookie(), get_script_url(), 和甚至更为高级的函数,如 is_print_form_mode()is_print_entries_mode() 。该抽象类将被特定的 API 实现所继承。因此,当类被移植到另一个 API 上时,应该创建一个继承抽象类的新类。

Perl 不直接支持抽象类。为此,我们需要用一些简单的技巧:禁止类对象的创建(让我们把类命名为 AbstractCGI ,请参阅以下清单),并定义所有的纯虚拟函数,这样在每次函数调用时就会发生错误。在这种情况下,要从抽象类中创建一个新的类,就应只继承 init ()get_param () 方法。新类已经含有了其它(独立于 API 的)方法。


清单 2. AbstractCGI 类:实现特定的 API (CGI)
package AbstractCGI;
sub new {
    my $package=shift;
    my $self={
        _cgi_method=>undef, #simple class data
        _query=>undef
    };
    bless $self, ref $package || $package;
    $self->_init;
    $self;
}
sub _init {die} #private method
sub get_param {die}
sub is_print_form_mode { shift->get_param('mode') eq 'form' }
sub is_print_entries_mode { shift->get_param('mode') eq 'entries' }

使用 HTML 模板

让我们来看看用 HTML 模板来创建类。留言簿设计式样能存储在一个由脚本处理的普通 HTML 文件中,这样 HTML 编码人员可以对 CGI 一无所知,并能独立于 CGI 开发人员来设计 HTML 页。需要两个 HTML 文件:form.html (“添加输入项”页)以及 view.html (“查看留言簿”页)。

在设计新类之前,让我们来看一下 CPAN。HTML::Template 模块允许在 CGI 脚本中使用 HTML 模板。Sam Tregar (模块的创建者)利用有意思的功能创建了一种有效的工具。模板本身是一个普通 HTML 文件,它含有由脚本处理的额外标签。当页面传递到客户端时,标签被脚本中定义的值所替代。此外,模块部分能根据脚本的值而被排除、包含或重复。这些关于模板的设想对于编写留言簿脚本来说特别有帮助。

对 HTML::Template 的改进

同时,该模块也有弱点。有两种类型的模板标签: <TEMPLATE_TAG><!-- TEMPLATE_TAG --> 。这对于 HTML 编码人员来说有些不便。第一种不适合使用验证器的人。第二种不够鲜明。此外,两种类型无法被像 <a href=<!-- TMPL_VAR NAME=URL -->><!-- TMPL_VAR NAME=URL --></a>

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<

上一页12 下一页

上一篇:45分钟构建Moddle服务器   下一篇:Awk 实例(一)
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论

   相关文章:
·快速编辑Shell命令行

   文章评论:(1条)
  
 请留名: 匿名评论   点击查看所有评论 论坛讨论
 

 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。