Geschrieben von Jesse Vincent
Ein einfacher, stand-alone Perl-Webserver
use warnings; use strict;
use HTTP::Server::Simple;
my $server = HTTP::Server::Simple->new(); $server->run();
Normalerweise verwendet man aber nicht HTTP::Server::Simple direkt, sondern HTTP::Server::Simple::CGI.
package Your::Web::Server; use base qw(HTTP::Server::Simple::CGI);
sub handle_request {
my ($self, $cgi) = @_;
#... Webseite erzeugen ...
# ... und ausgeben
print "200 OK\r\n"
print "Content-Type: text/plain\r\n";
print "\r\n";
print "Hello World";
}
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":
ls
bzw.
dir
#!/usr/bin/perl -wT package HTTP::Server::Simple::ls; use strict; use base 'HTTP::Server::Simple::CGI';
# Auswahl "dir" oder "ls" my $ls = $^O eq 'MSWin32' ? "dir" : "ls";
# nur "gute" Zeichen zulassen my $shell_safe = qr![-0-9a-z/\\:.*? ]!i;
sub handle_request {
my ($self,$cgi) = @_;
my $args = $cgi->param('args');
if ($args !~ m!^($shell_safe+)$!) {
my @unsafe = $args =~ m<((?!$shell_safe).)>g;
warn "Command line contains unsafe characters: @unsafe";
undef $args;
} else {
$args = $1
};
# Eingabezeile
print <<HTML;
<html><body>
<tt>$ls <form action="?"><input name='args' type='text' value='$args'></form></tt>
HTML
# Ergebnis
if (defined $args) {
print "<hr /><tt>$ls $args</tt>";
print "<hr /><pre>";
print `$ls $args`;
print "</pre>"
};
print "</body></html>";
}
# Hauptprogramm package main; HTTP::Server::Simple::ls->new->run();
Hilfreiche andere Module: z.B. Template Toolkit (Template) HTML::Template Petal
Fragen?