-1-基于CGI/Perl的WebMIS的设计与实现朱立谷刘玲赵卫国宋小波梁哲炜(湘潭大学信息工程学院,湖南省湘潭市411105)摘要:本文设计和实现了一个基于Web三层结构的房屋租赁信息系统。采用了Linux作为操作系统,Apache和MySQL作为Web服务器和数据库服务器,采用CGI/Perl编程技术实现了动态网页和数据访问。该方法适合于小型企业建立经济实用的WebMIS系统。关键词:WebMIS,CGI/Perl,Apache,MySQL,LinuxAbstract:InthispaperAWebMISbasedonthethree-layerarchitectureisdesignedandrealized.Linuxisusedasoperatingsystem,ApacheasWebServer,andMySQLasdatabaseServer.DynamicWebPageanddatabaseaccessarerealizedbyCGI/Perlprogramming.Thissolutionisusefulforsmallenterprisesbecauseitisveryeconomic.KeyWords:WebMIS,CGI/Perl,Apache,MySQL,Linux中图分类号:TP391文献标识码:A1.引言随着Internet的普及和Internet/Intranet技术的不断发展,使得以Web技术为核心的浏览器/Web服务器/数据库服务器三层体系结构的应用成为企业管理信息系统开发技术的主流[1]。Intranet终端系统已经统一为Web浏览程序的单一平台。Intranet系统里的文件即应用程序处理结果,都能通过Web浏览程序显示出来。用户通过运行Web浏览程序,各种处理任务都可以通过Web浏览程序调用系统资源来完成。浏览器/服务器模型与传统的客户机/服务器模式相比有以下优势:①浏览器/服务器模式大大简化了客户端。客户端成为廋客户机,开发、维护等几乎所有工作也都集中在服务器端。对网络应用进行升级时,只需要更新服务端,不必要更新客户端,减轻了系统维护与升级的成本和工作量。②事物层可在跨平台的客户端共享,不同逻辑组件的分离意味着图形设计人员,事物逻辑开发人员和数据库分析人员可以相对独立的设计各自的部分。统一的,抽象的用户界面可使用户更有效的从同一数据源中存取数据。③浏览器/服务器结构可更有效的在Internet/Intranet上运行。极大的发挥对异构系统及异种数据库的支持能力,及几乎是无限制的系统扩展能力。2.系统的体系结构与开发环境2.1三层结构技术本系统采用三层结构实现:将客户端与用户界面无关的功能移进了中间层(第二层)与表示功能层和数据层构成三层结构。Web服务器作为表示层,大量的业务处理程序放在应用服务器上作为功能层,而将数据库放在数据库服务器上作为数据层。浏览器/服务器三层结构分布十分灵活,功能层和数据层中的服务器可以有一个到多个。大规模管理信息系统中的数据库和应用程序组件可以被分布在不同的服务器上运行。这些服务器可以是本地的,也可以是远程的,使系统更合理,更灵活,更具扩展性。系统具有彻底的开放性,不限制将要访问系统的用户数。我们开发的是一个小型信息系统,因此所有的服务器均集中在一台主机上。2.2系统体系结构本系统的体系结构如图1所示。采用RedHatLinux7.2作为系统平台。Linux不但可-2-以完全免费得到,具有比Windows更大的稳定性和更强的功能。运行在Linux系统下的Web服务器Apache稳定性高、速度快,而且功能强大,许多大型的门户网站和综合网站都用它作为Web服务器软件。Apache再加上一个完全基于网络的操作系统―Linux,是建立一个Web站点的首选[2]。MySQL是一种速度快可靠性高并且易于使用的数据库产品,可以适应几百万条记录的数据表。MySQL容易与Apache集成。Apache带有专门的Perl支持模块,为建立基于数据库的动态网站提供了强大工具。采用CGI/Perl来创建动态的Web页面。CGI程序的主要任务是处理用户提交的表单数据内容,并产生表单网页的数据。Perl是最适合处理文本格式数据的语言,成为CGI程序的首选语言。CGI程序将用户访问数据库请求转换成查询数据库的语句,并将查询的结果以HTML的形式返回给客户。用户输入的数据是文本内容,查询数据库SQL语句是文本内容,数据库返回的结果也是文本内容,所以,Perl最适合编写CGI程序的语言。2.3CGI的工作原理CGI规范主要定义CGI程序与Web服务器之间的通信方式,CGI程序可以通过以下4种方式与WEB服务器进行通信[3]。①环境变量(EnvironmentalVariable):WEB服务器使用环境变量与CGI程序通信。在CGI规范中定义了这些起通信作用的环境变量。当WEBServer调用CGI程序时,所有这些环境变量被设置。②命令行参数:WEB服务器调用CGI程序时指定命令行参数。③标准输入:WEB服务器将HTTP请求报文体中的信息送至CGI程序的标准输入,输入内容的长度由环境变量CONTENT_LENGTH决定。④标准输出:CGI程序将自己的输出送至标准输出,这里的标准输出实际上是一个完整的客户端浏览器可以识别的HTML文档。我们采用的是将CGI程序包含在HTML页面之内执行的方式,这种执行方式被称为服务器端包含(Server-SideInclude),即SSI。SSIHTML文档的后缀是“.shtml”。当用户访问这种文档时,Web服务器创建子进程来执行这些CGI程序,并将CGI程序执行的结果输出到文档中,返回给用户。2.4CGI/Perl可以编写CGI程序的语言有很多,如:C,VB等。我们选用Perl语言,因为Perl语言具有适应性强,使用简单的特点,已成为CGI编程事实上的标准语言。用Perl编写的CGI程序执行方法如下:用户通过浏览器向Web服务器发出HTTP请求,如果请求是一个CGI程序(通常以CGI或pl为文件名后缀),则服务器启动本机上的Perl解释器,载入该CGI程序运行。如果HTTP请求方法是POST,CGI程序从标准输入读取浏览器发送的数据内容,如果HTTP请求方式是GET,CGI程序从环境变量QUERY_STRING中获取浏览器发送的数据内容。最后将数据发送到客户的浏览器。因为命令行参数和环境变量的大小都有限制因素,而通过标准输入传送的数据则不然,所以表格应尽可能的使用POST请求类型。2.5数据库的连接和断开Perl提供了一个用于对数据库进行编程的接口,这个接口叫DBI[4]。在访问数据库之前Perl程序必须与数据库建立连接,一次数据库连接被称为一次数据库会话(session)。DBI使用一个数据库句柄来标识每个数据库会话。所有的DBI函数均使Apache服务器MySQL服务器浏览器G程序图1基于CGI/PERL的WEBMIS的体系结构执行顺序:①请求访问表单页面;②返回表单页面;③用户提交表单内容;④表单传送到CGI程序处理;⑤调用SQL语句;⑥返回数据;⑦返回处理结果;⑻返回显示处理结果页面。12483756CGI/Perl-3-用这个句柄操作数据库。DBI函数connect与数据库建立连接,并返回标识这个连接的数据库句柄。函数disconnect用于断开与数据库的连接,并且释放数据库句柄。useDBI;#连接到MySQL中的mk数据库。$dbh=DBI-connect(‘DBI:MySQL:mk’,root,197911)||die“cannotconnecttodatabase:”.DBI-errstr;$rc=$dbh-disconnect();2.6SQL语句DBI使用SQL语句完成数据库的操作。DBI将一次操作分成两个阶段:准备SQL语句和执行SQL语句。方法prepare用来准备一条语句,这个方法返回一个语句句柄;方法execute执行已被准备的语句,完成实际的操作。一个语句句柄可以是以下三种状态之一:①就绪状态(Prepared),调用了prepare方法成功之后;②打开状态(Open),执行execute操作成功之后;③非法状态(Invalid),调用disconnect方法成功之后,或prepare调用失败。以下是SQL程序片段:准备语句包含代替字符“?”,在执行语句时,必须用实际字符替代所有这些替代字符这些实际值在参数中传递。3.房屋租赁信息系统的功能与实现房屋租赁信息系统由三大模块组成:①管理员系统管理模块:包括房产资料登记和修改,租户资料登记以及租赁信息的统计。②租户系统管理模块:包括租户资料的修改,退租管理以及房屋和交费信息的查询。③成员系统管理模块:成员资料的登记以及房屋信息资料的查询。如图2所示。在进入房屋租赁系统的时候,必须进行身份认证。有三种身份,各种身份对应数据库中的一个表。由CGI程序调取数据库中的用户信息,通过身份认证后分别进入系统不同的界面,否则返回登录界面。登录界面的程序Index.html的主要部分如下:#准备向house表中插入一组记录$sth=$dbh-prepare(q{insertintohousevalues(?,?,?,?,?,?,?,?,?)})||dieCan'tpreparestatement:$sth-errstr\n;#执行插入语句$sth-execute($h_name,$h_id,$h_area,$h_struct,$h_use,$h_app,$h_money,$h_status,$h_memo);图2房屋租赁系统结构和功能图界面房屋修改界面租户登记界面房屋登记界面租户查询界面房屋查询界面空房查询界面租户修改界面成员注册界面密码修改界面成员查询界面房屋退租界面成员管理界面(member.shtml)租户管理界面(lessee.shtml)管理员管理界面(manager.shtml)图2房屋租赁信息系统结构和功能图界面登陆界面(Index.html,身份认证test.pl)-4-h4formmethod=“Post”action=“”p用户名:inputtype=”text”NAME=”name”value=””size=”60”/pp密码:inputtype=”text”NAME=”passwd”value=””size=”60”/ppinputtype=”submit”name=”submit”value=”用户登录”/p/form/h4用户填写数据后按下按钮提交数据到WEB服务器,即名为WebMIS的主机。由action指定的动作是执行程序test.pl。关键是将用户填写的数据传递给该程序,Post方式决定用标准输入传递数据。将数据插入到MySQL数据库里具体的表中要用到DBI。DBI定义了三种与数据库进行交互的句柄:驱动器程序句柄$drh,数据库句柄$dbh,语句句柄$sth。$drh没有实际的用处。Perl与数据库进行信息交互的程序如下:#!/usr/bin/Perl;useCGIqw/:standard/;useDBI$q=newCGI;#变量赋值$name=param(‘name’);$pass=param(‘passwd’);#连接MySQL中的某一个数据库$dbh=DBI-connect(dbi:MySQL:mk,root,197911)||dieCan'tconnecttodatabsediscuss:DBI-errstr\n;$sth=$dbh-prepare(select*frommanagerwherename=?Andpassword=?)||die“cannot:dbi-errstr\n”;$sth-execute($name,$pass)||die“dbh-errstr\n”;if($sth-fetchro