No Slide Title

Download Report

Transcript No Slide Title

Fundamentals of
Web Programming
Lecture 9:
Server-Side Scripting I
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
1
Today’s Topics
• Review server scripting
• CGI support for Perl 5: CGI.pm
• Input/output: file handles
• Example: dynamic file listing
• URL support for Perl 5: LWP.pm
• Example: fetch a stock quote
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
2
Server Scripting
• Parse Environment Information
• Prepare Response Content
• Print Return Header
Content-type: <MIME type>, e.g.
Content-type: text/html
• Print Return Content
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
3
CGI Support in Perl 5
• Perl Module: CGI.pm
use CGI;
• Subroutine to fetch environment
&CGI::ReadParse();
• Environment variables and form
element values stored in hash
$lastname = $in{‘last_name’};
• Support for interactive debugging
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
4
Quick Example
#!/usr/bin/perl
use CGI;
&CGI::ReadParse();
$name = $in{‘name’};
print <<EndText
Content-type: text/plain
Name: $name
EndText
;
exit 0;
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
5
Input/Output: File Handles
• Including data in your scripts is
okay if:
– there’s not a lot of it
– it doesn’t change very often
• For larger data stores, it’s better to
use separate data files
– can grow over time
– can be provided by or processed by
other programs
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
6
Input/Output: File Handles
• In Perl, file input and output are
accomplished via filehandles
• Correspond to input / output
streams in other languages
• Basic sequence:
– open a file handle for input or output
– read/write from/to the file handle
– close the file handle
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
7
Input/Output: File Handles
• Input:
open(IN,”<guestbook.txt”);
# read lines from IN
close(IN);
• Output:
open(OUT,”>guestbook.txt”);
# write lines to OUT
close(OUT);
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
8
Input/Output: File Handles
• Append:
open(OUT,”>>guestbook.txt”);
# append lines to OUT
close(OUT);
• Pipe from Command:
open(LS,”ls |”);
# read lines from LS command
close(LS);
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
9
Input/Output: File Handles
• Pipe to Command:
open(SORT,”| sort > gbsort.txt”);
# sort lines and save in gbsort
close(SORT);
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
10
Reading Lines In
• Once open, the file handle is
accessed using <> notation and
the assignment operator =
• How much is read depends on the
type of the LHS expression
• Array context: @lines = <IN>;
• Scalar context: $line = <IN>;
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
11
Input Examples
• Array context
open(IN,”<gbook.txt”);
@guests = <IN>;
close(IN);
foreach $guest (@guests) {
print $guest;
}
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
12
Input Examples
• Scalar context
open(IN,”<gbook.txt”)
while ($guest = <IN>) {
print $guest;
}
close(IN);
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
13
Printing Output
• Once open, the file handle is
accessed using <> notation and
the print or printf command
• E.g., print OUT “$name\n”;
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
14
Output Examples
open(OUT,”>gbook.txt”);
print OUT “Start new file.\n”;
close(OUT);
open(OUT,”>>gbook.txt”);
print OUT “Add to old file.\n”;
close(OUT);
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
15
Using Pipes
• The file handle is opened by calling
another program and piping the
results as though they were an
input file
• E.g., open(LS,”ls |”);
• Example script: listall.cgi
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
16
Accessing the Web
• Fetching URLs: LWP.pm
use LWP::Simple;
$url = “http://www.cnn.com”;
$result = get($url);
• Example: quote.cgi
20-753: Fundamentals of
Web Programming
Lecture 9: Server-Side Scripting I
17