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

Объектная модель документа

Объектная модель документа (Document Object Model — DOM) связывает в единое целое HTML, язык сценариев и каскадные таблицы стилей, предоставляя разработчикам Web-документов инструмент с совершенно новыми качествами - динамический HTML. DOM является интерфейсом прикладного программирования (API) для документов HTML. Она определяет логическую структуру документа и способ доступа и манипулирования составляющими документ элементами. Все, что определено в документе тэгами языка разметки страниц, становится доступным для изменения, удаления и добавления. Программист может создавать документы, свободно перемещаться по их структуре и добавлять, изменять или удалять элементы и/или их содержимое.

НЕ нашли? Не то? Что вы ищете?

Internet Explorer 5.0 полностью реализует объектную модель документа, совместимую с объектной моделью DHTML.

Структура документа

В объектной модели документа любой документ представляется в виде логической древовидной структуры.

Например, следующий фрагмент документа HTML:

<body>

<p id="p1"> В блоковый элемент, каким является абзац, можно добавлять

<b id="b1"> Встраиваемые элементы</b> и даже другие блоковые элементы

<img id="imgl" src="my. gif"/ alt="my picture"/>

</p>

<img id="img2" src="my1.gif" alt="my picture1"/>

</body>

будет представлен в виде логической структуры, приведенной на рис. 3.1.

Логическая структура фрагмента документа


Рис. 3.1.  Логическая структура фрагмента документа

Функции объектной модели документа

Объектная модель документов определяет:

интерфейсы и объекты, используемые для представления документа и манипулирования с ним; семантику (смысл) этих интерфейсов и объектов, включая и поведение, и параметры; "родственные" связи и взаимодействие между этими интерфейсами и объектами.

Основное назначение реализации объектной модели документов — предоставить возможность доступа и манипулирования элементами документа из программы с помощью объектов, выстроенных в некоторую иерархическую структуру, а также обеспечить взаимодействие между объектами. Поэтому любая реализация модели включает в свою очередь и управление событиями, представленными также в виде объектов.

Объектная модель DHTML предоставляет разработчикам Web-документов прямой программируемый доступ ко всем элементам документа, а совместно с событийной моделью подобный подход позволяет браузеру обрабатывать ввод пользователя, выполнять встроенные сценарии и динамически менять содержимое документа, не перезагружая его.

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

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

Cookie

Проблема HTTP-соединения

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

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

Используя cookie, можно эмулировать сессию по HTTP протоколу. Принцип эмуляции сессии следующий: на первом запросе выдается соотвествующее значение cookie, а при каждом последующем запросе это значение читается из переменной окружения HTTP_COOKIE и соответствующим образом обрабатывается.

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

Сервер может считывать содержащуюся в cookies информацию и на основании ее анализа совершать те или иные действия. Например, в случае авторизованного доступа к чему либо через WWW в cookies сохраняется login и password в течение сессии, что позволяет пользователю не вводить их снова при запросах каждого документа, защищенного паролем.

Назначение cookie

На использовании cookies также часто строят функции оформления заказов в онлайновых магазинах. При их помощи реализуют виртуальную корзину покупателя, в которую сервер записывает информацию обо всех заказанных товарах. Пользователь просто помечает интересующие его товары, а затем оформляет покупку сразу всех отмеченных товаров.

Еще одна распространенная область использования cookies - при настройке индивидуального профиля каждого зарегистрированного пользователя.

Другая область - использование механизма cookie в рекламном бизнесе Cookie используются для определения целевой аудитории, например, по географическому положению пользователей, отслеживания интересов пользователей, учета количества показов и проходов сквозь баннеры.

Формат cookie

Полное описание поля Set-Cookie HTTP заголовка:

Set-Cookie: NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secure

Минимальное описание поля Set-Cookie HTTP заголовка:

Set-Cookie: NAME=VALUE;

