Язык программирования Perl

         

Системы на основе HTML-шаблонов


Дальнейшим развитием CGI стали серверные технологии, в которых в шаблон HTML-документа включаются исполняемые фрагменты, написанные на встроенном языке программирования - C#, Java, PHP, Perl, Visual Basic или специальных языках шаблонов. На Perl написано немало систем для работы с шаблонами (templating system): от модулей, использующих несложную подстановку, до изощренных платформ программирования (application framework) для web-сервера. Perl в подобных системах применяется для обработки шаблонов (например, HTML::Template, Text::Template, Template Toolkit) и динамической генерации на основе шаблонов. Во многих системах (например, Apache::ASP, AxKit, Embperl, Mason, Apache::XPP) Perl применяется как встроенный язык, используемый для программирования действий в шаблонах. Все эти системы можно загрузить с сайта CPAN и установить обычным образом. (Подробнее об установке модулей речь шла в лекции 13.) Для работы с этими системами под ОС MS Windows проще всего загрузить с сайта perl.apache.org дистрибутив Perl, в состав которого входит сервер Apache с mod_perl и многие из перечисленных библиотек. Каждая из систем реализует оригинальный подход и обладает интересными возможностями, но мы остановимся подробнее на той из них, которая реализует тот же подход, что и в других распространенных системах программирования на основе шаблонов: ASP, JSP и PHP.

Система разработки web-сайтов Apache::ASP предлагает кросс-платформенные средства, аналогичные используемым в системе программирования ActiveState PerlScript для web-сервера Microsoft IIS. В этом подходе сочетаются естественное представление HTML-документа и возможность использовать богатые возможности языка программирования. В шаблоне HTML-страницы между тегами <% и %> располагаются фрагменты программы на языке Perl, которые выполняются при обработке запроса на страницу. Результат выполнения этих фрагментов включается в результирующую страницу, которая отсылается клиенту. Если переписать пример с гостевой книгой, используя классы из состава Apache::ASP, то он будет выглядеть так:


<html> <head> <!-- шапка HTML-страницы --> <meta http-equiv="content-type" content="text/html; charset=windows-1251"> <title>Гостевая книга</title> </head> <body> <!-- тело HTML-страницы --> <h3> Здесь Вы можете оставить свой отзыв</h3> <form method="POST"> <!-- начало HTML-формы --> <br/>Имя: <!-- 1-е поле формы --> <input name="nick" type="text" size="8" value="<%=$Request->Form('nick')%>"/> <br/>Э-почта: <!-- 2-е поле формы --> <input name="email" type="text" size="32" value="<%=$Request->Form('email')%>"/> <br/>Комментарий:<br/> <!-- 3-е поле формы --> <textarea name="comments" rows="5" cols="50"> <%=$Request->Form('comments')%> </textarea><br/> <input type="submit" value="Отправить"/> <!-- кнопка --> </form> <!-- конец HTML-формы --> <hr/> <% if($Request->Form('nick')) { %> <a href="mailto:<%=$Request->Form('email')%>"> <%=$Request->Form('nick')%> </a> пишет:<br/> <%=$Request->Form('comments')%><br/> <hr/> <% } %> <body> <html>

Обращение к значениям полей формы происходит с помощью метода Form предопределенного объекта $Request, хранящего информацию HTTP-запроса. Система Apache::ASP предоставляет программисту полный набор средств для динамического создания страниц, включая средства работы с клиентскими сеансами. Чтобы продемонстрировать возможности встроенного в шаблоны языка Perl, напишем шаблон ASP, реализующий web-интерфейс к базе данных. Perl в нем используется для извлечения из базы данных информации о моллюсках, производящих жемчужины, а также для формирования в цикле строк таблицы на основании результатов запроса. Фрагменты программы на Perl, встроенные в текст шаблона, выделены жирным шрифтом:



<% # начало встроенного Perl use DBI; # используем DBI my $table = "mollusc"; # подключаемся к БД my $dbh = # через драйвер DBD::SQLite DBI->connect("dbi:SQLite:dbname=$table","","") or die; my $sth = # готовим выборку строк таблицы $dbh->prepare("SELECT id,name,latin,area FROM $table") or die $dbh->errstr; $sth->execute() or die $sth->errstr(); # и выполняем запрос %> <html> <!-- начало шаблона --> <head><meta http-equiv="content-type" content="text/html; charset=windows-1251"> <title>Коллекция раковин</title></head> <body> <h3 style="color:blue;">Коллекция раковин</h3> <table border="1" cellpadding="1" cellspacing="0"> <!-- в цикле заполняем строки таблицы из БД --> <% while (my $row = $sth->fetchrow_hashref) { %> <tr> <td rowspan="2"><img src="<%=$row->{id}%>.jpg"/></td> <td><b><%=$row->{name}%></b> <br/><i><%=$row->{latin}%></i></td> </tr> <tr><td><%=$row->{area}%></td></tr> <% } %> </table> <% $dbh->disconnect; %> <!-- отсоединяемся от БД --> <body> <html> <!-- конец шаблона -->

HTML-страница, сформированная в результате выполнения программы, приведена на рис. 18.2. При необходимости несложно расширить функциональность этой программы, например, добавить поиск по любой из колонок таблицы.


Рис. 18.2.  Web-интерфейс к базе данных


Содержание раздела