EDU511 国际专业IT教育服务门户
设为首页   加入收藏    联系我们
寻找IT教育内容合作伙伴
招聘教育网络编辑和运营门户高手
中讯IT教育2008年改版上线
寻找地方站运营伙伴QQ:59955917
中讯IT 技术成就未来
   你现在的位置:首页 >> 新闻系统 >> 数据库 >> Mysql >> 基础教程 >> 正文

在Web应用程序中使用DBI

 
 
日期:08-05-04 21:43:01 点击: 来源:CSDN
 
    迄今为止,我们编写的DBI 脚本用于命令行环境中的命令解释程序,但DBI 在其他环境下也是有用的,例如在基于Web 的应用程序的开发中。当编写能从Web 浏览器调用的DBI脚本时,就打开了新鲜而有趣的与数据库交互的性能。
    例如,如果以表格的形式显示数据,则可以很容易地把每个列标题转换为可以选择的连接,以便将该列的数据重新排序。它允许单击一次就可以以不同的方式查看数据,而又不必键入任何查询。或者可以提供一种用户可以为数据库搜索而键入的标准格式,然后,显示含
有搜索结果的页面。像这种简单的能力能够特别地改变为访问数据库内容而提供的交互性的水平。除此之外,Web 浏览器的显示能力比在终端窗口获得的能力要明显地更好一些,所以,输出也经常看起来更漂亮。
    在这部分,我们将创建下面的基于Web 的脚本:
    samp_db 数据库中表的通用浏览器。这与我们想对这个数据库完成的任何特定的任务无关,但是它举例说明了若干Web 程序设计概念,并提供了一种查看这些表所含有的信息的方便方式。
    允许我们查看任何给定的测验或测试分数的分数浏览器。它作为回顾评分事件结果的快速方式是很方便的,并且当我们需要创建测试的等级曲线时,它是有用的,所以我们可以以字母等级来标记试卷。
    寻找分享共同兴趣的历史同盟成员的脚本。通过允许用户输入搜索短语来完成它,然后在member 表的interests 域来搜索短语。我们已经编写了一个行命令脚本来做这些,但是,基于Web 的版本提供了有指导意义的参考观点,允许对同一任务比较两种方法。
    我们将使用CGI.pm Perl 模块来编写这些脚本,这个模块是将DBI 脚本连接到Web 上最容易的方法(有关获得CGI.pm 模块的说明,请参阅附录A)。之所以称为C G I . p m,是因为它有助于编写使用公共网关协议的脚本,这个协议定义了Web 服务器如何与其他程序通信。CGI.pm 处理涉及了许多通用内务处理的任务细节,如收集通过Web 服务器传递到脚本的作为输出的参数值。CGI.pm 也提供了生成HTML 输出的便利方法,与编写自己原始的H T M L标记相比,它减少了编写难看的HTML 的机会。
    在本章中,您将学到足够有关CGI.pm 的知识来编写自己的Web 应用程序,但是,当然不是它所包括的所有性能。要想学习有关这个模块的更多知识,请参阅Lincoln Stein (JohnWiley 1998 出版) 撰写的《O fficial Guide to Programming with CGI.pm》,或在以下网址查阅联机文档:
    http://stein.cshl.org/www/software/CGI/

设置CGI 脚本的Apache

    除了DBI 和CGI.pm 之外,编写基于Web 的脚本还需要有一个以上的组件:Web 服务器。这里的说明适合Apache 服务器使用脚本,但是,如果愿意,稍微改编一点这些说明,就可以使用不同的服务器。
    一般来说,Apache 装置的各个部分位于/usr/local/apache 目录。对我们的目的来讲,这个目录中最重要的子目录为h t d o c s(HTML 文档树)、cgi-bin (可执行的脚本和We b服务器调用的程序),和c o n f(配置文件)。这些目录也可能放在系统中的其他地方。如果是这样,则要对下面的注意事项做适当的调整。
    应该验证cgi-bin 目录不在Apache 文档树的内部,以便它内部的这些脚本不能作为无格式文本来请求。这是个安全的防范方法。您也不愿意让怀有恶意的客户机程序检查您的脚本,通过提取这些脚本的文本并研究它们来作为安全的突破口。
    要想安装以Apache 方式使用的CGI 脚本,则将它放在cgi-bin 目录下,然后将这个脚本的所有权更改为运行Apache 的用户,并将它的模式更改为对该用户为可执行的和只读的模式。例如,如果Apache 以名称为www 的用户方式运行,则使用下面的命令:
    % chown www script_name
    % chmod 500 script_name
    可能需要用www 或root 运行这些命令。如果不允许在cgi-bin 目录下安装脚本,则可以请求系统管理员代表您来这样做。
    安装这个脚本之后,通过向Web 服务器发送适当的U R L,可以请求浏览器上的这个脚本。典型的URL 是这样的:
    http://your.host.name/cgi-bin/script_name
    从Web 浏览器请求脚本会导致Web 服务器执行它。返回脚本的输出,结果作为We b 页面出现在浏览器中。
    如果为寻求更好的性能而使用具有mod_perl 的CGI 脚本,则可以这样做:
    1) 确保至少有以下版本的必需软件: Perl 5.004、CGI.pm 2.36和mod_perl 1.07。
    2) 确保将mod_perl 编译为Apache 可执行的文件。
    3) 建立一个存储脚本的目录。我使用了/usr/local/apache/cgi-perl。cgi-bin 不应该位于Apache文档树的内部,出于同样的安全原因, cgi-perl目录也不应该在那里。
    4) 告知Apache,与位于cgi-perl 目录中的脚本mod_perl 相关联:

     如果正在使用Apache 的当前版本,这个版本使用单个的配置文件,则将所有这些指示放在httpd.conf 中。如果Apache 的版本使用三个旧文件的方法来配置信息,则将A l i a s指示放入srm.conf 中,将Location 行放入access.conf 中。对于cgi-perl 目录,不要启用m o d _ per l、PerlSendHeader 或PerlSetupEnv 指示。这些由CGI.pm 自动地处理,启用它们可能导致处理冲突。
    mod_perl 脚本的URL 与标准的CGI 脚本的URL 相类似。唯一的不同之处在于指定cgi -perl 而不是cgi - bin。
    http://your.host.name/cgi-perl/script_name
    有关的详细信息,请参阅下面地址的Apache Web 站点的mod_perl 区域:
    http://perl.apache.org/

