使用perl进行web开发,传统的做法是写*.cgi文件,然后把这些cgi文件配到web server里面,当web server收到客户端的request时,就调用对应的cgi进行处理. 用这种方法进行web开发, cgi文件之间相对比较独立,代码里面可能含有大量的重复代码,整个系统的结构也是比较松散的, 可扩展性也不强.
Catalyst是一套用来web开发的框架,基于Catalyst开发的web系统,具有比较强的可扩展性.
第一节 搭建Catalyst开发环境
1 一般方法:
在linux系统上安装Catalyst只需要使用CPAN安装即可(推荐)
cpan -i Catalyst
cpan -i Catalyst::Devel(用来运行Catalyst项目的机器不需要安装该模块,如果需要使用Catalyst进行开发则需要安装该模块)
在windows上安装可以使用ppm,但是过程比较繁琐,不建议.
2 安装脚本
Matt Trout写了一个安装脚本: http://www.shadowcatsystems.co.uk/static/cat-install
只需要从该链接下载脚本,然后 perl cat-install即可按顺序安装相关模块,可用于windows跟linux,如果用于windows的话,必须保证你的机器上有c编译器和make工具.
3 模块打包方法(推荐)
Chris Laco把Catalyst相关的模块打成了一个包:http://handelframework.com/downloads/CatInABox.tar.gz
把该包下载下来不需要安装即可马上使用.可用于windows跟linux系统.
第二节 创建第一个Catalyst项目
给我们第一个项目起名为X, 那么如下使用Catalyst创建我们的项目:
如果这条命令出错了,那么可能是你的Catalyst没有安装好,请参考第一节把Catalyst装好.
键入命令后, catalyst.pl会帮你创建如下文件:
created "X"
created "X\script"
created "X\lib"
created "X\root"
created "X\root\static"
created "X\root\static\images"
created "X\t"
created "X\lib\X"
created "X\lib\X\Model"
created "X\lib\X\View"
created "X\lib\X\Controller"
created "X\x.yml"
created "X\lib\X.pm"
created "X\lib\X\Controller\Root.pm"
created "X/README"
created "X/Changes"
created "X\t/01app.t"
created "X\t/02pod.t"
created "X\t/03podcoverage.t"
created "X\root\static\images\catalyst_logo.png"
created "X\root\static\images\btn_120x50_built.png"
created "X\root\static\images\btn_120x50_built_shadow.png"
created "X\root\static\images\btn_120x50_powered.png"
created "X\root\static\images\btn_120x50_powered_shadow.png"
created "X\root\static\images\btn_88x31_built.png"
created "X\root\static\images\btn_88x31_built_shadow.png"
created "X\root\static\images\btn_88x31_powered.png"
created "X\root\static\images\btn_88x31_powered_shadow.png"
created "X\root\favicon.ico"
created "X/Makefile.PL"
created "X\script/x_cgi.pl"
created "X\script/x_fastcgi.pl"
created "X\script/x_server.pl"
created "X\script/x_test.pl"
created "X\script/x_create.pl"
|
我们来看一下这些目录结构以及这些文件的含义:
X/ 项目文件夹
X/x.yml 项目的配置文件,Catalyst的插件ConfigLoader会使用该文件
X/t test文件夹,放置项目的各种测试脚本
X/script 辅助脚本文件夹,放置catalyst为项目准备的辅助脚本,开发时才会用到
X/root root文件夹,一般放置项目的静态文件,模板文件等
X/lib lib文件夹,放置项目的各种模块
X/lib/X.pm 以项目名字命名的应用程序类,在整个项目中起驱动作用
X/lib/View 文件夹,放置各种View模块
X/lib/Model 文件夹,放置各种Model模块
X/lib/Controller 文件夹,放置各种Controller模块
|
在这里,比较重要的文件夹是root 跟 lib 。
root文件夹,一般放置项目的静态文件,模板文件等
lib文件夹一进去会看到一个X.pm,它以项目名字命名的应用程序模块,它在整个项目中起驱动作用, 你会在第二章看到它的详细说明。
lib文件夹再深一层你会看到3个文件夹, Controller, Model, View, 这就是Catalyst的MVC结构。整个WEB项目的绝大多数代码都集中在3个文件夹里面.
位于View文件夹里面的View模块主要负责数据的渲染和加工,一般就是根据Controller传过来的数据生成HTML代码, 我们常用的一种View模块是Catalyst::View::TT,它的内部会使用模块TemplateToolkit(简称TT),如果你们使用过HTML::Template这样的模块就会大概理解TT在程序里面的作用.
位于Model文件夹里面的Model模块主要负责对数据源的访问, 一般就是负责数据库的读取.我们常用的Model模块是Catalyst::Model::DBIx::Class::Schema,它的内部会使用模块DBIx::Class::Schema(一般叫做DBIC).
位于Controller文件夹里面的模块称之为Controller, Controller里面有一些具有特殊属性的函数(称之为action),在Catalyst里面,一个客户端的请求一般最后会被Catalyst分派给某个Controller的某个action进行处理.所以Controller主要负责的就是处理用户的请求,控制程序的逻辑.
Controller, Model, View都属于Catalyst组件,Controller是必不可少的,而其他2种组件是可有可无的, 因为对一个客户端请求的处理不一定要访问DB,也不一定要渲染数据,当然,一般的Catalyst应用程序都具有MVC 3种组件.
在Catalyst里面除了有不同的View组件跟Model组件可供选择外, Catalyst还具有大量的插件可供使用, 可用的Catalyst插件列表参看:
http://search.cpan.org/~jrockway/Catalyst-Manual-5.700501/lib/Catalyst/Manual/Plugins.pod