Продолжается подписка на наши издания! Вы не забыли подписаться?

ASP – старое, но нужное дело**

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

Сейчас есть несколько способов создания динамического контента, начиная с CGI и заканчивая клиентскими скриптами, исполняемыми броузером. В последнее время все большую популярность приобретают технологии ASP, SSI и наследники CGI и ASP, использующие Perl и PHP в качестве скриптовых языков. Основной средой обитания Perl и PHP являются Linux, UNIX и подобные им системы, а вот на Wintel-платформе наибольшей популярностью пользуются ASP – Active Server Pages от Микрософт.

Все перечисленные технологии для создания динамического содержимого используют тот или иной интерпретатор. Отличительной чертой ASP является то, что она позволяет подключать интерпретаторы практически любого скриптового языка. По умолчанию Микрософт поставляет VBScript и JScript. На стороне сервера почему-то принято использовать VBScript, а на стороне клиента – JScript, что позволяет легко визуально отличать серверные и клиентские скрипты. Многие утверждают, что использование скриптов – это большое преимущество, позволяющее заниматься Web-программированием непрофессиональным программистам. Однако чем дальше, тем больше Web-программирование становится сложной задачей, требующей не меньших знаний и опыта, чем "обычное". Поэтому в следующей версии ASP, ASP.Net, вместо скриптов можно будет использовать компилируемые языки. Скриптовые языки тоже останутся в арсенале Web-разработчика, единственное ограничение состоит в невозможности использования скриптовых и компилируемых языков на одной ASP-странице. Впрочем, это положение еще может измениться к окончательному выходу в свет платформы .Net. Мы еще не раз будем писать об ASP.Net, но сейчас мы сконцентрируемся на описании и примерах использования текущей версии ASP.

Сама технология ASP – это не более чем средство. Нужны еще и библиотеки, которые облегчали бы решение часто встречающихся задач. В инфраструктуру ASP уже встроен некоторый набор объектов, речь о которых пойдет ниже. Но главное – скрипты работают на базе Windows Scripting Host, о котором писалось в одном из предыдущих номеров нашего журнала. Эта технология интересна тем, что позволяет подключать внешние COM-объекты. Поэтому разработчик может как воспользоваться уже существующими объектами, так и создать собственные, обходя тем самым неизбежные ограничения интерпретируемых языков. Расширения могут быть созданы на таких языках и средствах разработки, как Delphi, VB, C/C++, PowerBuilder и так далее.

Функциональность ASP-страниц была бы гораздо ниже, если бы они не существовали бок о бок с другими технологиями, например, CDO, XML и так далее. Именно совместное использование различных средств и технологий позволяет создавать сложные и многофункциональные Web-приложения.

Особенного внимания заслуживает семейство технологий, которые можно назвать XML-технологиями. Эти технологии (XDR, XPath, XSL/XSLT, DOM и так далее), появившиеся несколько лет назад, постепенно дошли до такого уровня, что их стало можно использовать не только в пресс-релизах, но и в реальной жизни. Страшно подумать, какого состояния они достигли бы, если бы в их разработку вкладывались такие же деньги, как в их рекламу! Однако до такого состояния дел пока далеко, хотя сдвиги, конечно, есть. Мы уже писали об XML в предыдущих номерах нашего журнала, однако, честно говоря, до последнего времени эти материалы представляли скорее теоретический, чем прикладной интерес. Сейчас же XML-технологии стали довольно широко применяться при создании Web-приложений для хранения, преобразования и обмена информацией, и, значит, пришла пора еще раз обратиться к этому вопросу. Хорошим примером совместного использования ASP и XML является сайт msdn.microsoft.com.

Однако пока вернемся к ASP и попробуем разобраться, как это работает.

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

При разработке HTML-контента серверные скрипты оказываются простым способом создания достаточно сложных и приближенных к действительности Web-приложений. Так, при необходимости записи в БД информации, поступающей из HTML-форм, создании персонализированных Web-сайтов, вид которых настраивается посетителем или использовании различных возможностей HTML, поддерживаемых не всеми броузерами, ASP оказываются крайне удобным решением. Например, для обработки пользовательского ввода на сервере можно использовать языки Perl или C и построить традиционное CGI-приложение. Используя же ASP, можно передать БД информацию из HTML-формы, используя простые серверные скрипты, лежащие прямо в HTML-документе.

Вставка файлов в ASP-страницы

Серверные директивы include позволяют вставить в файл содержимое другого файла перед его обработкой Web-сервером. ASP реализует только директиву #include:

<!-- #include virtual | file ="filename" --> 