Set-Cookie-заголовок включает выбранный Set-Cookie:, за которым следует перечень одной или более записей. Каждая запись начинается с пары NAME=VALUE, за которыми следуют ноль или больше пар "атрибут-значение", разделенных точками с запятой. Синтаксис для пар атрибут-значение приведен выше. Пара NAME=VALUE должна быть самой первой в объявлении записи. Все другие могут следовать в любом порядке. Стандарт не предусматривает поведение при неоднократном использовании одной и той же пары атрибут-значение.

expires=DATE - время хранения cookie, т. е. вместо DATE должна стоять дата в формате Wdy, DD-Mon-YYYY HH:MM:SS GMT, после которой истекает время хранения cookie. Если этот атрибут не указан, то cookie хранится в течение одного сеанса, до закрытия браузера. Использование expires не гарантирует сохранность cookie в течение заданного периода времени, поскольку браузер может удалить запись вследствие нехватки выделенного места или каких-либо других лимитов.

domain=DOMAIN_NAME - домен, для которого значение cookie действительно.

path=PATH - этот атрибут устанавливает подмножество документов, для которых действительно значание cookie. Например, указание path=/win приведет к тому, что значение cookie будет действительно для множества документов в директории /win/, в директории /wings/ и файлов в текущей директории с именами типа wind. html и windows. shtml. Если этот атрибут не указан, то значение cookie распространяется только на документы в той же директории, что и документ, в котором было установлено cookie.

secure - если стоит такой маркер, то информация cookie пересылается только через HTTPS (HTTP с использованием SSL). Если этот маркер не указан, то информация пересылается обычным способом.

Значение записи устанавливается тремя способами:

веб-сервером (при включении соответствующих настроек); через заголовки ответа CGI-приложения (например Perl, PHP, C, Sh); серез клиентский скрипт (javascript, vbscript).

Когда запрашивается документ с HTTP сервера, браузер проверяет свои cookie на предмет соответствия домену сервера и прочей информации. В случае если найдены удовлетворяющие всем условиям значения cookie браузер посылает их в серверу в виде пары имя/значение:

Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 ...

В случае если cookie принимает новое значение при имеющемся уже в браузере cookie с совпадающими NAME, domain и path, старое значение заменяется новым. В остальных случаях новые cookies добавляются.

Понятие Интернет-приложения

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

Типы Интернет-приложений

Существует четыре типа Интернет-приложений:

    Web-приложения, которые работают на сервере, передавая через Интернет данные на клиентские машины. Для их применения требуются Web-браузеры, такие, как Microsoft Internet Explorer и Netscape Navigator;
    Web-сервисы, которые позволяют приложениям обрабатывать их данные на сервере. При этом передача подлежащих обработке данных на сервер и возврат результатов осуществляется через Интернет; приложения с поддержкой Интернета автономные программы со встроенными механизмами, позволяющими их пользователям регистрироваться, получать обновления, а также предоставляющими доступ к справочной системе и другим вспомогательным службам через Интернет; одноранговые приложения автономные программы, использующие Интернет для взаимодействия с другими программными продуктами этого же типа.

Архитектурные шаблоны Интернет-приложений

Под архитектурой системы понимается высокоуровневое представление архитектурно-значимых компонентов системы. В этом смысле компонент представляет собой отдельную сущность с открытым интерфейсом. Архитектурно-значимые компоненты это те, которые входят в представление системы на самом высоком уровне. Обычно эти компоненты или их набор нельзя сгруппировать или объединить в пакет с другими аналогичными компонентами. Свойства отдельных компонентов будут зависеть от особенностей представления системы.

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

Можно выделить следующие архитектурные шаблоны web-приложений:

Шаблон Thin Web Client (на основе "тонкого" Web-клиента) используется в большинстве приложений Internet и предоставляет ограниченные возможности по управлению конфигурацией клиента. В распоряжении клиента должен быть только стандартный браузер, поддерживающий формы. Все операции, связанные с бизнес-логикой, выполняются на сервере. Этот шаблон больше всего подходит для Web-приложений, в которых клиент обладает минимальными вычислительными возможностями или не может управлять своей конфигурацией. Шаблон Thick Web Client (на основе "толстого" Web-клиента) предполагает, что значительная часть бизнес-логики выполняется на клиентской машине. Обычно для выполнения бизнес-логики клиентом используется DHTML, аплеты Java или управляющие элементы ActiveX. Взаимодействие с сервером также происходит через протокол HTTP.

