Основы формирования веб-страницы

Задача
Вы хотите сформировать веб-страницу из сценария вместо того, чтобы писать ее вручную.

Решение
Напишите программу, которая при выполнении генерирует страницу. Тем самым вы обеспечите более полный контроль над тем, что отправляется клиенту, чем при создании статической страницы, хотя при этом может возникнуть необходимость более детального составления ответа. Например, может потребоваться написать заголовки, предшествующие телу страницы.

Обсуждение
HTML – это язык разметки (именно поэтому в его названии присутствуют буквы «ML» – Markup Language), состоящий из смеси обычного текста для вывода и специальных указателей разметки или конструкций, управляющих отображением текста. Вот простейшая HTML-страница, которая указывает название в заголовке страницы и тело с белым фоном, содержащее один абзац:



Web Page Title

(body bgcolor="white")

Web page body.


(/body)


Можно написать сценарий, который формирует такую же страницу, но этот способ будет по нескольким параметрам отличаться от написания статической страницы.


Во-первых, вы пишете сразу на двух языках. (Сценарий пишется на вашем языке программирования, а сам сценарий выводит HTML.)

Еще одно отличие в том, что может потребоваться формирование более объемного ответа для отправки клиенту. Когда веб-сервер отправляет клиенту статическую страницу, на самом деле сначала отправляется одна или нескольких строк заголовка, несущих дополнительную информацию о странице. Например, документ HTML может начинаться с заголовка Content-Type:, который информирует клиента о типе документа, и пустой строки, отделяющей заголовок от тела страницы:

Content-Type: text/html


Web Page Title

(body bgcolor="white")

Web page body.


(/body)


Веб-сервер автоматически формирует заголовочную информацию для статических HTML-страниц. При написании веб-сценария вам, возможно, придется самостоятельно предоставлять такую информацию. Некоторые API (такие как PHP) могут автоматически отправлять заголовок типа содержимого, но разрешают вам заменить тип по умолчанию. Например, если ваш сценарий отправляет клиенту изображение в формате JPEG вместо HTML-страницы, вы можете захотеть изменить тип содержимого сценария с text/html на image/jpeg.

Создание веб-сценариев отличается и от написания сценариев командной строки, как на входе, так и на выходе.


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

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

Любой API позволяет формировать вывод при помощи операторов печати, а некоторые также предлагают собственные средства подготовки веб-страниц, которые могут быть встроены непосредственно в API или реализованы в отдельных модулях:

• Для сценариев на Perl часто используется модуль CGI.pm, способный генерировать HTML-разметку, обрабатывать формы и т. д.

• Сценарии PHP пишутся как смесь HTML и вложенного кода на PHP. То есть вы пишете HTML непосредственно в сценарии, затем переходите в «программный режим» всякий раз, когда необходимо сформировать вывод, выполнив код.


На результирующей странице, отправляемой клиенту, код заменяется на сгенерированный им вывод.

• Для Python имеются модули cgi и urllib, помогающие решить задачи веб-программирования.• Для Java мы будем писать сценарии согласно спецификации JSP, что позволит встраивать директивы сценариев и код в веб-страницы. Аналогично работает PHP.

Доступны и другие пакеты, отличные от используемых в книге, причем некоторые из них могут влиять на то, как будет использоваться язык программирования. Например, Mason, embPerl, ePerl и AxKit позволяют интерпретировать Perl как встроенный язык, что отчасти напоминает работу с PHP. Модуль Apache mod_snake разрешает встраивать код Python в шаблоны HTML. Прежде чем вы сможете запустить какой-либо сценарий в веб-окружении, необходимо правильно настроить ваш веб-сервер. Обычно веб-сервер запускает сценарий одним из двух способов.

Во-первых, веб-сервер может использовать для исполнения сценария внешнюю программу. Например, может вызвать экземпляр интерпретатора Python для запуска сценария Python. Во-вторых, если сервер обладает способностью обработки соответствующего языка, он может запустить сценарий самостоятельно. Использование внешней программы для исполнения сценариев не требует никаких специальных возможностей веб-сервера, но этот способ медленнее, так как необходимо запустить отдельный процесс, кроме того, некоторая дополнительная нагрузка возникает за счет передачи информации запросов в сценарий и считывания оттуда результатов. Если интерпретатор встраивается в веб-сервер, он может выполнять сценарии напрямую, в результате чего производительность значительно повышается.

Как и большая часть веб-серверов, Apache умеет запускать внешние сценарии. Кроме того, он поддерживает модули расширения, которые становятся частью самого процесса Apache (их можно встроить при компиляции или динамически подгружать во время исполнения). Эту возможность обычно используют для встраивания в сервер языкового процессора, что ускоряет исполнение сценария. Сценарии Perl, PHP и Python могут выполняться любым из способов. Аналогично сценариям оболочки, веб-сценарии, исполняемые как внешние программы, записываются как исполняемые файлы, начинающиеся со строки #! с указанием пути к исполняемому файлу соответствующего языкового интерпретатора. Apache использует этот путь, чтобы определить, какой интерпретатор запускает сценарий. Вы также можете расширить возможности Apache, используя такие модули, как mod_perl для Perl, mod_php для PHP и mod_python или mod_snake для Python. Тогда Apache получит возможность непосредственно выполнять сценарии, написанные на этих языках.

Что касается JSP-сценариев Java, они компилируются в сервлеты Java и запускаются внутри процесса, называемого контейнером сервлета. Наблюдается некоторое сходство с встраиванием языкового процессора: сценарии исполняются управляющим ими серверным процессом вместо запуска внешнего процесса для каждого сценария. При первом запросе JSP-страницы клиентом контейнер компилирует ее в сервлет в виде исполнимого байт-кода Java, затем загружает и исполняет. Контейнер кэширует байт-код, такчто при последующих обращениях сценарий запускается сразу же, без компиляции. Если вы изменяете сценарий, контейнер замечает это при получении следующего запроса, тогда сценарий перекомпилируется в новый сервлет и перезагружается. JSP-подход имеет значительное преимущество над созданием сервлетов напрямую, поскольку вам не приходится самим компилировать код и заниматься загрузкой и выгрузкой сервлетов. Tomcat может выполнять функции как контейнера сервлетов и как веб-сервера, взаимодействующего с контейнером.

Если на одном хосте работает несколько серверов, они должны прослушивать разные порты. В стандартной конфигурации Apache прослушивает порт HTTP по умолчанию (80), а Tomcat – 8080. Примеры главы будут использовать такие имена хостов, как apache.snake.net и tomcat.snake.net для представления URL в сценариях, обрабатываемых Apache и Tomcat. В зависимости от ваших настроек DNS они могут быть или не быть сопоставлены одной и той же физической машине, поэтому в примерах для Tomcat будет использоваться порт с отличным номером – 8080. Обычно в книге будут встречаться URL в такой форме:

http://apache.snake.net/cgi-bin/my_perl_script.pl
http://apache.snake.net/cgi-bin/my_python_script.py
http://apache.snake.net/mcb/my_php_script.php
http://tomcat.snake.net:8080/mcb/my_jsp_script.jsp

Вам нужно будет заменить имя хоста и номер порта на соответствующие значения для ваших собственных серверов.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
Запуск веб-сценариев на сервере Apache
Запуск веб-сценариев на сервере Tomcat
Кодирование специальных символов для Web

Вернуться в раздел: MySQL / 16. Знакомство с MySQL для Web