Поиск

Включения на стороне Web-сервера

Часто при разработке Web-страницы оказывается, что большая часть ее содержимого абсолютно статична. Изредка меняются некоторые части Web-страницы, но в целом она остается такой же. Рассмотрим Web-страницу, на которой отображается курс акций некоторой компании. Подавляющая часть страницы будет, по всей вероятности, статичной — средства перемещения, изображения, эмблемы, информация об использовании, верхние и нижние колонтитулы, заголовки и пр. Самая важная часть этой страницы — курс акций — генерируется путем считывания нужной информации из базы данных и заполнения соответствующих полей.

Чтобы облегчить создание подобных страниц, большинством Web-серверов поддерживается средство, называемое включениями на стороне сервера (server-side includes — SSI), которое также называется средством синтаксического анализа сервера (server-parsed HTML). Это средство позволяет создателю Web-узла на базе языка HTML строить Web-страницу, которая по большей части статична, но при этом с помощью Web-сервера изменять отдельные ее части (рис. 20.2). Такую Web-страницу можно представить в виде бланка, который нужно заполнить, а заполнение этого "бланка" выполняется CGI-программой.

Администратор вашего Web-сервера должен активизировать работу SSI. Чтобы сервер должным образом "понимал" HTML-код с встроенными SSI-элементами, вам, возможно, придется присваивать таким HTML-страницам специальные расширения .shtral или . stm. Обратитесь к документации по Web-серверу или к администратору узла, чтобы выяснить, как используется средство SSI на данном конкретном сервере, поскольку директивы и синтаксис могут различаться от сервера к серверу.

Web-сервер во время чтения статической HTML-страницы с диска отыскивает дескрипторы, которые заставляют его выполнять подстановку значений. Например, дескриптор <!-—#echo var="LAST_MODIFIED"-—> заставит Web-сервер Apache подставить вместо него дату последней модификации текущей HTML-страницы. Броузер не "видит", как происходит этот процесс. Он видит только дату, уже подставленную сервером. Проиллюстрируем процесс подстановки на следующем примере.

Средства SSI у разных Web-серверов реализованы по-своему. Поэтому дескрипторы подстановки часто имеют различный синтаксис, а отдельные их виды поддерживаются далеко не всеми серверами. А некоторые Web-серверы вообще не поддерживают средств SSI, например Personal Web Server компании Microsoft. Дескрипторы SSI, используемые на этом занятии, совместимы с такими самыми популярными Web-серверами (на момент написания этой книги), как Apache и Internet Information Server компании Microsoft.

Цель этого занятия состоит отнюдь не в том, чтобы вы узнали все о средствах SSI, поскольку их слишком много и к тому же они зависят от типа Web-сервера. Тем не менее вам следует познакомиться с дескриптором SSI #exec, который в HTML-файле имеет следующий вид:

Встретив дескриптор #exec, Web-сервер запустит CGI-программу stockprice.cgi. Результат работы этой CGI-программы помещается в HTML-поток, который направляется броузеру. После завершения CGI-программы остальная часть HTML-файла (расположенная после дескриптора #ехес) посылается броузеру как обычно.

Пример: работа с дескрипторами SSI

Для данного примера создадим простую страницу, которая выводит текст "Привет, мир!", и картинку, изменяющуюся в зависимости от времени суток. Для начала нам потребуются два рисунка: один — для ночи, другой — для дня (рис. 20.3),

Затем нам потребуется HTML-файл с приветственным сообщением (см. ниже). Если вы создаете этот пример для себя, не забудьте о том, что ему, скорее всего, придется назначить расширение .shtml или .stm, чтобы Web-сервер смог распознать дескрипторы SSI.

Текст программы sunmoon.cgi приведен в листинге 20.2.

Проведем анализ программы.

  • Строка 3. Поскольку это CGI-программа, необходимо подключить модуль CGI. Директива qw(:аll)гарантирует возможность использования любых функций модуля.
  • Строка 6. Функция localtime в контексте списка возвращает список элементов, описывающих текущее время (подробнее об этом мы говорили на 4-м занятии, "Укладка строительных блоков: списки и массивы"). При заключении в круглые скобки функция localtime рассматривается в контексте списка, а элемент [2] означает, что будет возвращен третий элемент списка (счет ведется с нуля) и присвоен переменной $hour. Этот элемент списка представляет собой время в 24-часовом формате.
  • Строка 15. Заголовок, оговоренный протоколом HTTP, по-прежнему должен выводиться с помощью функции header модуля CGI, несмотря на то, что, казалось бы, половина Web-страницы уже готова.
  • Строка 16. В дескрипторе <IMG>, предназначенном для вывода изображения, указывается либо значение $day, либо значение $nignt, а дескриптор ALT используется на случай, если броузер не сможет вывести это изображение.

Текст Web-страницы, отображенной броузером в 8 часов утра, будет иметь следующий вид: