快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡新京返水在哪里_龟发之家论坛



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 met澳门新葡新京返水在哪里hod

sub get_param {澳门新葡新京返水在哪里die}

sub is_print_form_mode { shift->get_par澳门新葡新京返水在哪里am('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 的改进

同时,该模块也有弱点。有两种类型的模板标签:和。这对付 HTML 编码职员来说有些不便。第一种不得当应用验证器的人。第二种不敷光显。此外,两种类型无法被像 > 这样的 HTML 布局所吸收。浏览器无法精确显示这类代码。另一个问题呈现在和 JavaScript 同时应用模板的时刻(例如,试着在浏览器窗口中打开 HTML::Template 2.2 模块中的 /templates/long_loops.tmpl)。

履行依次打开及关闭一个额外标签(两者均可能为空)会变得加倍有效。一些句法类型也能起到赞助感化。一部分 HTML 设计职员更爱好用在 PHP 中的标签,或用在 ASP 中的标签。别的, _TMPL_TAG 能在标签而不是中被有效应用。

可能还必要其它改进。当然,一个 HTML::Template 的新的和特定的派生类可能会有用。这就必要您复制并编辑伟大年夜的 _parse() 措施,该措施是模块的核心。另一个更为机动的办理规划是在未来能得以简便、快速地进级的工具技巧根基上创建一个新的模块。遗憾的是您不能在 HTML::Template 模块中实现这一步。

用 CGI::Application 创建可重用的 Web 利用法度榜样

CGI::Application 模块是专为创建可重用的 Web 利用法度榜样而设计的,它应用了工具技巧,并包括了 CGI 和 HTML::Template 模块。这一模块的不雅念简单而有效:利用法度榜样驱动 Web 页,但反过来则不成立(就像 PHP、ASP、JSP 和 EmbPerl 等等)。Web 利用法度榜样代码能保存在单个文件(模块)中。此外,该文件能包孕完备的节制代码(客户端与 Web 页以及数据库和操作系统界面之间的交互感化)。

CGI::Application 模块对付大年夜多半 Web 利用法度榜样(包括留言簿)来说都是一流的办理规划。应用该模块能随意马虎地创建一个新的和特定的派生类,它带有新的措施和颠末改进的根基类。还可以有一个承袭下来的构造法度榜样(有着留言簿专用的新参数)和一个承袭下来的 load_tmpl() 措施(举例来说,若用特定的模板模块来代替 HTML::Template)。

结论

这种由受着单个 Perl 模块节制的 Web 利用法度榜样来驱动 Web 页(模板)的设想对交互式 Web 利用法度榜样分外有效。模板同样能驱动利用法度榜样(在 CGI::Application 和 HTML::Template 模块中就不存在该功能)。留言簿阐清楚明了这种履行:模块形式包括了“名称”、“电子邮件”和“消息正文”等字段。因为不必在脚本中进行直接的字段定义,这些字段能由脚本随意马虎地从模板中得到。是以,我们就有了一个有重用性的利用法度榜样:要改动利用法度榜样,只需编辑模板就行了。

原文链接:http://www-128.ibm.com/developerworks/cn/linux/sdk/perl/perl-web/index.html

您可能还会对下面的文章感兴趣: