Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 модуль.docx
Скачиваний:
15
Добавлен:
02.11.2018
Размер:
92.62 Кб
Скачать

12.2. Стандарт cgi

Apache поддерживает стандарт CGI (Common Gateway Interface, дословно переводится как «общий интерфейс шлюза»). Стандарт CGI задает правила взаимодействия веб-сервера (например, Apache) и внешней программы на веб-сервере, предназначенной для обработки HTTP-запросов клиентов. Взаимодействие сервера и программы осуществляется через стандартные потоки ввода-вывода и переменные окружения. Таким образом, стандарт CGI позволяет создавать динамические веб-страницы практически на любом языке программирования.

Программы, которые взаимодействуют с веб-сервером по правилам стандарта CGI, называют CGI-программами, CGI-скриптами или просто скриптами.

CGI-программа — это обычный исполняемый файл операционной системы: в Windows это может быть exe-файл, а в Unix — это может быть не только двоичный исполняемый файл, но и программа, написанная на некотором интерпретируемом языке (например, Perl или Python).

Операционные системы семейства Unix позволяют создавать исполняемые файлы практически на любых скриптовых языках. Для этого файлу с исходным кодом программы устанавливается соответствующий атрибут, а в первую строку добавляется путь к интерпретатору языка в следующем формате:

#!/usr/bin/perl

…далее идет исходный код на языке perl…

Когда поступает HTTP-запрос и веб-сервер, в соответствии со своей конфигурацией, решает, что нужно выполнить CGI-приложение, то он:

  1. Инициализирует различные переменные окружения, в которые помещает информацию о запросе (IP-адрес пользователя, строку запроса, запрошенный URI и т. д.).

  2. Определяет путь к CGI-программе и запускает её на выполнение. На стандартный поток ввода CGI-программы передается тело HTTP-запроса (если оно присутствует).

  3. CGI-программа анализирует запрос (используя переменные окружения и стандартный поток ввода), выполняет нужную обработку запроса и отправляет HTML-документ на стандартный поток вывода.

  4. Веб-сервер добавляет к сгенерированному ответу необходимые HTTP-заголовки и передает данные пользователю.

Apache по умолчанию сконфигурирован так, что выполнение CGI-скриптов разрешено только из каталога cgi-bin. Чтобы разрешить запуск из другого каталога, в httpd.conf должны быть директивы вида:

<Directory c:/hosts/htdocs>

Options +ExecCGI

AddHandler cgi-script cgi pl

</Directory>

Теперь в указанном каталоге все файлы с расширениями cgi и pl (обычное расширение для программ на Perl) будут исполняться веб-сервером как CGI-программы.

В Windows файлы с расширением cgi и pl не могут быть обычными исполняемыми программами. Однако версия Apache для Windows поддерживает не только исполняемые файлы Windows, но и программы на других языках, если в первой их строчке указан путь к интерпретатору, например, «#!c:/perl/bin/perl.exe» (т. е. так же, как это поддерживается в Unix).

Пример простейшей CGI-программы на Perl, которая выводит строку запроса (если она была указана) и IP-адрес клиента:

#!/usr/local/bin/perl

# вывод заголовков и пустой строки

print "Content-type: text/html; charset=koi8-r\r\n\r\n";

print "<html>";

print "<head><title>Пример CGI-программы</title></head>";

print "<body><h1>Пример CGI-программы</h1>";

print "QUERY_STRING: $ENV{QUERY_STRING}<br />";

print "REMOTE_ADDR: $ENV{REMOTE_ADDR}<br / >";

print "</body></html>";

Первая строка — это признак исполняемого файла (в Unix) или инструкция для Apache (в случае Windows). Далее программа выводит HTTP-заголовок «Content-Type» (остальные заголовки опциональны). Некоторые другие заголовки и первую строку HTTP-ответа добавит сам веб-сервер (Apache).

Остальные строки этой программы просто печатают HTML-код на стандартный поток вывода. Ассоциативный массив ENV в Perl содержит все переменные окружения, включая те, которые были установлены веб-сервером перед запуском CGI-программы.

