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?