Ключевые слова virtual и file означают тип пути, используемого при вставке файла, а filename, как нетрудно догадаться, путь и имя вставляемого файла.

Вставляемые файлы не обязаны иметь какое-то особое расширение, но считается хорошим тоном присваивать им расширение .inc.

Ключевое слово Virtual

Ключевое слово virtual означает путь, начинающийся с виртуального каталога (если вы работаете в корневом каталоге сайта, этот путь отсчитывается от корня). Например, если файл Footer.inc лежит в виртуальном каталоге /Myapp, следующая строка вставит его содержимое в файл, содержащий эту строку:

<!-- #include virtual ="/myapp/footer.inc" -->

Ключевое слово File

Ключевое слово file означает относительный путь. Относительный путь отсчитывается от файла, содержащего директиву #include. Например, если ваш файл лежит в каталоге Myapp, а файл Header1.inc – в каталоге Myapp\Headers, следующий файл вставит Header1.inc в ваш файл:

<!-- #include file ="headers\header1.inc" -->

Заметьте, что путь к включаемому файлу, Headers\header1.inc, отсчитывается по отношению к включающему файлу. Если бы скрипт, содержащий #include, находился в другом каталоге, а не в /Myapp, это выражение не работало бы.

Ключевое слово file можно использовать с синтаксисом (..\), если в Internet Information Services snap-in включена опция Enable Parent Paths.

При указании пути можно задавать не только относительный, но и полный путь с указанием имени диска (c:\)

Include-файлы – советы и предостережения

По умолчанию для чтения доступны все файлы Web-сайта. Чтобы не дать посетителям просматривать include-файлы, следует запретить чтение из каталога, где эти файлы хранятся. Из этого, кстати, вытекает, что лучше хранить все файлы такого рода в одном месте, не разбрасывая их по всему сайту. Есть и другой способ скрыть эти файлы от любопытных глаз – их можно вынести за пределы данного сайта, в каталог, недоступный пользователю. При этом ASP-страницы по-прежнему смогут работать с ними.

Сам include-файл может, в свою очередь, содержать include-файлы. В ASP-файл можно несколько раз вставить один и тот же файл, единственное ограничение – такие вставки не должны закольцовываться. Например, если файл First.asp включает файл Second.inc, Second.inc не должен, в свою очередь, включать First.asp. Файл не может включать сам себя. ASP обнаруживает такие циклы или ошибки вложенности, и останавливает обработку запрошенного ASP-файла.

Файлы вставляются перед выполнением скриптов. Поэтому использовать скрипт для формирования имени и пути к include-файлу невозможно. Например, следующий скрипт не откроет файла Header1.inc, так как ASP пытается выполнить директиву #include, еще не присвоив значения переменной name.

<% name=(header1 & ".inc") %> 
<!-- #include file="<%= name %>" -->

Команды и процедуры скриптов должны заключаться в разделители "<%" и "%>", HTML-теги <SCRIPT> и </SCRIPT>, или <OBJECT> и </OBJECT>. Это значит, что скрипт нельзя начать в .asp-файле, а закончить в include-файле. Так, следующий скрипт работать не будет:

<%
  For i = 1 To n
    выражения в основном файле
    <!--  #include file="header1.inc" -->
  Next
%>

В отличие от этого, вполне работоспособного:

<% 
  For i = 1 to n
    выражения в основном файле
%> 
<!--  #include file="header1.inc"   -->
<% Next %>

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

Иногда может возникнуть потребность во вставке серверного скрипта из внешнего файла с помощью HTML-тегов <SCRIPT></SCRIPT>. Например, следующий скрипт включает файл (по относительному пути), исполняемый сервером:

<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="Utils\datasrt.inc"></SCRIPT>

В следующей таблице приведен корректный синтаксис вставки файлов с виртуальным или относительным путями.

Тип пути

Синтаксис

Пример

Относительный

SRC="Path\Filename"

SRC="Utilities\Test.asp"

Виртуальный

SRC="/Path/Filename"

SRC="/MyScripts/Digital.asp"

Виртуальный

SRC="\Path\Filename"

SRC="\RegApps\Process.asp"

Файл Global.asa

Файл Global.asa – это файл, в котором можно указывать скрипты-обработчики событий, и в котором объявляются объекты, относящиеся к сессии или приложению. Содержимое этого файла не выводится пользователям. Этот файл должен иметь только данное, предопределенное имя. Он должен храниться в корневой директории вашего приложения (сервера). Один виртуальный сервер (одно приложение) не может содержать более одного такого файла.

<...>

Изменения в ASP в IIS 5.1

