Опубликован: 24.11.2006 | Доступ: свободный | Студентов: 678 / 23 | Оценка: 4.46 / 4.54 | Длительность: 17:18:00
Лекция 4:

Сервер ATL

< Лекция 3 || Лекция 4: 123456 || Лекция 5 >

Файлы ответа сервера

Далее нужно выполнить анализ информации, полученной от веб-пользователя, вынесение решения относительно полученных данных и возврат ответа пользователю. Посредством добавления определенного кода в проект NewSimpleATLServer файл SRF веб-приложения Hello World связывается с другим приложением, которое выполняет либо запрос имени и любимого цвета веб-пользователя, либо сообщает пользователю его имя и любимый цвет. После настройки файла SRF можно изменить класс DLL-библиотеки обработчика запросов в соответствии с требованиями SRF.

Теги в файлах ответа сервера

Файл SRF является хорошей альтернативой языкам Extensible Styleshet Language (XSL) или Extensible Stylesheet Language Transformation (XSLT) и веб-формам ASP.NET за счет предоставления механизма форматирования и отображения выходных данных ATL Server при отделении логики представления от бизнес-логики. Представление Design (Дизайн) в ATL Server предоставляет определенный уровень абстракции для доступа к DLL-библиотеке обработчика запросов и записи кода HTML (см. рис. 4.11). Используя теги в файле SRF, можно реализовать упрощенные сценарии, оптимизированные для управления вызовами функций в DLL-библиотеке обработчика запросов, аналогично файлам XSL и XSLT, которые анализируют и управляют содержимым XML. Файл XSL или XSLT содержат в верхней части инструкции для обозначения того, как нужно использовать файл, и в файле SRF имеется такой же элемент. Файл SRF поддерживает упрощенные возможности циклов и вынесения решений, как и файлы XSL и XSLT.

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

Теги Handler и Subhandler

Первым тегом любого файла SRF является тег handler. Тег handler указывает библиотеку DLL, к которой осуществляется доступ при поиске функций, указанных тегами замещения в файле SRF. Также можно указать тег subhandler. В одном файле SRF можно вызвать функции из одной или нескольких DLL-библиотек обработки запросов. В теге handler или subhandler используются псевдонимы, с помощью которых формируются теги замещения для вызова функций из рассматриваемой библиотеки DLL обработчика запросов с применением имени alias.function. Тег handler имеет следующий синтаксис:

{{handler <handler name>.dll/Default}}

По умолчанию Visual Studio .NET записывает файлы DLL в каталог с файлами SRF. Размещение двоичных файлов, как правило, представляет определенный уровень абстракции, отличающийся от кода файлов SRF, поэтому двоичные файлы предпочтительнее записывать в отдельный каталог на сервере. Для этого обычно используется подкаталог корневого веб-каталога или каталог корневого виртуального каталога с именем bin. При использовании подкаталога bin для хранения библиотек DLL тег handler выглядит следующим образом:

{{handler bin\<handler name>.dll/Default}}
Теги замещения

Тег замещения наиболее часто используется в файле SRF. Теги замещения являются точкой доступа разработчика к функциям DLL-библиотек обработки запросов. Тег замещения осуществляет запрос ответа от библиотеки, содержащей нужную функцию, и вставляет ответ в том месте файла SRF, в котором находится тег замещения. Теги замещения поддерживают инструкции для вызова функций, выполняют передачу аргументов функции в DLL-библиотеку обработки запросов. Например, блок if..else..endif можно реализовать с помощью команды {{if<FunctionName>}}, являющейся начальной точкой блока if. Блоки Else и endif обозначаются командами {{else}} и {{endif}} соответственно.

В проекте NewSimpleATLServer SRF вызывает функцию по имени атрибута HaveNameAndColor, как показано в следующем коде. Если HaveNameAndColor возвращает значение "истина", отображаются имя и любимый цвет, введенные пользователем. Если один из элементов неизвестен, то функция HaveNameAndColor возвращает значение "ложь", и SRF запрашивает у пользователя имя, фамилию и любимый цвет. Теги замещения поддерживают инструкции while..endwhile для реализации циклов.

<html>
<HEAD>
</HEAD>
<BODY>
<P>{{//comments can appear before handler tag}}</P>
<P>{{handler bin\NewSimpleATLServer.dll/Default}}</P>
<P>First let me say : {{Hello}}<br>
</P>
<P>{{if HaveNameAndColor}}
</P>
<P>I can rest easy now because I know your name is: 
{{YourName}}</P>
<P>
and your favorite color is: {{YourFavoriteColor}}
<P>
{{else}}
<P>Tell me this:</P>
<FORM id="Form1" action="NewSimpleATLServer.srf" method="post">
<P>First Name <INPUT id="Text1" type="text" name="firstname"></P>
<P>Last Name <INPUT id="Text2" type="text" name="lastname"></P>
<P>Favorite color <INPUT id="Text3" type="text" name="color"></P>
<P>
<INPUT id="Submit1" type="submit" value="Submit" name="Submit1">
</P>
</FORM>
<P>{{endif}}</P>
</BODY>
</html>
Листинг 4.4.

Предупреждение. Теги замещения в файлах SRF, ссылающиеся на несуществующий атрибут в DLL-библиотеке обработки запросов, вызовут ошибку HTTP 500 Internal Server Error (HTTP 500: внутренняя ошибка сервера). Эту ошибку обнаружить довольно сложно, поскольку она возникает при многих условиях. В Visual Studio .NET отсутствует функция автозавершения, отображающая доступные атрибуты в DLL-библиотеке обработки запросов при изменении разработчиком файла SRF, поэтому велика вероятность неправильного указания тега обработчика запросов.

Мы видим, что листинг исходного кода файла NewSimpleATLServer.srf (см. рис. 4.11) является документом HTML. Единственным различием между файлом HTML и SRF является присутствие тегов, заключенных в парные фигурные скобки ("{{ }}"). Элементы управления сервера, предоставляемых проектами веб-службы или веб-формы, по умолчанию недоступны в проекте сервера ATL. Расширение файла SRF связано с библиотекой расширения ISAPI, поэтому файл HTM, HTML или любой другой файл можно связать с DLL-библиотекой расширения ISAPI и реализовать его обработку так, как если бы речь шла о файле SRF с расширением .srf.

Примечание. Возможность добавления комментариев в файл SRF не столь обширна, как в других типах программных решений (например, в исполняемой программе или веб-службе). Иногда пробелы, размещаемые перед или после тегов замещения, вызывают ошибку в работе файла SRF. Комментарии размещаются перед тегом обработки. Для обозначения тегов используются стили комментариев HTML ( !-- ) или C++ ( // ). Комментарии нельзя располагать на одной строке с другими тегами, например, с тегами замещения. Например, следующая строка вызовет возврат файлом SRF внутренней ошибки сервера HTTP 500: {{endif // if HaveNameAndColor}}.

< Лекция 3 || Лекция 4: 123456 || Лекция 5 >
Олег Корсак
Олег Корсак
Латвия, Рига
Ренат Файзуллин
Ренат Файзуллин
Россия, Казань