一切准备就绪,那么就开始干活了。
看看overview.cgi 中的下面部分
复制内容到剪贴板
代码:
$app->run;在MgrApp.pm 找到了该方法。
复制内容到剪贴板
代码:
sub run {
my $app = shift;
my $q = $app->{query};
eval {
REQUEST: #处理请求?
{
$app->pre_backend; # prepare backend #处理用户选择的数据库类型。
if($app->{requires_login}) {
LOGIN: #登录模块
{
my $user = lc $q->cgi("username");
last LOGIN if $app->already_login; #如果用户已经登录则不再要求登录。
if($user and $q->cgi('action')) {
if ($app->{sysconfig}->{SYS_CAPTCHA_ON}) {#检查用户有没有使用图片验证码
require Ext::CaptCha;
my $data = $q->get_cookie('scode');
my $raw = $q->cgi('vcode'); # verify code
my $key = $app->{sysconfig}->{SYS_CAPTCHA_KEY} || 'extmail';
my $cap = Ext::CaptCha->new(key => $key);
if (!$cap->verify(lc $raw, $data)) {
$app->{redirect} = "?__mode=show_login&error=vcode";
last LOGIN;
}
}
my($status, $ref) = $app->login; # 检查用户登录
if($status) { #看看是否成功了
# if login ok, re_calculate Quota, this is trick
# to udpate quota, only once after login. XXX
$app->init_env; # must initialize %ENV
$app->{redirect} = "?__mode=welcome&sid=$ref->{sid}";
}else {
$app->{redirect} = '?__mode=show_login&error=badlogin';
}
}
} # LOGIN block END
}
my $mode = $q->cgi("__mode") || $app->{default_mode}; #看看有没有请求指定的功能。没有则使用默认的,这个默认的方法在overview.pm 里定义了。
my $code = $app->{fcbl}{$mode} or
$app->error("No such action: $mode"), last REQUEST;
if(($code && $app->valid) || $app->permit) {
$q->send_cookie;
unless ($app->{redirect}) {
$app->pre_run; #执行overview.pm 里的功能前,需要做的事,可以什么都不做。
my $t0 = new Benchmark;
$app->global_tpl;
$code->($app); # 执行overview.pm 里add_methods 里注册的功能,主要程序驱动在这里。
my $t1 = new Benchmark;
my $t = timediff($t1,$t0);
my $f = "%3d wsecs (%5.2f usr + %5.2f sys)";
$app->{tpl}->assign(
TIME => sprintf($f,$t->[0], $t->[1],$t->[2])
);
$app->post_run; #执行那些功能后要做的事。
}
}
if(my $url = $app->{redirect}) {
$app->redirect($url);
}
} # END of REQUEST
};
if ($@) {#因为在eval 里执行,如果有错误会存放在$@ 里。
$app->error($@);
}
if($app->{sysconfig}->{SYS_SHOW_WARN}) { #如果打开了警告。
$app->trace($app->{sysconfig}->{SYS_SHOW_WARN});
$app->warn($app->{_trace});
}
}最后在overview.pm 的post_run 找到了html 的输出。
复制内容到剪贴板
代码:
sub post_run {
my $template = $_[0]->{query}->cgi('screen') || 'overview.html';
$_[0]->{tpl}->process($template);
$_[0]->{tpl}->print;
}