На сегодня Windows 2000 стала практически стандартом де-факто, превратившись в достаточно отлаженную систему. Второй Service Pack исправил и без того немногочисленные ошибки этой ОС, и на сегодня она является прекрасной платформой для Web-решений. Всем, до сих пор работающим с Windows NT 4.0, можно смело рекомендовать переходить на W2K, особенно учитывая сегодняшнюю дешевизну памяти. Впрочем, наш Web-сервер работает на Pentium (просто) 120 в 128 МВ памяти, то есть в условиях, в которых работать по спецификациям не должен бы… С другой стороны, недавно нам пришлось установить Red Hat Linux 7.0, и мы не можем сказать, что он "летает" на Pentium Pro 200 в тех же 128 MB.

Часто слышны разговоры о том, что сервер Microsoft не выдерживает больших нагрузок. Пока, правда, не встречалось никаких реальных примеров таких падений. Практика показывает, что грамотно настроенный IIS работает не менее надежно, чем другие Web-серверы, и практически не требует администрирования.

Большинство российских серверов имеет количество посещений, не превышающее нескольких сотен в день. Это количество реально означает не более 10-20 одновременно работающих с сервером посетителей. Учитывая, что посетитель проводит на странице от нескольких секунд до нескольких минут, два-три параллельно выполняемых запроса – это и есть обычная загрузка сервера. Мы не касаемся тех немногочисленных интернет-сайтов (порталы, поисковые системы, известные новостные сайты), которые действительно выдерживают очень большую нагрузку.

Для среднего по современным меркам сервера (в аппаратном смысле), построенного на базе NT 4, не является высокой нагрузкой и несколько тысяч уникальных посещений в день. Главным узким местом такого сервера может, скорее, оказаться канал связи, в любом случае ограниченный пропускной способностью сетевой карты. Так, для обычного Ethernet 10BaseT вполне достаточно компьютера типа Pentium 200 и ниже. А ведь многие серверы подключены через 64КБит ISDN-канал!

Вот и с переходом на Windows 2000 многие не торопятся именно по причине того, что версия новая и могут возникнуть разного рода проблемы, такие, как обновление оборудования, ошибки, несовместимость. Надежность и некритичность к оборудованию доказывает наш собственный опыт эксплуатации IIS 5 и Windows 2000 вот уже на протяжении около 2-х лет (мы начали их использование еще с бета-версии), а технические аспекты перехода на новую версию обсуждаются ниже.

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

В отличие от IIS 4.0, в IIS 5.1 по умолчанию используется буферизованный вывод результатов – если в скрипте не указано обратное. Это значит, что результат отправляется клиенту после завершения серверной части работы, или при вызове из скрипта метода Response.Flush (об этом и других методах и свойствах объектов ASP говорилось выше). При переходе с IIS 4.0 на IIS 5.1 (то есть при апгрейде) настройки старой версии сохраняются, но при новой установке по умолчанию используются настройки IIS 5.1. Это может привести к неверному функционированию существующих приложений, переносимых на новый сервер.

В IIS 4.0 свойство Response.IsClientConnected возвращало корректную информацию, только если ASP-файл отправлял контент клиенту. В IIS 5.1 ASP-файл может использовать это свойство еще до отправки контента клиенту.

Раньше include-файлы располагались в виртуальном корне, отображенном на физический путь. ASP-страницы не использовали правил безопасности физического пути при обработке файлов. Теперь это не так.

Другое новшество – теперь, если файлы .asp (или .cdx) используются как документы, открываемые по умолчанию, их имя не обязательно упоминать в запросе. Например, URL

http://www.microsoft.com/default.asp?newuser=true 

и

http://www.microsoft.com/?newuser=true

равнозначны.

Поскольку IIS 5.1 работает исключительно под W2k, то для управления механизмом транзакций, и вообще вместо всего, что было связано с MTS, теперь применяется COM+, что может породить некоторые проблемы совместимости. Хотя в целом нельзя не отметить, что COM+ значительно превосходит MTS и намного приятнее в использовании.

Если ваш COM-объект помечен как both, необходимо вручную обеспечить потокобезопасность и агрегировать в него Free-Threaded Marshaller, если ссылка на него должна содержаться в коллекции Application.

Так как COM+ использует специальную метабазу для конфигурации компонентов, стало проще регистрировать COM-объекты. Теперь при перерегистрации с помощью regsvr32 больше не надо производить перерегистрацию в MTS (COM+ умудряется автоматически перечитать эти изменения).

Естественно, что IIS использует и другие новшества COM+.

**Полностью статью можно найти в печатной версии журнала


Copyright © 1994-2016 ООО "К-Пресс"