【发布时间】:2016-10-31 18:49:25
【问题描述】:
如下面的代码所示,我使用 apache 为我的 Perl Web 服务器提供服务。我需要 Perl 为我的客户提供多条路由,如 my %dispatch 所示。如果我想出一个,我相信其余的会非常相似。如果我们查看我的子例程 sub resp_index,如何修改它以链接到位于我的根目录中的 index.html 文件:/var/www/perl 目录?
/var/www/perl/perlServer.pl:
#!/usr/bin/perl
{
package MyWebServer;
use HTTP::Server::Simple::CGI;
use base qw(HTTP::Server::Simple::CGI);
my %dispatch = (
'/index.html' => \&resp_index,
# ...
);
sub handle_request {
my $self = shift;
my $cgi = shift;
my $path = $cgi->path_info();
my $handler = $dispatch{$path};
if (ref($handler) eq "CODE") {
print "HTTP/1.0 200 OK\r\n";
$handler->($cgi);
} else {
print "HTTP/1.0 404 Not found\r\n";
print $cgi->header,
$cgi->start_html('Not found'),
$cgi->h1('Not found'),
$cgi->end_html;
}
}
sub resp_index {
my $cgi = shift; # CGI.pm object
return if !ref $cgi;
my $who = $cgi->param('name');
print $cgi->header,
$cgi->start_html("index"),
$cgi-h1("THIS IS INDEX"),
$cgi->end_html;
}
}
my $pid = MyWebServer->new()->background();
print "Use 'kill $pid' to stop server.\n";
【问题讨论】:
-
除非这是一个练习,而不是编写自己的 Web 服务器,不如考虑使用像 Dancer 这样的小型路由框架。另外,所有
\是怎么回事?最后,我不确定你在问什么。您好像在问如何读取文件? -
提示:
print "HTTP/1.0 200 OK\r\n"; print $cgi->header;应该是print $cgi->header('text/html', '200 OK');,或者更好的是print $cgi->header; -
提示:
print "HTTP/1.0 404 Not found\r\n"; print $cgi->header;应该是print $cgi->header('text/html', '404 Not found'); -
提示:每个
return if !ref $cgi;都应该删除;它们没用。 -
提示:
my $who = $cgi->param('name');应该被移除;该变量从未使用过。
标签: apache perl url-routing