Технология ASP+
В обзоре платформы Microsoft .NET (см. статью «Microsoft .NET — сервисы Windows нового поколения» в этом номере) мы упомянули о Web-формах и программной модели, основанной на ASP+ — новом поколении активных серверных страниц, представляющем собой эволюцию технологии ASP, знакомой многим Web-разработчикам. Здесь мы хотим остановиться на технологии ASP+ более подробно.
Эволюция ASP
Active Server Pages — технологии создания активных серверных страниц, позволяющей писать скриптовые (JavaScript, JScript, VBScript) программы, выполняемые на сервере, — чуть более трех лет. Объявленная в середине 1996-го (кодовое название Denali) и выпущенная в виде дополнения к Microsoft Internet Information Server 3.0 в декабре того же года, эта технология сразу же привлекла внимание Web-разработчиков.
ASP 2.0 увидела свет в составе Windows NT 4 Option Pack, выпущенного в декабре 1997 года, а ASP 3.0 стала частью Microsoft Internet Information Server 5.0, входящего в состав операционной системы Microsoft Windows 2000, и, таким образом, представляет собой полноценный компонент операционной системы. Отметим, что технология ASP успешно используется и на других платформах (Solaris, Apache — благодаря семейству продуктов Chili!ASP) и послужила основой для создания Java Server Pages и подобных технологий.
Естественно, что технология ASP была разработана не на пустом месте. Для создания динамических Web-страниц традиционно использовались серверные программы на базе серверного интерфейса Common Gateway Interface (CGI). Такие программы могут получать запросы от пользователей и генерировать HTML- и скриптовый код и отсылать его Web-клиенту. Вместо написания исполняемых программ часто используются интерпретируемые языки типа Perl — в этом случае программист составляет последовательность команд, а Web-сервер выполняет ее, используя интерпретатор.
Для своего Web-сервера Internet Information Server Microsoft предложила интерфейс Internet Server Application Programming Interface (ISAPI), который отличался от CGI тем, что позволял выполнять на Web-сервере откомпилированный код, помещенный в DLL. Как и в случае с CGI, программы могут получать запросы от пользователей и генерировать HTML- и скриптовый код и отсылать его Web-клиенту.
Для связи с данными и обеспечения возможности их публикации на Web-страницах сначала был выпущен продукт под названием dbWeb, затем появилась более совершенная технология — Internet Database Connector (IDC), с помощью которой можно было использовать шаблоны для публикации извлекаемых из СУБД данных.
Следующим логическим шагом стало объединение шаблонов, скриптового кода и механизма доступа к данным (ADO) в единое целое — появилась технология ASP.
По мере развития ASP приобрела такие возможности, как использование сторонних серверных компонентов, создание приложений, интеграция с Microsoft Transaction Server (MTS), а в версии 3.0 — интеграция с сервисами COM+.
Таким образом, сегодня ASP представляет собой технологию создания динамических страниц, поддерживающую публикацию данных и возможность использования сторонних серверных компонентов. Для написания скриптового кода используются языки JScript, VBScript или PerlScript. (Практические вопросы использования технологии ASP рассматриваются в статье «ASP на блюдечке», публикуемой в данном номере.)
Освежив в памяти историю развития технологии ASP, перейдем к рассмотрению ограничений, существующих у этой технологии сегодня.
Ограничения ASP
Можно выделить несколько типов существующих в настоящее время ограничений ASP. Первым из них является то, что скриптовый код располагается между HTML-элементами, а потому дизайнер, отвечающий за представление страницы, может легко нарушить ее функциональность. Одним из решений этой проблемы стало введение в Visual Basic 6 понятия Web Classes. Но поскольку эта технология была недостаточно совершенной, она не получила широкого распространения.
Вторым ограничением ASP является то, что для написания кода используются только скриптовые языки. Интерпретация кода приводит к потере производительности, и многие программные элементы приходится реализовывать в виде COM-объектов.
Внедрение таких объектов на Web-сервере подводит нас к третьему существенному ограничению — для того чтобы заменить DLL, нам требуется остановить Web-сервер, а нередко и перезагрузить компьютер. Теперь представьте себе, что будет, если внедрить обновления, например, для Hotmail, где используется около 5000 серверов!
И наконец, четвертое ограничение ASP — поддержка состояний. В настоящее время не существует простого встроенного механизма для передачи данных между страницами.
Технология ASP+, представляющая собой не просто очередную версию ASP — ASP 4.0, а новую, написанную с нуля платформу для создания интерактивных, динамичных Web-приложений, призвана снять описанные выше ограничения и привнести множество новинок, облегчающих создание подобных приложений. К основным новинкам ASP+ относятся: поддержка откомпилированного кода, объектная модель для страницы, серверные компоненты, облегченное внедрение, облегченное конфигурирование и администрирование, кэширование и ряд других.
Технология ASP+
ASP+ разработана таким образом, что ее возможно использовать «параллельно» с традиционными ASP-страницами. ASP+-страницы имеют расширения .aspx, Web-сервисы — .asmx, а новые страничные компоненты (pagelet) — расширение .aspc. Бета-версия ASP+ поддерживает только IIS5 на платформе Windows 2000, финальная версия сможет работать и под IIS4 на платформе Windows NT 4.0, и с Internet Explorer 5.5 (офлайновая версия My Web). Также будут поддерживаться персональные серверы на базе Windows 95/98.
Как мы отмечали выше, ASP+ поддерживает откомпилированный код. Это означает, что код может быть написан на любом языке, поддерживаемом в Microsoft .NET, — Visual Basic, Visual C++, C#, Perl, Pyton, Eiffel, COBOL и т.п. В ASP+ поддерживаются языки со строгой типизацией и ранним связыванием — больше нет необходимости в использовании только вариантных переменных. Поскольку код является откомпилированным, мы получаем более высокую производительность — в среднем на 250%.
В ASP+ введено понятие серверной объектной модели, включающей серверные компоненты (а точнее — серверные интерфейсные элементы). Теперь можно использовать серверные комментарии (<%— —%>), вставлять данные (<%# %>) и связывать их с серверными интерфейсными элементами, использовать директивы (<%@ %>) для декларативной установки опций страниц. Помимо этого поддерживается и знакомый нам по ASP синтаксис: <% %> и <%= %>.
Наиболее интересным, на мой взгляд, расширением является поддержка серверных интерфейсных элементов. Такой интерфейсный элемент используется в составе Web-страницы, но находится на сервере. Рассмотрим следующий пример. Для заполнения элемента <SELECT> какими-либо данными из базы данных в ASP используется следующий код:
<SELECT NAME=”Color”> <% WHILE NOT Rs.EOF Response.Write “<OPTION>” & Rs(“Color”).Value WEND %> </SELECT>
Как видно из приведенного фрагмента, код располагается между элементами <SELECT> и </SELECT>, а элемент <OPTION> создается динамически. Web-дизайнер может легко нарушить такой код, если, например, ему потребуется изменить атрибуты элемента <OPTION>.
В случае использования ASP+ мы более четко отделяем программную логику от HTML-элементов:
<% WHILE NOT Rs.EOF Color.Add(Rs(“Color”).Value) WEND %> <SELECT ID=”Color” RUNAT=SERVER> </SELECT>
Обратите внимание на атрибут RUNAT=SERVER у элемента <SELECT>. Он указывает на то, что интерфейсный элемент (комбинированный список) располагается на сервере. В ASP+ реализованы серверные версии всех HTML-элементов управления, а также дополнительные элементы управления. Всего в состав ASP+ входит 45 встроенных серверных интерфейсных элементов. Ниже показаны HTML-элементы, реализованные на сервере, и встроенные элементы:
HTML-элементы | Встроенные элементы |
---|---|
<a>, <img>, <form> | <asp:button>, <asp:imagebutton> |
<table>, <tr>, <td>, <th> | <asp:linkbutton>, <asp:hyperlink> |
<select>, <textarea>, <button> | <asp:textbox>, <asp:checkbox> |
<input type=text>, <input type=file>, | <asp:radiobutton>, <asp:image> |
<input type=submit>, <input type=button>, | <asp:label>, <asp:panel> |
<input type=reset>, <input type=hidden> | <asp:table> |
Также существуют элементы-списки, элементы с «богатой функциональностью» (<asp:calendar> и <asp:adrotator>) и элементы для проверки вводимой информации:
Элементы-списки | Элементы для проверки ввода |
---|---|
<asp:dropdownlist>, <asp:listbox> | <asp:RequiredFieldValidator> |
<asp:radiobuttonlist>, <asp:checkboxlist> | <asp:RangeValidator> |
<asp:repeater> | <asp:CompareValidator> |
<asp:datalist> | <asp:RegularExpressionValidator> |
<asp:datagrid> | <asp:CustomValidator> |
<asp:ValidationSummary> |
Отметим, что сторонние фирмы, например Software Artisans, VideoSoft, APEX Software, FarPoint Technologies, Protoview Development, Stingray, работают над выпуском дополнительных серверных интерфейсных элементов.
Говоря о серверных интерфейсных элементах, следует сказать, что они не являются ни компонентами ActiveX, ни дизайн-компонентами — такие элементы представляют собой специальные компоненты, существующие только на сервере и отображающие себя в виде стандартных HTML-элементов на клиенте.
Использование серверных интерфейсных элементов имеет ряд преимуществ. Рассмотрим следующий пример. Допустим, мы создали форму:
<FORM> Имя : <INPUT TYPE=”TEXT”> <INPUT TYPE=SUBMIT> </FORM>
Если ввести свое имя и нажать кнопку Submit, содержимое формы отправится на сервер, будет обработано и возвращено клиенту. Поле «Имя» будет пустым. Для того чтобы сохранить введенное значение при передаче его назад, с сервера клиенту, нам придется написать ASP-код. В ASP+ введена технология под названием ViewState, позволяющая сохранять введенные значения. Это достигается простым изменением элемента <FORM>:
<FORM RUNAT=SERVER> Имя : <INPUT TYPE=”TEXT”> <INPUT TYPE=SUBMIT> </FORM>
Если мы посмотрим на HTML-код этой формы, то обнаружим, что ядро ASP+ автоматически вставило скрытое поле, в котором сохраняется содержимое формы.
Серверные компоненты могут генерировать события. Таким образом, вы можете определить, какой интерфейсный элемент был активизирован пользователем, и написать обработчик соответствующего события.
Говоря о серверных элементах, следует упомянуть и о возможности отделения кода от самой страницы. Например:
<SCRIPT RUNAT=SERVER SRC=”ASPPLUSDEMO.DLL”>
ASP+ и Web-сервисы
Web-сервисы — одна из наиболее привлекательных возможностей платформы Microsoft .NET. С помощью таких сервисов можно активизировать объект по протоколу HTTP. Использование ASP+ облегчает создание Web-сервисов. Вместо написания .aspx-файлов мы создаем .asmx-файлы, в которых располагаются классы. Эти файлы компилируются ядром ASP+; для них автоматически создаются Service Description Language (SDL)-файлы, описывающие их интерфейсы, и HTML-страница, содержащая описание сервиса и средства для его тестирования. Простой Web-сервис может выглядеть следующим образом:
<%@ WebService LANGUAGE=”C#” %> using System.Web.Services; public class Demo { public String ShowStatus(int OrderID) { // Здесь располагается код return Status; } }
Web-сервисы могут использоваться различными способами: через HTTP-запросы GET и POST, HTTP-POST-запросы через SOAP и XML. От разработчика сервисов не требуется знания HTTP или XML — преобразование информации к XML-формату происходит автоматически.
Внедрение ASP+
Внедрение решений на базе ASP+ существенно упрощено. Все, что необходимо сделать, — это скопировать файлы ASP+-приложения в соответствующий каталог. Не требуется ни регистрации компонентов, ни перезапуска приложения. Откомпилированные компоненты размещаются в каталоге /bin, находящемся в корневом каталоге приложения. Все размещенные в каталоге /bin компоненты автоматически становятся доступными только этому приложению. Отметим, что за счет такой изоляции можно одновременно использовать различные версии одних и тех же компонентов.
Для конфигурации ASP+ вместо централизованной метабазы используется специальный файл config.web. Этот файл представляет собой XML-документ, в котором хранятся настройки. Настройки, описанные в глобальном файле config.web, наследуются локальными файлами.
Для хранения информации о сессиях вместо cookie теперь используются URL — вся необходимая информация размещается в адресе страницы.
В ASP+ встроены три вида кэширования. Напомним, что для реализации кэширования в ASP требуется использование дополнительных продуктов, например, таких фирм, как Post Point Software или WebGecko Software. К первому виду кэширования относится кэширование выводимой информации. Также поддерживается кэширование отдельных фрагментов страницы и кэширование объектов через специальный набор функций.
ASP+ поддерживает пять встроенных схем авторизации: Basic, Kerberos, NTLM, Microsoft Passport и авторизация на базе форм. Три первые схемы схожи с имеющимися в IIS5, схема на базе Microsoft Passport во многом напоминает соответствующие сервисы Site Server 3.0.
Доступ к данным и ADO+
Завершим наш обзор ASP+ кратким рассмотрением технологии доступа к данным ADO+. Как известно, большинство ASP-приложений использует данные, хранимые в СУБД, для генерации динамического содержимого. Для доступа к данным в ASP используются объекты ADO — ActiveX Data Objects, предоставляющие доступ к объектной модели, которая является высокоуровневой настройкой над OLE DB.
Для доступа к данным из ADO+ существует объектный интерфейс ADO+, предоставляющий унифицированный механизм доступа к данным, независимо от их формата или местоположения. ADO+ является логическим продолжением ADO и базируется на наборах записей (recordset — в ADO+ это называется набор данных — dataset). Как и следовало ожидать, в ADO+ широко поддерживаются данные в формате XML, записи могут сохраняться и загружаться в этом формате. Таким образом, ADO+ может манипулировать как с реляционными, так и с XML-данными — какой способ представления данных более удобен, выбирает сам разработчик.
Объекты Connection и Command остались практически неизмененными, а вот новый объект DataReader позволяет извлекать результаты запроса через высокопроизводительные потоки, тем самым повышая скорость работы приложения. Этот объект представляет собой функциональный эквивалент объекта Recordset, открытого только для чтения и доступного только для перемещения вперед (forward only recordset). Еще одной новинкой является понятие набора данных (Dataset) — располагаемого в памяти кэша данных, обеспечивающего их реляционное представление. Наборы данных ничего не знают об источнике данных, такие наборы могут быть созданы программно или загружены из хранилища данных. Основное назначение наборов данных — манипуляция данными при отключенных источниках (disconnected dataset). Для потокового доступа к XML-данным используется объект XmlReader. Для навигации по данным и объектной модели документа служит объект DataNavigator, объектная модель XML-документа также доступна через объект XMLDocument.
Заключение
В данном обзоре мы ознакомились с технологией ASP+, которая в скором времени придет на смену технологии ASP. Следует еще раз отметить, что ASP+ является частью платформы Microsoft .NET и позволяет пользоваться всеми сервисами этой платформы из Web-приложений.
КомпьютерПресс 9'2000