Вопросы и Упражнения
Вопросы для самоконтроля
1. Что обозначает аббревиатура CGI?
2. Что такое Web-сервер?
3. Что такое клиент Web-сервера?
4. Для чего нужна HTML-форма?
5. Какую первую строку должна выводить CGI-программа?
6. Какие методы передачи данных формы Web-серверу вы знаете? В чем их особенности?
7. Перечислите элементы управления, которые может содержать форма.
8. Как кодируется информация,
передаваемая CGI-программе?
9. В чем заключается специфика CGI-сценариев?
10. Каким образом CGI-программа имеет доступ к переменным среды CGI?
11. Какая информация содержится в переменной среды QUERY_STRING?
12. Для чего предназначен модуль CGI.pm?
Упражнения
1. Запишите текст примера 15.8 в обозначениях, использующих объектно-ориентированный интерфейс с модулем CGI.
2. Используя модуль CGI, дополните пример 15.8 кодом, осуществляющим проверку введенных данных, как это сделано в примере 15.76.
3. Ниже приведены тексты трех примеров, входящих в отдельный дистрибутив модуля CGI.pm. Разберите, что делают эти сценарии.
a) clickable_image.cgi
#!/usr/bin/perl
use CGI;
$query = new CGI;
print $query->header;
print $query->start__html("A Clickable Image");
print «END;
<H1>A Clickable Image</H1>
</A> /
END |
print "Sorry, this isn't very exciting!\n";
print $query->startform;
print $query->image_button('picture',"./wilogo.gif"); print "Give me a: ", $query->popup_rnenu ('letter',
['A', 'B', 'C', 'D', 'E', 'W]),"\n"; print "<P>Magnification: ", $query->radio_group('magnification',
['IX' ,'2X',MX','20X']),"\n"; print "<HR>\n"; if ($query->param) {
print "<P>Magnification, <EM>",$query->param('magnification'),
"</EM>\n";
print "<P>Selected Letter, <EM>",$query->param( 'letter'),"</EM>\n"; ($x,$y) = ($query->param('picture.x'),$query->param('picture.y')) ; print "<P>Selected Position <EM>($x,$y)</EM>\n";
}
print $query->end_html;
6) quadraphobia.cgi #!/usr/bin/perl use CGI qw/:standard/; print header,
start_html('QuadraPhobia'),
hi('QuadraPhobia'),
start_form(),
image_button(-name=>'square',
-src=>'red_square.gif,
-width=>200,
-height=>200,
-align=>MIDDLE),
end_form(); if (paramO) {
($x,$y) = (param('square.x'),param('square.у'));
$pos = 'top-left' if $x < 100 && $y < 100;
$pos = 'top-right' if $x >= 100 && $y < 100;
$pos = 'bottom-left' if $x < 100 && $y >= 100;
$pos = 'bottom-right' if $x >= 100 && $y >= 100;
print b("You clicked on the $pos part of the square."); }
print p,a({href=>'../source.html'},"Code examples"); print end_html ();
в) popup.cgi
#!/usr/local/bin/perl
use CGI;
$query = new CGI;
print $query->header;
print $query->start_html('Popup Window');
if (!$query->param) {
print "<Hl>Ask your Question</Hl>\n";
print $query->startform(-target=>'_new');
print "What's your name? ",$query->textfield('name'); .
print "<P>What's the corobination?<P>",
$query->checkbox_group(-name=>'words',
-values=>['eenie','meenie','minie','moe'],
-defaults=>['eenie','moe']);
print "<P>What's your favorite color? ", $query->popup_menu(-name=>'color',
-values=>['red','green','blue','chartreuse']), "<P>";
print $query->submit; print $query->endform;
} else {
print "<H1>And the Answer is...</H1>\n";
print "Your name is <EM>",$query->param(name),"</EM>\n";
print "<P>The keywords are: <EM>",
join(", ",$query->param(words)),"</EM>\n"; print "<P>Your favorite color is <EM>",
$query->param{color),"</EM>\n";
}
print qq{<P><A HREF="cgi_docs.html">Go to the documentation</A>};