CGI.pm 的简要介绍

    为了编写使用CGI.pm 模块的Perl 脚本,将use 行放在这个脚本的开头附近,然后创建让您访问CGI.pm 方法和变量的CGI对象:
    use CGI;
    my($cgi)=new CGI;
    我们的CGI 脚本使用了CGI.pm 的性能,它通过使用$cgi 变量调用方法来实现。例如,为了生成级别1标题,我们将这样使用h1( ) 方法:
    print $cgi->h1("My Heading");
    CGI.pm 也支持允许以函数调用它的方法的使用风格,而不用前导的‘ $ c g i - >’。在这里,我没有使用这个语法,是因为‘ $ c g i - >’符号更类似于使用DBI 的方式,还因为它防止C G I . p m函数名与可以定义的任何函数名产生冲突。
    1. 检查输入参数,并编写输出
    CGI.pm 所做的事情之一就是照看所有丑陋的细节,这些细节涉及到收集由We b服务器向脚本提供的输入信息。为了获得那些信息,所需做的就是调用param( ) 方法。可以如下获得所有可用的参数名:
    my (@param)=$cgi->param();
    为了检索特定参数的值,只命名感兴趣的参数:

    CGI.pm还提供生成传送给客户机浏览器的输出方法。考虑下面的HTML文档:

    这个代码使用$cgi来产生等价的文档:


    使用CGI.pm 生成输出,而不是编写自己原始的H T M L,这样做的一些优点是,可以按逻辑单元考虑,而不是按单独的组成标识来考虑,而且HTML 不太可能含有错误(我说“不太可能”的原因是CGI.pm 不禁止做古怪的事情,如含有一列内部的标题)。除此之外,对于
编写的非标记文本,CGI.pm 提供自动的字符转义,如HTML 中指定的‘<’和‘>’。
    如果愿意,CGI.pm 生成输出方法的使用并不排斥编写自己原始的H T M L。可以将这两种方法混合起来,组合调用具有生成文字标识的显示语句的CGI.pm 方法。
    2. 转义的HTML 和URL 文本
    如果经CGI.pm 方法,如start_html( ) 或h1( ),编写非标记的文本,则自动地转义文本中的特定字符。例如,如果使用下面的语句生成标题,则标题文本中的‘ &’字符将由C G I . p m转换为‘& a m p ;’:
    print $CGI->start_html (-title=>"A,B&C");
    如果不使用CGI.pm 生成输出的方法编写非标记的
 
责任编辑:
 
前一篇:
后一篇:
相关新闻(文章)

登录模块加载中...
   热点数据库教程
友情链接
重庆之窗 | 重庆IT教育 | 我爱论文网 | 涪陵课件园 | 中国教育导航 | 第一教育网 | 中华IT培训网 
百度网址大全   重庆电脑维修网   华育国际教育 maple story   中国销售培训网    更多友情链接>>>
地址:重庆渝中区大坪正街88号 Copyright © edu511.com All rights reserved.
本站建设得到北京泰胜得风险投资机构、重庆网通信息港、平全教育服务中心与的大力支持            重庆视网科技发展有限公司版权所有 邮编:400041
电话:023-61630611 15902314551            ICP备案号:渝ICP备08002346号 QQ:59955917       邮箱:sysium_yuh@126.com yuhong@edu511.com