Шаблон Web Delivery (на основе механизма Web-доставки). При взаимодействии клиента и сервера, кроме протокола HTTP, используются и другие протоколы, такие как IOOP (Internet Inter-Orb Protocol) и DCOM, которые могут применяться для поддержки системы распределенных объектов. В данном случае браузер функционирует как контейнерный модуль системы распределенных объектов.

Виды web-серверов

Различают статические и активные серверы Web. Если страницы сервера содержат только статическую текстовую и мультимедийную информацию, а также гипертекстовые ссылки на другие страницы, то сервер называется статическим. Если страницы web-сервера изменяют своё содержимое в зависимости от действий пользователя, то такие серверы называют активными. Статический сервер Web не может служить основой для создания интерактивных приложений с доступом через Интернет, так как он не предусматривает никаких средств ввода и обработки запросов.

Клиентские сценарии JavaScript

Понятие языка JavaScript

Язык программирования JavaScript предназначен для создания интерактивных HTML-документов. Это объектно-ориентированный язык разработки встраиваемых приложений, выполняющихся как на стороне клиента, так и на стороне сервера. Синтаксис языка похож на синтаксис языка Java — поэтому его часто называют Java-подобным. Клиентские приложения выполняются браузером просмотра Web-документов на машине пользователя, серверные приложения выполняются на сервере.

При разработке обоих типов приложений используется общий компонент языка, называемый ядром и включающий определения стандартных объектов и конструкций (переменные, функции, основные объекты и средство LiveConnect взаимодействия с Java-аплетами), и соответствующие компоненты дополнений языка, содержащие специфические для каждого типа приложений определения объектов.

Конструкции языка сценариев JavaScript встраиваются в страницы HTML и исполняются (интерпретируются) под управлением браузера при загрузке страниц, а также при совершении пользователем определенных действий над объектами, расположенными в этих страницах.

Назначение клиентских сценариев JavaScript

Назначение клиентских сценариев JavaScript:

Оперативная проверка достоверности заполняемых пользователем полей форм HTML до передачи их на сервер. Сценарии JavaScript способны обрабатывать данные, введенные пользователями в полях форм, а также события, возникающие в процессе манипуляций пользователя с мышью, копировать в окно браузера другие страницы HTML или изменять содержимое уже загруженных страниц. Создание динамических HTML-страниц совместно с каскадными таблицами стилей и объектной моделью документа. Взаимодействие с пользователем при решении "локальных" задач, решаемых приложением JavaScript, встроенном в HTML-страницу. В частности, сценарии JavaScript широко применяются для создания различных визуальных эффектов. Например, изменение внешнего вида элементов управления, над которыми установлен курсор мыши, анимация графических изображений, создание звуковых эффектов и т. д. Механизм локальной памяти Cookie позволяет сценариям JavaScript сохранять на компьютере локальную информацию, введенную пользователем. Например, в Cookie может храниться список товаров из Интернет-магазина, отобранных для покупки.

Приложение JavaScript представляет набор операторов языка, последовательно обрабатываемых встроенным в браузер интерпретатором.

Способы включения сценариев JavaScript в HTML-страницу

Встроить сценарий JavaScript в HTML-страницу можно несколькими способами:

Задать операторы языка внутри тэга-контейнера <script>…</script> языка HTML. Браузеры, не поддерживающие какие-либо тэги HTML, их игнорируют, анализируя содержимое пропускаемых тэгов с точки зрения синтаксиса HTML. Это может приводить к ошибкам при отображении страницы. Поэтому операторы языка JavaScript помещаются в контейнер комментария <!-- … -->:

2.  <script type="text/javascript" language="javascript">

3.  <! —

4.  операторы JavaScript

5.  //-->

6.  </script>

