Das Modul HTTP::Server::Simple ist ein einfacher, stand-alone Weserver in Perl. Es wurde 2004 von Jesse Vincent (JVINCENT auf PAUSE) entwickelt. Das Ziel von HTTP::Server::Simple ist es, einen schlichten Webserver ohne viel Konfigurationsaufwand zur Verfügung zu stellen. Einenn zugegebenermaßen sehr schlichten Webserver bekommt man zum Beispiel mit dem folgenden Code:
Geschrieben von Jesse Vincent
Ein einfacher, stand-alone Perl-Webserver
1: use warnings; 2: use strict;
1: use HTTP::Server::Simple;
1: my $server = HTTP::Server::Simple->new(); 2: $server->run();
Nicht sehr beeindruckend...
Normalerweise verwendet man aber nicht HTTP::Server::Simple direkt, sondern HTTP::Server::Simple::CGI.
1: package Your::Web::Server; 2: use base qw(HTTP::Server::Simple::CGI);
1: sub handle_request { 2: my ($self, $cgi) = @_;
1: #... Webseite erzeugen ...
1: # ... und ausgeben 2: print "200 OK\r\n" 3: print "Content-Type: text/plain\r\n"; 4: print "\r\n"; 5: print "Hello World"; 6: }
Vergleiche auch mod_perl
.
Man kann sofort einen kleinen Webserver starten, ohne zuvor Apache zu installieren und zu konfigurieren.
Tests von Modulen (Test::HTTP::Server::Simple
)
Kleine User Interfaces
Maypole, Catalyst, Kwiki, ...
Wofür sollte man HTTP::Server::Simple nicht verwenden?
Mehrere User unter Windows (einzelne Instanz)
Performancekritische Anwendungen (mod_perl)
Es gibt bereits mehrere Leute, die jeweils Module geschrieben haben, die auf HTTP::Server::Simple zurückgreifen:
Maypole::HTTPD
HTTP::Server::Simple::Kwiki
"Mal eben" ein Web-Frontend vor ein Programm setzen:
"Programm":
1: ls
bzw.
1: dir
1: #!/usr/bin/perl -wT 2: package HTTP::Server::Simple::ls; 3: use strict; 4: use base 'HTTP::Server::Simple::CGI';
1: # Auswahl "dir" oder "ls" 2: my $ls = $^O eq 'MSWin32' ? "dir" : "ls";
1: # nur "gute" Zeichen zulassen 2: my $shell_safe = qr![-0-9a-z/\\:.*? ]!i;
1: sub handle_request { 2: my ($self,$cgi) = @_; 3: my $args = $cgi->param('args');
1: if ($args !~ m!^($shell_safe+)$!) { 2: my @unsafe = $args =~ m<((?!$shell_safe).)>g; 3: warn "Command line contains unsafe characters: @unsafe"; 4: undef $args; 5: } else { 6: $args = $1 7: };
1: # Eingabezeile 2: print <<HTML; 3: <html><body> 4: <tt>$ls <form action="?"><input name='args' type='text' value='$args'></form></tt> 5: HTML
1: # Ergebnis 2: if (defined $args) { 3: print "<hr /><tt>$ls $args</tt>"; 4: print "<hr /><pre>"; 5: print `$ls $args`; 6: print "</pre>" 7: }; 8: print "</body></html>"; 9: }
1: # Hauptprogramm 2: package main; 3: HTTP::Server::Simple::ls->new->run();
... bitte warten ...
HTTP::Server::Simple::Authen
1: package MyServer; 2: use base qw( HTTP::Server::Simple::Authen HTTP::Server::Simple::CGI);
1: use Authen::Simple::Passwd; 2: sub authen_handler { 3: Authen::Simple::Passwd->new(passwd => '/etc/passwd'); 4: }
1: sub handle_request { 2: my($self, $cgi) = @_; 3: my $user = $self->authenticate or return; 4: ... 5: }
1: MyServer->new->run();
Hilfreiche andere Module:
s/\$(\w+)/$values{$1}/eg
Template Toolkit (Template)
HTML::Template
Petal
HTML::Mason
Fragen?