very brief intro to catalyst
TRANSCRIPT
What's a Web Framework?
a software framework for developming dynamic websites
E.g. Ruby on Rails (Ruby) Django (Python)
Catalyst (Perl)
How Does It Fit?
Perl application using Catalyst
Databasee.g. MySql
Web Browser
Select * FROM.. HTTP Requests
What Is Its Structure?
Each app has a directory structure that separates model, view, and controller modules.
/lib/AppName/Model/
/lib/AppName/View/
/lib/AppName/Controller/Root.pm
/root/static/
/script/hello_server.pl
Makefile.PL
Model-View-Controller
Model: Stores and retrieves data (e.g. in a database).
Controller Receives/processes HTTP requests,
reading/manipulating data from the Model and forwarding it to the View for presentation to the user.
View Formats data for presentation to the user (usually
by generating HTML, but could also generate PDF, PNG, etc).
●Install Catalyst (Ubuntu)
sudo aptitude install libcatalystperl libcatalystmodulesperl libconfiggeneralperl
Create an Application
The ”catalyst.pl” script is used to create the initial application structure:
$ catalyst.pl Hello
$ cd Hello
Start the Application
$ script/hello_server.pl
View the Application
Navigate to:
http://localhost:3000
How it Works
When you access http://localhost:3000/, Catalyst calls index() in /lib/Hello/Controller/Root.pm:
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
# Hello World
$c>response>body( $c>welcome_message );
}
Extending the App
Add http://localhost:3000/hello Just add a new subroutine called ”hello” to
Root.pm:
sub hello :Local {
my ( $self, $c ) = @_;
$c>response>body( ”Hello!!!!” );
}
What We've Got
If in a web browser, you query http://localhost:3000/foo,
in lib/Hello/Controller/Root.pm, a subroutine called ”foo()” is executed, and
foo() generates HTML that is sent back to the web browser.
What Else Can Catalyst Do?
Access a database (e.g. MySql) Object-Relation Mapping
Retrieve user-entered data from HTML forms Generate nice HTML using templates
E.g. Using Template::Toolkit
Integrate with the Apache web server FastCGI protocol
Thank You!
Zachary D. Blair
http://www.sfu.ca/~zblair