Символы (//) перед закрывающим тэгом комментария --> являются оператором комментария JavaScript. Он необходим для правильной работы интерпретатора. Документ может содержать несколько тэгов <script>, расположенных в любом месте документа. Все они последовательно обрабатываются интерпретатором JavaScript по мере отображения частей документа в окне браузера. Поэтому рекомендуется размещать сценарии с глобальными функциями и переменными в разделе <head> документа. В этом случае все определения обрабатываются интерпретатором в начале загрузки документа и хранятся в памяти с первых моментов отображения документа в окне браузера.

Указать файл с кодом JavaScript в параметре src тэга <script>. В качестве значения параметра задается полный или относительный URL-адрес внешнего файла, содержащего программный код на языке JavaScript. Задание закрывающего тэга </script> обязательно, независимо от того, заданы или нет операторы внутри тэга. Связываемый внешний файл не должен содержать тэгов HTML и должен иметь расширение. js:

8.  <script type="text/javascript" language="javascript"

9.  src="http:www. *****/functions/jsfuncs. js">

10.  операторы JavaScript

11.  </script>

Использовать выражения JavaScript в качестве значений параметров тэгов HTML. Эта процедура аналогична процедуре встраивания числовых или символьных примитивов HTML. Элементы JavaScript также располагаются между амперсандом (&) и точкой с запятой (;), но должны заключаться в фигурные скобки { } и использоваться только в качестве значений параметров тэгов HTML. Нельзя использовать элементы JavaScript в тексте HTML. Они интерпретируются только тогда, когда расположены справа от параметра и задают его значение. Пусть определена переменная barwidth, и ей присвоено значение 75. Следующий тэг нарисует горизонтальную линию длиной в 75% от горизонтального размера окна браузера:

13.  <hr width="&{barWidth};%"/>

Определить обработчик событий в тэге HTML. Для совместимости с языками сценариев в некоторые тэги HTML были введены специальные параметры обработки возникающих событий. Значениями этих параметров могут быть операторы языка JavaScript. Обычно в качестве значения задается имя функции, которая вызывается, когда происходит соответствующее событие, определяемое параметром обработки события. Имя параметра начинается с приставки on, за которым следует имя самого события. Например, параметр обработки события click будет иметь имя onClick. События в основном связаны с действиями, производимыми пользователем с элементами форм HTML. Поэтому чаще всего перехват и обработка событий задается в параметрах элементов форм, что позволяет проверить введенную информацию перед ее отправкой на обработку. Функция или процедура это именованная последовательность операторов, которая выполняет определенную задачу и может возвращать некоторое значение. Функция в JavaScript определяется оператором function, имеющем следующий синтаксис:

15.  function имя_функции ( [параметры] ) {

16.  [операторы JavaScript]

17.  [return значение]

18.  }

Параметры, передаваемые функции, разделяются запятыми. Необязательный оператор return в теле функции (блок операторов, заключенный в фигурные скобки), определяет возвращаемое функцией значение. Определение необходимых функций следует осуществлять в тэге <head>, так как все определенные в нем операторы сценария интерпретируются до отображения страницы, и, таким образом, будут известны в процессе отображения всей страницы.

Пример задания функции и ее вызова в процессе формирования документа:

<head>

<title>Demo</title>

<script type="text/javascript" language="javascript">

<!-- //Скрыть сценарий от браузеров: не поддерживающих JavaScript

function square(number) {

return number * number;}

//-->

</script>

</head>

<body>

<p>Начинается отображение страницы, в которую внедрен сценарий вычисления функции</p>

<script type="text/javascript" language="javascript">

<!-document. write("Значение, которое вычислялось, равно ", square(5), ".");

//-->

</script>

<p> Теперь формирование страницы закончено.</p>

</body>

Пример явного вызова функции из сценария:

<head>

<title>Demo</title>

<script type="text/javascript" language="javascript">

<!-- //Скрыть сценарий от браузеров: не поддерживающих JavaScript

function validate(form) {

if(form. value >=18)

{alert("Вы - совершеннолетний");

}

else {

alert ("Вы - несовершеннолетний");

}

}

//-->

</script>

</head>

<body>

<form name="form_l" action="HTMLPage. htm">

Ваш возраст: <input type="text" size="5" name="age" /> <hr/>

<input type="button" value="Подтвердите" onclick="validate(this. form. age)"/>

</form>

</body>

В этом примере обработчик события onclick кнопки формы связан с вызовом функции validate, которой передается значение, введенное в текстовое поле age. Имя поля задается параметром name. При нажатии на кнопку вызывается функция validate, отображающая сообщение в зависимости от введенного значения.

Параметр name элемента формы задает символическое имя элемента, которое можно использовать в операторах сценария для ссылки на соответствующий элемент. Передаваемый функции параметр this. form. age использует синтаксис объектно-ориентированных языков, обозначающий элемент с именем age (текстовое поле) формы. Ключевое слово this языка JavaScript означает в данном случае ссылку на текущую форму.

Браузер MSIE реализует собственную версию JavaScript, называемую JScript. Кроме того, для выполнения многих функций клиентские сценарии обращаются к интерфейсу объектной модели браузера. Эта модель отличается для разных браузеров.

Клиентские сценарии VBScript

Помимо JScript, браузер MSIE способен работать с языком клиентских сценариев VB Script, который представляет собой подмножество Microsoft Visual Basic и функционально равноценен языку JavaScript.

Преимуществом его применения для создания сценариев является возможность использования, с небольшими корректировками, ранее написанных процедур на языках Visual Basic и Visual Basic for Application.

VBScript используется для написания сценариев клиента (в этом случае браузер должен иметь встроенный интерпретатор этого языка), а также для написания сценариев на сервере (в этом случае сервер должен поддерживать язык VBScript). Для создания сценариев клиента используется набор объектов, аналогичный набору объектов JavaScript.

Применение VB Script для создания страниц Web-серверов, расположенных в Интернете, нецелесообразно, так как не все пользователи используют IE. Однако если технологии Интернета применяются в корпоративной интрасети и можно установить на компьютеры всех пользователей IE, то применение VBScript вместо JavaScript программистами VB заметно сокращает сроки и стоимость разработки.

Программы CGI

CGI-интерфейс

CGI-интерфейс (Common Gateway Interface – Общий шлюзовой интерфейс) — одно из первых решений, созданных для доставки динамической web-информации. CGI он до сих пор очень популярен на платформе UNIX. CGI-приложения — это программы, исполняемые на Web-сервере и обычно используемые для предоставления динамической Web-информации.

Аббревиатура CGI (Common Gateway Interface) обозначает часть Web-сервера, которая может взаимодействовать с другими программами, выполняющимися на этом же Web-узле, и в этом смысле является шлюзом (gateway - шлюз) для передачи данных, полученных от клиента, программам обработки, таким как СУБД, электронные таблицы, и др. CGI включает общую среду (набор переменных) и протоколы для взаимодействия с этими программами. Программы CGI пользуются этим интерфейсом для получения (через протокол HTTP) информации от пользователя, для ее обработки и отправки обратно в виде нового документа HTML, ссылки на существующий документ или на другой объект.

Программа CGI

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

Программа CGI работает на сервере как отдельный процесс. В рамках этого процесса она способна, в частности, обращаться к базам данных для выборки или обновления информации.

Формирование динамических документов HTML с помощью CGI

Рис. 6.1.  Формирование динамических документов HTML с помощью CGI

Последовательность работы CGI состоит и следующих этапов:

Получение Web-сервером информации от клиента-браузера. Для передачи данных Web-серверу используются формы. Форма задается в HTML-документе при помощи тэгов <form> … </form> и состоит из набора полей ввода, отображаемых браузером в виде графических элементов управления: селекторных кнопок, опций, строк ввода текста, управляющих кнопок и т. д. Обычно одна из кнопок предназначена для завершения ввода. Когда пользователь заполнит всю форму, он нажимает эту кнопку, и данные из полей формы передаются программе CGI. Анализ и обработка полученной информации. Данные, извлеченные из HTML-формы, передаются для обработки CGI-программе. Они не всегда могут быть обработаны CGI-программой самостоятельно. Например, они могут содержать запрос к базе данных. В этом случае CGI-программа на основании полученной информации формирует запрос к ядру СУБД, выполняющейся на том же или удаленном компьютере. Создание нового HTML-документа и пересылка его браузеру. После обработки полученной информации CGI-программа создает динамический (виртуальный) HTML-документ, или формирует ссылку на уже существующий документ и передает результат браузеру.

CGI программа, имеет свою специфику, заключающуюся в том, что она, как правило, генерирует HTML-документ, посылаемый клиенту в виде ответа сервера. Ответ сервера, так же как и запрос клиента, имеет определенную структуру. Он состоит из следующих трех частей:

Строка состояния, содержащая три поля: номер версии протокола HTTP, код состояния и краткое описание состояния, например:

2.  НТТР/ОК # Запрос клиента обработан успешно

3.  НТТР/Not Found # Документ по указанному адресу не существует

Заголовки ответа, содержащие информацию о сервере и о возвращаемом HTML-документе, например:

5.  Date: Mon, 26 Jul 1999 18:37:07 GMT # Текущая дата и время

6.  Server: Apache/1.3.6 # Имя и номер версии сервера

7.  Content-type: text/html # Описывает медиа-тип содержимого

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

CGI-программа передает результат своей работы — HTML-документ — серверу, который возвращает его клиенту. Шлюз осуществляет свой вывод в стандартный поток вывода. Этот вывод может представлять собой или документ, сгенерированный шлюзом, или инструкции серверу, где получить необходимый документ. При этом сервер не анализирует и не изменяет полученные данные, он может только дополнять их некоторыми заголовками, содержащими общую информацию (например, текущая дата и время) и информацию о самом себе (например, имя и версия сервера).

В зависимости от метода данные формы передаются в CGI-программу или через стандартный ввод (POST), или через переменную среды QUERY_STRING (GET). Помимо этих данных CGI-программе доступна и другая информация, поступившая от клиента в заголовках запроса или предоставленная Web-сервером.

Информация шлюзам передается в следующей форме:

имя=значение&имя1=значение1&..,

где имя - имя переменной (из оператора FORM, например), и значение - ее реальное значение. В зависимости от метода, который используется для запроса, эта строка появляется или как часть URL (в случае метода GET), или как содержимое HTTP запроса (метод POST). В последнем случае, эта информация будет послана шлюзу в стандартный поток ввода.

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

Таким образом, декодирование данных сводится к следующей последовательности манипуляций со строкой:

замена каждой группы %hh, состоящей из шестнадцатеричного ASCII-кода hh с префиксом %, на соответствующий ASCII-символ; замена символов + пробелами; выделение отдельных пар имя=значение, разделенных ограничителем &; выделение из каждой пары имя— значение имени и значения соответствующего поля формы.

Perl

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

Для создания абсолютно мобильных программ CGI лучше всего воспользоваться языком Perl. Интерпретаторы этого языка созданы практически для всех операционных систем. Этот язык высокого уровня содержит многие функции, упрощающие создание программ CGI. В сети Internet доступны (причем бесплатно) версии интерпретатора Perl для различных платформ (в том числе и для Microsoft Windows NT), разнообразная документация и примеры программ.

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

PHP

Для динамического формирования документов HTML используется также технология PHP (Hypertext Preprocessor). PHP часто еще называют препроцессором гипертекста (Hypertext Preprocessor). По сути PHP серверный (выполняющийся на стороне сервера) мультиплатформный язык описания сценариев, встраиваемый непосредственно в HTML-код.

Основными сферами применения данной технологии являются создание серверных приложений и интерфейсов к базам данных.

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

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

Преимуществами PHP является бесплатность и кроссплатформенность. Недостаток – плохая масштабируемость. PHP непригоден для использования в сложных проектах. Это связано со следующими особенностями:

падение производительности при обработке больших скриптов; PHP – интерпретируемый язык и уступает по скорости работы компилируемым технологиям; в php3 нет поддержки сессий, как, например, в ASP.

ISAPI

Если Web-сервер создан на базе Microsoft Internet Information Server, вместо программ CGI можно использовать приложения ISAPI, реализованные в виде библиотек динамической загрузки DLL, что позволяет повысить производительность и масштабируемость. Приложения ISAPI условно делятся на расширения ISAPI и фильтры ISAPI.

Расширения ISAPI

Расширения ISAPI выполняют те же функции, что и программы CGI: обычно они применяются для обработки клиентских запросов и возвращения ответа в формате HTML.

Каждый раз, когда удаленный пользователь обращается к расширению CGI, на сервере Web запускается программа, которая выполняется как отдельный процесс, причем в собственном адресном пространстве. На запуск процесса требуется время, и если ваш сервер пользуется популярностью, то программы CGI могут полностью его загрузить. В результате увеличится время реакции сервера, что может оттолкнуть от него пользователей.

Для повышения производительности в некоторых Web-серверах (в частности, Microsoft Internet Information Server) используется другой способ создания расширений. Расширение создается как библиотека динамической загрузки DLL с использованием программного интерфейса ISAPI (Internet Server API).

Функционирование ISAPI-расширений


Рис. 6.2.  Функционирование ISAPI-расширений

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

Программирование приложений ISAPI представляет собой более сложную задачу, нежели создание программ CGI. Поскольку такие приложения всегда работают в мультизадачном режиме, необходимо обеспечить синхронизацию доступа к критичным ресурсам. Ошибки в приложениях ISAPI могут привести к аварийной остановке сервера Web, а вот при использовании программ CGI это маловероятно.

ISAPI-расширения явно указываются в URL-адресе, отправляемом на IIS-сервер: Например: http://localhost/sayhelloisapi/sayhelloisapi. dll

ISAPI-расширение можно вызывать с параметрами, которые позволят одному компоненту выполнять разные задачи.

Сервер IIS версии 4.0 и старше позволяет загружать программы ISAPI в отдельное адресное пространство. Эта возможность, замедляющая работу сервера, обычно используется для отладки новых программ. Аварийное завершение программы ISAPI, загруженной в отдельное адресное пространство не приводит к полной остановке Web-сервера.

В результате расширения ISAPI работают быстрее по сравнению с программами CGI, поскольку для программ CGI для каждого пользователя приходится запускать отдельный процесс.

Однако приложения ISAPI приходится отлаживать намного тщательнее, чем программы CGI. Так как приложение ISAPI работает в адресном пространстве Web-сервера, ошибка в приложении ISAPI способна вызвать аварийное завершение работы Web-сервера.

Фильтры ISAPI

Фильтры ISAPI, так же как и расширения ISAPI, реализованы в виде библиотек динамической загрузки DLL и способны контролировать весь поток данных между браузером и Web-сервером на уровне протокола HTTP.

Функционирование ISAPI-фильтров


Рис. 6.3.  Функционирование ISAPI-фильтров

ISAPI-фильтры никогда не вызываются явно — IIS-сервер обращается к ним в ответ на определенные события в процессе выполнения запроса:

на завершение обработки сервером предоставленных клиентом заголовков; на завершение сервером процедуры аутентификации клиента; на сопоставление сервером логического URL-адреса физическому; до начала пересылки "сырых" данных от клиента на сервер; на завершение пересылки "сырых" данных от клиента, но до начала их обработки на сервере; на регистрацию информации сервером в журнале; на завершение сеанса.

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

ISAPI-расширения часто создаются с использованием ISAPI-классов библиотеки MFC (Microsoft Foundation Class Library). Это значительно упрощает разработку ISAPI-расширений.

Активные страницы ASP

Active Server Pages (ASP) — это серверная среда для разработки и выполнения динамических интерактивных веб-приложений.

Технология ASP предполагает интенсивное использование серверных сценариев и объектов СОМ для создания активных Web-серверов.

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

Файл Active Server Pages (ASP) представляет собой текстовый файл с расширением ".asp". Этот файл может содержать текстовые данные, тэги языка HTML и серверные сценарии.

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

Когда пользователь обращается к странице ASP, Web-сервер вызывает веб-сервер расширение ASP для обработки указанного в запросе файла, которое интерпретирует расположенный в ней сценарий. При этом анализируются параметры, переданные этой странице. Далее страница модифицируется (или создается заново), а затем отправляется обратно пользователю.

В ASP отсутствует ориентация на конкретный язык программирования, поэтому знакомства с любым языком сценариев (VBScript, JScript или PERL) будет достаточно для того, чтобы работать с Active Server Pages. Более того, на страницах ASP допускается использование любого языка сценариев, для которого был установлен COM-совместимый обработчик сценариев. Обработчик сценариев — это программа, которая обрабатывает команды, записанные на определенном языке. В состав ASP входят обработчики сценариев VBScript и JScript, но имеется дополнительная возможность установки обработчиков для языков PERL, REXX и Python, которые могут быть получены от независимых разработчиков. Обработчик сценариев представляет собой расширение ISAPI, которое физически является динамически подключаемой библиотекой ASP. DLL. ASP. DLL просматривает файлы. asp на предмет наличия тэгов, обозначающих внедренный код для выполнения на сервере. ASP. DLL передает код сценария в Windows Script Host (WSH). WSH выполняет этот код и возвращает ответ файлу ASP. DLL, который, в свою очередь, передает IIS результат выполнения сценария и содержимое самого файла ASP. IIS возвращает ответ программному обеспечению, от которого поступил запрос.

Механизм обработки запроса на ASP-страницу

Рис. 6.4.  Механизм обработки запроса на ASP-страницу

Пример:

<HTML>

<HEAD>

<TITLE>Hello ASP World</TITLE>

</HEAD>

<BODY>

<%

Dim x

For x=1 to 5

Response. Write("<FONT size=" & x)

Response. Write(">Hello ASP World</FONT> <BR>")

Next

%>

</BODY>

</HTML>

Средствами технологии ASP можно создавать интерактивные Web-страницы, не используя расширения CGI или ISAPI, что позволяет в ряде случаев полностью избежать или максимально сократить программирование на C++ или Perl. Активные страницы ASP выполняют обработку данных, введенных пользователями при помощи форм, обращаясь при необходимости к базам данных или другим активным объектам.

Пользователь не может каким-либо образом получить содержимое страницы ASP, так как Web-сервер отправляет ему не саму страницу, а результат ее интерпретации. Таким образом, логика работы страницы скрыта от пользователей.

ASP поддерживает технологию работы со сценариями Windows Script Components. Она позволяет поместить все сценарные процедуры, выполняющие бизнес-логику, в COM-компоненты. Эти компоненты допускают повторное использование, и могут работать как в web-приложениях, так и в других программах, построенных по технологии COM.

ASP поддерживает новую служебную программу шифрования сценариев, поставляемую с MicrosoftVisual Basic Scripting Edition (VBScript) и Microsoft® JScript 5.0. Имеется возможность шифровать как клиентские, так и серверные сценарии, в результате чего тексты сценариев будут отображаться бессмысленной последовательностью ASCII-символов. Зашифрованные сценарии расшифровываются обработчиком сценариев во время их выполнения, поэтому нет необходимости в использовании отдельной программы расшифровки. Несмотря на то, что это не является полностью безопасным решением, технология не позволяет большинству обычных пользователей скопировать или просмотреть сценарий.

Серверный сценарий, встроенный в страницу ASP, способен обращаться к базам данных через вызов методов интерфейса ActiveX Data Objects (ADO) — простую и понятную процедуру. Если возникнет необходимость реализовать собственную бизнес-логику, имеется возможность создания новых объектов СОМ или использования объектов СОМ сторонних разработчиков.

Недостатками ASP является:

1.  отсутствие гибкой, мощной и масштабируемой среды программирования.

2.  необходимость размещать команды сценария в HTML. Кроме снижения производительности из-за смены контекста при каждом входе и выходе из раздела сценария, смешанный код в "сыром" HTML усложняет деление на представление и само приложение.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5