1、1基于 CGI/Perl 的 WebMIS 的设计与实现朱立谷 刘玲 赵卫国 宋小波 梁哲炜(湘潭大学信息工程学院,湖南省湘潭市 411105)摘要:本文设计和实现了一个基于 Web 三层结构的房屋租赁信息系统。采用了 Linux 作为操作系统,Apache 和 MySQL 作为 Web 服务器和数据库服务器,采用 CGI/Perl 编程技术实现了动态网页和数据访问。该方法适合于小型企业建立经济实用的 WebMIS 系统。关键词:WebMIS,CGI/Perl,Apache,MySQL,LinuxAbstract: In this paper A WebMIS based on the thr
2、ee-layer architecture is designed and realized. Linux is used as operating system, Apache as Web Server, and MySQL as database Server. Dynamic Web Page and database access are realized by CGI/Perl programming. This solution is useful for small enterprises because it is very economic.KeyWords: WebMIS
3、,CGI/Perl,Apache,MySQL,Linux中图分类号:TP391 文献标识码:A1 引言 随着 Internet 的普及和 Internet/Intranet 技术的不断发展, 使得以 Web 技术为核心的浏览器/Web 服务器/数据库服务器三层体系结构的应用成为企业管理信息系统开发技术的主流 1。Intranet 终端系统已经统一为 Web 浏览程序的单一平台。Intranet 系统里的文件即应用程序处理结果,都能通过 Web 浏览程序显示出来。用户通过运行 Web 浏览程序,各种处理任务都可以通过 Web 浏览程序调用系统资源来完成。浏览器/服务器模型与传统的客户机/服务器模
4、式相比有以下优势: 浏览器/服务器模式大大简化了客户端。客户端成为廋客户机,开发、维护等几乎所有工作也都集中在服务器端。对网络应用进行升级时,只需要更新服务端,不必要更新客户端,减轻了系统维护与升级的成本和工作量。 事物层可在跨平台的客户端共享,不同逻辑组件的分离意味着图形设计人员,事物逻辑开发人员和数据库分析人员可以相对独立的设计各自的部分。统一的,抽象的用户界面可使用户更有效的从同一数据源中存取数据。浏览器/服务器结构可更有效的在 Internet/Intranet 上运行。极大的发挥对异构系统及异种数据库的支持能力,及几乎是无限制的系统扩展能力。2.系统的体系结构与开发环境2.1 三层结
5、构技术本系统采用三层结构实现:将客户端与用户界面无关的功能移进了中间层(第二层)与表示功能层和数据层构成三层结构。Web 服务器作为表示层,大量的业务处理程序放在应用服务器上作为功能层,而将数据库放在数据库服务器上作为数据层。浏览器/服务器三层结构分布十分灵活,功能层和数据层中的服务器可以有一个到多个。大规模管理信息系统中的数据库和应用程序组件可以被分布在不同的服务器上运行。这些服务器可以是本地的,也可以是远程的,使系统更合理,更灵活,更具扩展性。系统具有彻底的开放性,不限制将要访问系统的用户数。我们开发的是一个小型信息系统,因此所有的服务器均集中在一台主机上。2.2 系统体系结构本系统的体系
6、结构如图 1 所示。采用 Red Hat Linux 7.2 作为系统平台。Linux 不但2可以完全免费得到,具有比 Windows 更大的稳定性和更强的功能。运行在 Linux 系统下的Web 服务器 Apache 稳定性高、速度快,而且功能强大,许多大型的门户网站和综合网站都用它作为 Web 服务器软件。Apache 再加上一个完全基于网络的操作系统Linux,是建立一个 Web 站点的首选 2。MySQL 是一种速度快可靠性高并且易于使用的数据库产品,可以适应几百万条记录的数据表。MySQL 容易与 Apache 集成。Apache 带有专门的 Perl 支持模块,为建立基于数据库的动
7、态网站提供了强大工具。采用 CGI/Perl 来创建动态的Web 页面。CGI 程序的主要任务是处理用户提交的表单数据内容,并产生表单网页的数据。Perl 是最适合处理文本格式数据的语言,成为 CGI 程序的首选语言。CGI 程序将用户访问数据库请求转换成查询数据库的语句,并将查询的结果以 HTML 的形式返回给客户。用户输入的数据是文本内容,查询数据库 SQL 语句是文本内容,数据库返回的结果也是文本内容,所以,Perl 最适合编写 CGI 程序的语言。2.3 CGI 的工作原理CGI 规范主要定义 CGI 程序与 Web 服务器之间的通信方式,CGI 程序可以通过以下 4 种方式与 WEB
8、 服务器进行通信 3。环境变量(Environmental Variable):WEB 服务器使用环境变量与 CGI 程序通信。在 CGI 规范中定义了这些起通信作用的环境变量。当 WEB Server 调用 CGI 程序时,所有这些环境变量被设置。命令行参数:WEB 服务器调用 CGI程序时指定命令行参数。标准输入:WEB 服务器将 HTTP 请求报文体中的信息送至 CGI 程序的标准输入,输入内容的长度由环境变量 CONTENT_LENGTH 决定。标准输出:CGI 程序将自己的输出送至标准输出,这里的标准输出实际上是一个完整的客户端浏览器可以识别的 HTML 文档。我们采用的是将 CGI
9、 程序包含在 HTML 页面之内执行的方式,这种执行方式被称为服务器端包含(Server-Side Include) ,即 SSI。SSI HTML 文档的后缀是“. shtml”。当用户访问这种文档时,Web 服务器创建子进程来执行这些 CGI 程序,并将 CGI 程序执行的结果输出到文档中,返回给用户。2.4 CGI/Perl可以编写 CGI 程序的语言有很多,如:C,VB 等。我们选用 Perl 语言,因为 Perl 语言具有适应性强,使用简单的特点,已成为 CGI 编程事实上的标准语言。用 Perl 编写的 CGI 程序执行方法如下:用户通过浏览器向 Web 服务器发出 HTTP 请求
10、,如果请求是一个 CGI 程序(通常以 CGI 或 pl 为文件名后缀) ,则服务器启动本机上的 Perl解释器,载入该 CGI 程序运行。如果 HTTP 请求方法是 POST,CGI 程序从标准输入读取浏览器发送的数据内容,如果 HTTP 请求方式是 GET,CGI 程序从环境变量 QUERY_STRING 中获取浏览器发送的数据内容。最后将数据发送到客户的浏览器。因为命令行参数和环境变量的大小都有限制因素,而通过标准输入传送的数据则不然,所以表格应尽可能的使用 POST 请求类型。2.5 数据库的连接和断开Perl 提供了一个用于对数据库进行编程的接口,这个接口叫 DBI4。在访问数据库之
11、前 Perl 程序必须与数据库建立连接,一次数据库连接被称为一次数据Apache服务器MySQL服务器浏 览 器G程序图 1 基于 CGI/PERL 的 WEBMIS 的体系结构执行顺序:请求访问表单页 面; 返回表单页面;用户提交表单内容;表单传送到 CGI 程序处理; 调用 SQL 语句; 返回数据; 返回处理结果;返回显示处理结果页面。12 483756CGI/Perl3库会话(session) 。DBI 使用一个数据库句柄来标识每个数据库会话。所有的 DBI 函数均使用这个句柄操作数据库。DBI 函数 connect 与数据库建立连接,并返回标识这个连接的数据库句柄。函数disconn
12、ect 用于断开与数据库的连接,并且释放数据库句柄。use DBI;#连接到 MySQL 中的 mk 数据库。$dbh=DBI-connect(DBI:MySQL:mk,root,197911) | die“cannot connect to database:”.DBI-errstr;$rc=$dbh-disconnect();2.6 SQL 语句DBI 使用 SQL 语句完成数据库的操作。DBI 将一次操作分成两个阶段:准备 SQL 语句和执行 SQL 语句。方法 prepare 用来准备一条语句,这个方法返回一个语句句柄;方法execute 执行已被准备的语句,完成实际的操作。一个语句句
13、柄可以是以下三种状态之一:就绪状态(Prepared),调用了 prepare 方法成功之后;打开状态(Open),执行execute 操作成功之后;非法状态(Invalid) ,调用 disconnect 方法成功之后,或prepare 调用失败。以下是 SQL 程序片段:准备语句包含代替字符“?” ,在执行语句时,必须用实际字符替代所有这些替代字符这些实际值在参数中传递。3. 房屋租赁信息系统的功能与实现房屋租赁信息系统由三大模块组成: 管理员系统管理模块:包括房产资料登记和修改,租户资料登记以及租赁信息的统计。租户系统管理模块:包括租户资料的修改,退租管理以及房屋和交费信息的查询。 成员
14、系统管理模块:成员资料的登记以及房屋信息资料的查询。如图 2 所示。在进入房屋租赁系统的时候,必须进行身份认证。有三种身份,各种身份对应数据库中的一个表。由 CGI 程序调取数据库中的用户信息,通过身份认证后分别进入系统不同的界面,否则返回登录界面。登录界面的程序 Index.html 的主要部分如下:#准备向 house 表中插入一组记录$sth=$dbh-prepare(qinsert into house values (?,?,?,?,?,?,?,?,?) | die “Cant prepare statement :$sth-errstrn“;#执行插入语句$sth-execute(
15、$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)图 房屋租赁信息系统结构和功能图界 面登陆界面(Index.html,身份认证test.pl)4用户名:密码:用户填写数据后按下按钮提
16、交数据到 WEB 服务器,即名为 WebMIS 的主机。由 action指定的动作是执行程序 test.pl。关键是将用户填写的数据传递给该程序,Post 方式决定用标准输入传递数据。将数据插入到 MySQL 数据库里具体的表中要用到 DBI。DBI 定义了三种与数据库进行交互的句柄:驱动器程序句柄 $drh, 数据库句柄 $dbh, 语句句柄 $sth。$drh 没有实际的用处。Perl 与数据库进行信息交互的程序如下:#! /usr/bin/Perl;use CGI qw/:standard/;use DBI$q=new CGI;#变量赋值$name=param(name);$pass=p
17、aram(passwd);#连接 MySQL 中的某一个数据库$dbh=DBI-connect(“dbi:MySQL:mk“,root,197911) |die“Cant connect to databse discuss : DBI-errstrn“;$sth=$dbh-prepare(select * from manager where name=? And password=?)|die “cannot:dbi-errstrn”;$sth-execute($name,$pass)|die “dbh-errstrn”;if ($sth-fetchrow_array)print $q-r
18、edirect(“/manager.shtml”);else print $q-redirect(“/index.pl”);其中 param 是一个获取参数函数,它将由标准输入得到的数据按 html 表格中输入数据对应的名字拆分,分别赋值给自定义变量($name,$pass) 。4结论采用 CGI/Perl 编程技术实现动态网页,在 Linux 环境下实现了用于房屋租赁的三层结构 WebMIS。CGI/Perl 编程简明扼要,易于实现。本系统所用的系统软件均可免费获得,这为小型企业建立基于 Web 的信息系统提供了一个非常经济和实用的方案。参考文献1 叶林,基于内联网三层结构的用电管理信息系统与电力资源优化分配,天津大学硕士论文,1998 年 12 月2 陈雅秀著, 精通 Linux 网络服务器架设实务.北京:中国铁道出版社.2001 年.3 美Shishir Gundavaran 著,宋荣,石从珍等译,CGI Proguamming on the World Wide Web 北京:电子工业出版社.1998 年.4 Alligator Descartes,Tim Bunce 著,张家万译,Programming the Perl DBI.北京:中5国电力出版社 2001 年.