mvc在perl中的应用

1.介绍

首先说需求,要做一个基于CGI的VPN管理程序。由于之前从来没有用过perl,在初期也遇到了很多困难。这个项目进行了4个月,只有我和一位同事来实现,我负责界面,她负责数据处理。其实里面的东西很多,如果要写的话可能不只是几页纸能写完的。这里仅仅是挑出了一个具有代表性的环节做了介绍,那就是WEB开发通用的一个流程——MVC。

关于mvc的详细介绍,请看我前面的文章。

(1)MVC数据流程

MVC中这三者之间是有机结合的。

MVC的流程是将数据处理放到M(model,模型)层,将显示数据放到V(view,视图)层,C(controller,控制器)层起到了一个路由的作用,将M中的取出的数据做一下判断,根据处理结果决定显示什么样的view。

MVC调用关系如图1:

注意在图中还有两条虚线,代表视图可以直接调用模型,只有在分页或者无限分类时,由于要用到迭代或者递归,所以要直接用视图调用模型。

图1 MVC调用关系

(2)MVC的目录布局

实际中MVC还对应着不同的文件,项目是部署在Linux上的,但是是属于公司内部代码,所以下面我将在windows上做一个DEMO,来演示程序的流程。首先我现在winXP上安装xampp这个软件,安装目录为D:/xampp,目录结构如下:

图2 相关文件目录

图中仅给出了与项目有关的目录,省略掉了xampp自带的一些目录。图中标示红色区域的是模型和控制器的存放目录,标示蓝色区域的是视图的存放区域。从图中也可以大体看出项目的文件结构,在下面给出详细介绍: 

  

2.视图传递数据给控制器

程序的起始地址是:http://192.168.1.96/cgi-bin/index.cgi,打开后界面如下:

图2 系统运行主界面


左侧区域显示的是系统菜单,右侧区域显示的是内容显示区,刚打开首页时没有设置显示内容,所以显示区域为空白。程序的使用方法很多简单,点击左侧菜单,在右侧显示相应的内容。下面就拿菜单中的“主页测试” 做演示。

点击“主页测试”后,就开始了MVC的流程,首先是视图向控制器发送请求,请求信息如下:

图3 视图向控制器发送请求

3.控制器接收视图传递的数据

从图3中可以看出,视图往控制器发送了两个参数,对应的控制器端的处理代码如下:

图4 控制器处理loadView操作

第8行中调用了getParams函数,这是在box_test.pl(在第3行已将他包含)中的函数,box_test.pl也就是这个MVC中的Model(模型)。控制器在发现当前视图的请求动作为“loadView”时,向模型box_test.pl发送请求,获取getParams返回的数据。在控制器准备好所有数据后,将数据发送给视图,这个操作发生在第9行,最后视图将接受到的数据显示出来。最终显示效果如下:

图5 控制器返回视图数据

此视图对应的html代码如下:

   
代码片段1 /templates/box_test.html内容
在这里第4行的$caption就是控制器中的第7行中赋的值,这里利用了print <<EOF,是一个heredoc技术,可以方便的制作网页模板。
在perl中还有一个更方便的地方,你可以把文件的后缀任意改名,但是通过require引用这个文件之后,只要有perl语法就能解析。这就是
图4中第9行中为什么引用了一个html文件,但是我们这个html文件中却有perl语法(print <<EOF)也能正常解析的原因。php中也使用
heredoc技术,但是一旦某个文件沾染了php的代码,你就得把它的后缀改为php。

4 模型处理数据

图4中,第九行调用了test_box.pl中的函数,这就属于模型处理部分的内容。数据处理是模型的职责。为了演示,我们这里的代码比较简单,仅仅是从文件中读取数据 :

 

代码片段2 test_box.pl

猜你喜欢

转载自blog.csdn.net/yunnysunny/article/details/6290449
今日推荐