Если эту программу запустить обычным образом на выполнение командой «/hosts/htdocs/test.pl» в Unix или с помощью интерпретатора Perl в Windows «perl c:\hosts\htdocs\test.pl», то просто выведется заголовок Content-Type и HTML-код. Значения QUERY_STRING и REMOTE_ADDRESS будут пустыми, т. к. эти переменные окружения инициализируются лишь веб-сервером.

Если же эту программу разместить на работающем веб-сервере и в веб-браузере набрать соответствующий адрес http://hostname/test.pl?name=hello, то выведется веб-страница следующего вида (при условии, что будет найден интерпретатор Perl):

Пример CGI-программы

QUERY_STRING: name=hello REMOTE_ADDR: 80.250.188.11

Если параметры запроса передать HTTP-методом POST, то поле QUERY_STRING останется пустым, т. к. параметры запроса будут переданы на стандартный поток ввода программы, а не через переменную окружения.

С помощью средства языка, на котором реализуется CGI-программа, можно создавать динамические сайты практически любой сложности.

Обычно стандарт CGI используется для написания веб-страниц на языке Perl. Реже на других языках — C++, Phyton, Ruby, PHP.

Поддержка популярного языка PHP в Apache обычно реализуется с помощью модуля, а не как CGI. Специализированный модуль работает быстрее, чем CGI, т. к. веб-серверу не приходится запускать интерпретатор PHP для каждой обработки запроса.

Еще пример CGI-скрипта на Perl:

#!/usr/local/bin/perl

# подключение модуля CGI и импорт функции param

use CGI qw/param/;

print "Content-Type: text/html; charset=windows-1251\r\n\r\n";

$name = param("name");

# если пользователь еще не указал имя...

if ($name eq "") {

# показываем форму для ввода имени

print "<form method='post' action='hello.cgi'>Как Вас зовут? ";

print "<input name='name'>";

print "<input type='submit' value='Отправить'>";

print "</form>";

} else {

print "<p>Здравствуйте, $name!</p>";

}

Этот CGI-скрипт выводит форму с предложением ввести имя. После ввода имени и нажатии на кнопку, повторно сработавший CGI-скрипт выведет приветствие.

Кроме стандартной версии сервера Apache, которая доступна на сервере httpd.apache.org, существует ряд пакетов для веб-разработчиков, включающих Apache. Примеры таких пакетов — Denwer (только для Windows) и XAMPP. Эти пакеты включают полностью сконфигурированный веб-сервер Apache с поддержкой PHP и Perl, включают СУБД MySQL и некоторые другие вспомогательные утилиты. У пакета XAMPP есть версия, которая даже не требует инсталляции. Такие пакеты могут быть удобны для веб-разработчиков, чтобы те не углублялись в тонкости администрирования веб-серверов и могли сконцентрироваться собственно на разработке веб-приложений.

12.3. Apache Tomcat

Разработка сервера Tomcat также осуществляется организацией Apache Software Foundation (сайт проекта: http://tomcat.apache.org/). Сервер является бесплатным и имеет открытый код.

Сервер реализован на языке Java и поддерживает технологии Java Servlet и JavaServer Pages (JSP), которые являются важной частью спецификации J2EE (разработка Sun) и фактически являются стандартами для веб-приложений на Java.

Tomcat доступен на сайте разработчика в виде инсталлятора для Windows (устанавливается как сервис) и в виде обычного архива, для которого инсталляция не требуется. Эта версия может быть запущена на любой операционной системе (запускается как консольное приложение).

Запуск сервера прост:

  1. Сначала нужно разархивировать архив с Tomcat.

  2. Затем указать в переменной окружения JAVA_HOME путь к JDK.

  3. И запустить программу bin\startup.bat (Windows) или bin/startup.sh (Unix).

Основной конфигурационный файл Tomcat — conf/server.xml. Tomcat по умолчанию использует порт 8080 (порт указан в server.xml).

Веб-приложения для Tomcat (или других Java-ориентированных веб-серверов) обычно называют веб-модулями. Веб-модули в Tomcat по умолчанию размещаются в каталоге webapps. Веб-модули имеют стандартную структуру каталогов, которая описана в спецификации J2EE.

В стандартной поставке Tomcat в каталоге webapps размещен ряд веб-приложений для администрирования сервера, документация и примеры сервлетов и JSP-страниц. После запуска сервера ссылки на примеры, документацию и страницы администрирования доступны с главной страницы сервера.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]