Asp справочник global asa


Asp справочник global asa

Теперь давайте рассмотрим объект Application. Он предназначен для хранения глобальных переменных ASP-приложения, то есть переменных, которые доступны каждому сеансу приложения. Эти переменные находятся в коллекции Contents, к которой обычно обращаются сокращенно. Например, запишем следующий код в файл default.asp.

Затем создадим файл test.asp и наберем такой код:

После этого исполним сценарий default.asp, а затем test.asp. Последний выведет строку test в окне браузера. Вообще, в какой бы сценарий приложения мы не вставили код test.asp, результат будет одним и тем же.

Объект Application предоставляет разработчикам два метода:

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

Кроме коллекций и свойств у объекта Application есть два события: Application_OnEnd и Application_OnStart, которые мы рассмотрим чуть позже.

Этот объект предназначен для управления сеансами. Он имеет четыре свойства:

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

Свойство SessionID доступно в режиме «только для чтения» и возвращает уникальный идентификатор сеанса. Использование:

Свойство TimeOut отвечает за время, через которое движок ASP прервет сеанс и удалит всю связанную с ним информацию на сервере. Установка этого свойства не позволяет оставлять данные о конкретном пользователе на сервере после того, как он отключился. Принимает значения в минутах. Например:

Объект Session имеет один метод — Abandon, который позволяет принудительно прервать сеанс до истечения срока, указанного в свойстве TimeOut. Пример использования:

В объекте Session, как и в объекте Application, можно хранить данные. Для этого используются переменные уровня сессии. Например:

Кроме того, объект Session предоставляет разработчикам два события: Session_OnStart и Session_OnEnd, которые мы рассмотрим немного ниже.

С чего начинается … нет, не Родина :-) — web-приложение? Ответ такой: с файла Global.asa. Он является главным файлом приложения. В этом файле могут существовать только следующие элементы:

· Четыре события : Application_OnStart, Application_OnEnd, Session_OnStart, Session_OnEnd;

Атрибут RUNAT всегда принимает значение Server. Атрибут SCOPE определяет область видимости компоненты (Application или Session). ID — это идентификатор, с помощью которого в дальнейшем можно будет получить доступ к объекту. Далее вы указываете PROGID или CLASSID, которые нужны, чтобы идентифицировать компонент.

Например, вы хотите создать экземпляр компонента BrowserCapabilities (он рассматривался выше), который был бы доступен каждому сеансу приложения. Для этого в файле global.asa необходимо написать примерно следующий код:

После этого вы получаете доступ к свойствам и методам данного компонента из любого сценария вашего приложения простым обращением к переменной MyBrowser. Например:

Также экземпляры ActiveX-компонентов можно создавать с помощью подключения библиотеки типов данной компоненты. Делается это следующим образом:

Атрибут TYPE всегда принимает значение TypeLib. В атрибуте FILE необходимо указать путь к библиотеке типов вашего компонента. UUID — это уникальный идентификатор этой библиотеки. Указывать можно либо FILE, либо UUID. VERSION — это, естественно, версия компоненты :-). Атрибут LCID отвечает за идентификатор локали.

Например, у вас есть библиотека динамической компоновки MyLib.dll, а у нее есть библиотека типов MyLib.lib. Вы можете подключить ее в файле global.asa вот таким способом:

Затем в любом сценарии приложения можно использовать этот компонент следующим образом:

. Часть 1

Интерфейс к базе данных с помощью ASP

Постановка задачи

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

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

Я почти уверен, что подобная задача актуальна применительно практически к любому сайту, тем более что подобным образом (разве что без возможностей поиска, сортировки и удаления) работает большинство гостевых книг (guestbook).

Что нам понадобится

Для реализации вышеизложенной задачи нам потребуется персональный компьютер с Microsoft Windows NT или Windows 2000 (можно и Workstation, и Server), установленный IIS (Internet Information Server), какой-нибудь HTML-редактор (советую использовать Macromedia Dreamweaver), Microsoft Access (версии 95, 97 или 2000) и самый обычный текстовый редактор.

Создание и подготовка базы данных

Прежде всего создадим базу данных статей, для чего:

  • запустим приложение Microsoft Access;
  • любым из известных способов создадим новую базу данных. Назовем ее «Articles»;
  • в созданной базе данных создадим таблицу с именем, например «Articles»;
  • пользуясь инструментом «Конструктор», определим поля нашей таблицы и типы принимаемых ими значений (рис. 1);
  • заполним таблицу несколькими статьями в соответствии с созданными полями (рис. 2);
  • сохраним базу данных в файле «ArticlesDB.mdb».


Далее необходимо прописать нашу базу данных в соответствующем разделе источников данных системы, для этого:

  • запустим программу-конфигуратор источников данных (Data Sources ODBC) — Start->Settings->Control Panel->Administrative Tools->Data Sources ODBC;
  • перейдем во вкладку «System DSN» и создадим новый источник данных, нажав на «Add…»;
  • в появившемся списке драйверов выберем драйвер баз данных Microsoft Access — «Microsoft Access Driver (*.mdb)» и нажмем на «Finish»;
  • в строке «Data Source Name» зададим имя нашей базы данных, например «Articles» (это то имя, по которому мы в дальнейшем будем обращаться к ней);
  • нажмем на «Select…», выберем подготовленный нами файл «ArticlesDB.mdb» и нажмем «OK».

В результате в списке источников данных в вашей системе появится строка, представленная на рис. 3.

Оформляем главную страницу (index.asp)

С ASP работать очень просто. Для этого надо всего лишь вставить текст скрипта ASP в пару тэгов . В остальном ASP-файл ничем не отличается от HTML-файла (за исключением, пожалуй, расширения). Комментарии в HTML, как известно, вставляются в пару тэгов , в ASP же закомментировать строку можно при помощи символа ‘ (апостроф) в ее начале.

Теперь давайте разберемся. Во-первых, как вы наверняка заметили, ASP-код легко сочетается с HTML-тэгами; в этом его достоинство. Так, к примеру, строка Response.Write Link & «
» отображает на экране браузера клиента подготовленное сервером значение переменной Link и HTML-тэг
, то есть перевод строки. Особый интерес вызывает переменная rs. Для искушенных программистов сразу скажу — это указатель. Однако в ASP с целью облегчения работы начинающих указатели маскируются. Здесь не встретишь громоздких С’шных конструкций, типа «я знаю, что ты знаешь, что я знаю», или, выражаясь программистским языком, указатель на указатель… Однако сделано это так искусно, что гибкость программирования при этом не теряется, нет лишь прямой работы с указателями, а только работа с помощью специальных функций, скрывающих от программиста рутину и защищающих указатели от некорректных действий. Таким образом, выражение rs.Fields («Article»).value означает значение поля «Article» текущего значения указателя на элемент базы данных (в нашем случае статей) и содержит текст статьи, которая соответствует текущей позиции указателя на все статьи. Переход к следующему элементу базы (смещение указателя) выполняется с помощью инструкции Rs.MoveNext. В приведенном выше примере это не делается, а попросту формируется ссылка на текст статьи в виде ее названия и отображается комментарий самой первой статьи, соответствующей результату запроса. Давайте попробуем отобразить все статьи нашей базы данных на главной странице в виде HTML. И еще, обратите особое внимание на директиву:

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

Первая строчка скрипта шаблона HTML присваивает переменной TheID значение, переданное ссылкой с использованием метода Request.QueryString. Далее открывается база данных, из которой читается статья (запись), соответствующая идентификатору, переданному из главного скрипта (index.asp).

Создаем главную страницу

Таким образом в таблицу в цикле будут добавляться ряды со ссылками на статьи и с аннотациями, пока не будут отображены все статьи из базы данных. Следует обратить внимание на переменную Cnt. По окончании цикла она будет содержать число обработанных статей (рядов таблицы).

Язык структурированных запросов — SQL

Настала пора разобраться с тем, что таится за строчками:

По сути, именно за этими двумя строчками кроется работа с нашей базой данных: первая представляет собой текстовую строку с запросом к базе данных (текстовые строки в ASP записываются в двойных кавычках); вторая — содержит директиву выполнения этого запроса с одновременным присвоением результата переменной (указателю на записи в базе данных). В рамках настоящей статьи мы не будем рассматривать SQL (Structured Query Language) во всех деталях, а остановимся лишь на тех его операторах, без понимания которых дальнейшая работа будет невозможна. Для тех, кому этого покажется недостаточным, советую посетить отобранные мною сайты с детальной документацией по SQL.

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

DELETE удаляет те ряды из «Имя Таблицы», которые удовлетворяют условию, определенному в «Определении», и возвращает число удаленных рядов. Если выполнить команду DELETE без условия WHERE, то все ряды указанной таблицы будут удалены. В этом случае DELETE возвратит 0. Ключевое слово LOW_PRIORITY откладывает выполнение операции DELETE до завершения работы чтения из таблицы других клиентов.

SELECT используется для извлечения рядов (записей) из одной или более таблиц. Выражение_Select определяет столбцы таблицы, значения которых необходимо извлечь. Все ключевые поля должны быть заданы в строгой последовательности. К примеру, выражение HAVING должно следовать за любым выражением GROUP BY и до любого выражения ORDER BY.

Выражение_Select можно заменить псевдонимом (alias) с помощью ключевого слова AS. Псевдоним используется в качестве идентификатора имени столбца и может быть использован наряду с ключевыми словами ORDER BY или HAVING.

Выражение HAVING может относиться к любому столбцу или псевдониму в Выражении_Select. Оно применяется к запросу в последнюю очередь, непосредственно перед посылкой данных клиенту. SELECT . INTO OUTFILE ‘имя_файла’ заносит отобранные записи в файл. Файл создается непосредственно на сервере и не может «уже существовать» (одна из основных причин такого механизма заключается в предотвращении случайного «затирания» различных важных файлов).

Илон Маск рекомендует:  Iis вкладка параметры процесса

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

Первая форма — INSERT . VALUES — вставляет ряды на основании заданных значений. Вторая форма — INSERT . SELECT — вставляет ряды, выбранные из другой таблицы.

Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Ключевое слово IGNORE в команде INSERT позволяет избегать вставки повторяющихся строк (используется в сочетании с ключевыми словами PRIMARY или UNIQUE). Для второй формы INSERT INTO . SELECT операция не может содержать выражения ORDER BY. Таблица, в которую производится добавление записей, не может присутствовать в выражении FROM части SELECT запроса потому, что запрещено производить выделение из той же самой таблицы, в которую производится вставка.

REPLACE служит для редактирования содержимого таблицы и работает в точности как INSERT, за исключением того, что если старая запись в таблице имеет то же значение, что и записываемая, то старая запись удаляется прежде, чем добавляется новая.

UPDATE обновляет поля существующей таблицы новыми значениями. Выражение SET показывает, какие поля (столбцы) должны быть изменены, и значения, которые должны быть им присвоены. Выражение WHERE, если оно есть, указывает, какие ряды должны быть обновлены. В противном случае операция применяется ко всем рядам таблицы. Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Выражения UPDATE выполняются слева направо.

Обновляет значение поля Password в таблице WAPassword, записывая в поле, чей идентификатор ID равен 1 значение ‘passw’.

Увеличивает значение поля counter таблицы Счетчик на 1.

Удваивает поле age, а затем прибавляет 1 к его значению в таблице persondata.

Что такое Global.asa

Global.asa позволяет выполнять определенные скрипты в начале работы клиентской сессии или при инициализации IIS. Примером тому может служить простейший счетчик числа посещений сайта. Более того, допустимо использовать множественные файлы Global.asa. Однако следует помнить, что ASP-скрипт ищет самый близкий (расположенный в том же каталоге) файл Global.asa и использует именно его.

По сути, этот файл может содержать четыре скрипта: первый будет выполняться при инициализации службы IIS/PWS (Application_OnStart), второй — при остановке службы IIS/PWS (Application_OnEnd) (обычно эти первые два скрипта отрабатывают в процессе перезагрузки компьютера), и еще два скрипта выполняются дополнительно при инициализации сессии пользователя (Session_OnStart) и по ее окончании (Session_OnEnd). Данная схема очень сильно напоминает пары «конструктор-деструктор». Неспроста всякая переменная, которая должна быть использована (например, в текущей сессии), может быть инициализирована в Session_OnStart с тем, чтобы быть использованной в процессе работы сессии, она же уничтожается (обнуляется) в Session_OnEnd.

Global.asa не может содержать тэгов HTML. Недопустимо использование JavaScript. Не рекомендуется писать файл Global.asa с помощью каких-либо HTML-редакторов, для этого гораздо лучше использовать NotePad. И еще один совет: прежде чем вставлять скрипт в файл Global.asa, попробуйте его в работе в обычном ASP-файле.

Пример файла Global.asa

Добавляем новую статью (UploadForm.asp и Upload2DBS.asp)

Теперь, когда мы разобрались с SQL, можно приступать к добавлению новой статьи, причем делать мы это будем прямо с сайта, а если быть точнее — непосредственно с HTML-формы. Для этого сначала создадим файл с самой формой и определим скрипт-реакцию на подтверждение (кнопку «Publish the article!»). (Предполагается, что читатель знаком с азами построения HTML-форм, поэтому мы рассмотрим этот процесс, не вдаваясь в детали построения форм.)


Прежде всего следует уточнить задачу на этом этапе. Итак, очевидно следующее:

  • на загрузку статьи с сайта должен иметь право не каждый (следовательно, желательно предусмотреть пароль для доступа к этой функции);
  • у каждой статьи есть определенная тема (рубрика), причем она не может быть произвольной, а должна выбираться из списка;
  • список можно хранить непосредственно в HTML-файле и, каждый раз изменяя его, изменять сам файл. Это самый простой и быстрый способ;
  • однако для того, чтобы позволить динамически изменять и пополнять этот список, рекомендуется держать его в базе данных. Это позволит пользователям произвольным образом изменять его содержимое и не потребует переделки формы. Для простоты сначала рассмотрим вариант со встроенным («жестко прошитым») рубрикатором.

Как видим, передача управления осуществляется благодаря директиве ACTION=»http://localhost/Upload2DBS.asp»> в тэге формы. Тем самым указывается скрипт-ответ на реакцию пользователя после нажатия на кнопку «Publish the article!». Теперь остановимся на селекторе рубрик. Как уже отмечалось, желательно перевести его содержимое в базу данных. Для этого в нашей базе данных (файл ArticlesDB.mdb) создадим новую таблицу с именем, к примеру «Topics», в которой с помощью конструктора определим всего одно поле — «Topic» типа «текст». Далее заполним эту таблицу произвольными значениями нашего рубрикатора и отсортируем полученный список в алфавитном порядке. После чего следует заменить тэг

Теперь давайте разберемся с самой сутью дальнейшей работы. Что же должен делать наш скрипт-реакция?

Во-первых, следует позаботиться о том, чтобы все обязательные поля (а они отмечены звездочкой) были введены. Наиболее правильным способом проверки этого является скрипт, написанный на любом языке описания скриптов (например, JavaScript), который будет проверять, введены ли значения обязательных полей. Для этого достаточно добавить в определение тэга формы параметр onsubmit=»preprocess();», где preprocess() — имя функции-скрипта, который и будет осуществлять проверку. Здесь как нельзя кстати видно преимущество языков описания сценариев (JavaScript, Jscript, VBScript) перед ASP. ASP выполняется на стороне сервера, а перегружать связь «клиент-сервер» простой проверкой типа «введены ли значения», согласитесь, неправильно. Однако специально в целях обучения мы будем делать это с помощью ASP.

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

Удаляем статью (RemoveForm.asp и Rem.asp)

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

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

Таким образом, в текущий скрипт передается в качестве параметра сеансовая переменная с идентификатором текущей статьи, которую необходимо удалить. Имеется в виду, что ссылка на удаление присутствует в странице с шаблоном (файл ArtTmp.htm) и удаляемая статья является текущей.

Организуем поиск (SearchForm.asp и SearchDBS.asp)

Как известно, без поиска навигация в сколь-нибудь солидной базе данных невозможна в принципе. Попробуем организовать поиск статьи по ее реквизитам, причем постараемся организовать булев (логический) поиск, соединяя отдельные значения критериев поиска с помощью логики «И/ИЛИ».

Опять же не заостряя внимание на поисковой форме (файл SearchForm.asp), перейдем непосредственно к самому процессу поиска:

Самое интересное происходит при формировании запроса к базе из составляющих:

В зависимости от введенной пользователем комбинации исходных полей из этих компонентов формируется окончательный запрос, в частности для полей «Author» и «Title». Возможны четыре случая: оба поля пусты, пусто первое поле, пусто второе поле и оба поля не пусты. Соответствующая строка SQL-запроса в каждом из этих случаев формируется по-своему. То же самое относится к состоянию селекторов рубрик статей и порядку их сортировки. При добавлении той или иной подстроки учитывается состояние «радиокнопок» И/ИЛИ и соответствующая подстрока добавляется в SQL-запрос, предваряясь логическим элементом «and» или «or» соответственно. После того как окончательный запрос сформирован, он выполняется, а результирующая страница формируется исходя из списка статей, удовлетворяющих критериям.

Полный код приведенных в статье примеров, включая файл базы данных, находится на нашем CD-ROM.

И в заключение

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

Среди множества инструментальных средств, служащих для облегчения создания ASP-приложений, выделяются два: Easy ASP © Eric Banker, 2000 и Microsoft InterDev из комплекта Microsoft Visual Studio 6.0. Первый — очень удобное, несложное и небольшое средство для быстрого создания ASP-приложений. Второй представляет собой мощный, тяжеловесный интегрированный пакет в духе Microsoft для разработки всевозможных Web-приложений.

Временная версия EasyASP 4.0 находится на нашем CD-ROM.

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

http://www.15seconds.com/issue/000210.htm — создание динамичных JavaScript-скриптов с помощью ASP и интерфейсов к базам данных

http://www.alphasierrapapa.com/iisdev/ — сайт, посвященный разработке серверов IIS с помощью ASP

http://www.websiteresources.com/ — огромная база исходных текстов всевозможных Web-программ

Примеры ASP-кода для профессионалов

http://www.asptoday.com/search.asp?category=ASP Tricks — масса полезных советов для начинающих программировать на ASP

http://www.oreilly.com/catalog/aspnut/ — замечательная книга популярнейшей серии «In a Nutshell» всемирно известного издательства O’REILLY «ASP in a Nutshell A Desktop Quick Reference». На сайте бесплатно размещена одна из глав книги

http://www.chilisoft.net/ — версии ASP для различных платформ можно скачать с этого сайта

http://www.willcam.com/sql/ — введение в структурированный язык запросов SQL

SQL Reference and Example Site — хорошо структурированный материал по SQL

> Ask Question

I’ve recently been given a website written in classic asp to configure and set up — although it also appears to have pages written in asp.net.

The problem I’m having at the moment is that it doesn;t appear to be picking up settings from the global.asa file such as Application(«ConnectionString»).


As when I try to write them out from somewhere in the code — nothing appears.

Any idea how to congure this website to use global.asa. or why it’s not already using it?

There is web.config file and global.asax. shouldn’t this just be for .net?

The code will not compile in visual studio.

Debugging a Global.asa File

Debugging a Global.asa file differs from debugging .asp files in these ways:

    The Global.asa file cannot be a start page. To debug the Global.asa, you must request an ASP page. When the ASP page is requested, the server processes the Global.asa page.

Procedures in a Global.asa file are event-driven, unlike inline script in .asp files.

Procedures in a Global.asa file usually run only once per application or once per session:

    The Application_OnStart procedure executes the first time that any page in an ASP-based application is accessed.
Илон Маск рекомендует:  Что такое код mcrypt_encrypt

The Application_OnEnd procedure executes only when the application is shut down.

The Session_OnStart procedure executes only once per user session.

  • The Session_OnEnd procedure executes only when a user’s session times out or when a script explicitly calls the Session object’s Abandon method.
  • Enabling Debugging in the Global.asa File

    Before you can debug script in the Global.asa file, you must enable debugging for ASP pages. You can manually enable debugging for your ASP application as described under «Enabling ASP Debugging on the Server» in the Troubleshooting topic. Alternatively, Visual InterDev can automatically enable debugging on the server as needed.

    To automatically enable script debugging in ASP pages

      In the Project Explorer, right-click the project and choose Properties to display the Property Pages dialog box.

    Choose the Launch tab.

  • Under Server script, make sure Automatically enable ASP server-side debugging on launch is checked.
  • When this option is set, each time you start a debugging session Visual InterDev checks that the server is configured for debugging. This includes:

      Setting the Microsoft ® Internet Information Server (IIS) application to run in its own memory space (in COM terms, it runs «out of process»).


    Enabling the IIS application’s debugging options.

    Setting up a Microsoft ® Transaction Server (MTS) package to allow you to attach the debugger to the Web application. The package’s >NoteYou can perform the first two steps manually on the server. For details, see «Enabling ASP Debugging on the Server» in the Troubleshooting topic.

    When you quit your debugging session, Visual InterDev restores the server debugging settings and out-of-process setting to their previous values.

    Debugging Scripts in the Global.asa File

    To debug the Global.asa file, you set up a debugger call from script in the file, and then start an ASP application.

    To call the debugger from the Global.asa file

      Open the Global.asa file in the editor, and then set a breakpoint in a script.

    Include a statement that starts the debugger explicitly, such as Stop in VBScript or debugger in JavaScript. Place the statement at the beginning of the procedure, before any statements that you will want to step through.

  • Request an ASP page from the current project in the browser. This causes the IIS to run the Global.asa file.
  • Debugging the Global.asa File in Response to an Error

    If there is an error in a Global.asa file (either a syntax error or run-time error), the server stops the procedure containing the error. If debugging is enabled for that ASP application, the server prompts you to start the debugger and displays an error message. If debugging is not enabled for the ASP application, an error message is sent to the client browser. In either case, the procedure containing the error stops.

    Note If a debugger is installed on the server computer, the server does not pass error information through to the client. Instead, it displays an error message on the server computer’s monitor. For more information, see «Just-In-Time Debugging of Server Pages» in the Troubleshooting topic.

    You can launch the debugger in response to an error or debugger statement only if just-in-time debugging is enabled.

    To enable just-in-time debugging

      From the Tools menu, choose Options.

    In the Options dialog box, choose Debugger.

    To debug Global.asa script in response to an error

      When an error message appears prompting you to start the debugger, choose Yes.

    A new instance of Visual InterDev is launched and you are prompted to open a project. If Visual InterDev is already running, a second instance is launched.

    Open the project containing the Global.asa file to debug. If the project is already open in another instance of Visual InterDev, you cannot open it again, and Visual InterDev creates a new solution and project instead.

    The Global.asa file is loaded into the editor. If necessary, get a working copy of the page. If the project was already open, the Global.asa file is loaded as read-only file in the new project.

    If server debugging is not enabled for the application, errors are displayed in the browser as text in the page. In that case, open the project containing the page in Visual InterDev and start the debugger there, as described above.

    ASP Global.asa

    ASP Global.asa 文件

    Global.asa 文件

    Global.asa 文件是一个可选的文件,它可包含被 ASP 应用程序中每个页面访问的对象、变量和方法的声明。

    所有合法的浏览器脚本(JavaScript、VBScript、JScript、PerlScript 等等)都能在 Global.asa 中使用。


    • Application 事件
    • Session 事件
    • 声明
    • TypeLibrary 声明
    • #include 指令

    注释:Global.asa 文件必须存放在 ASP 应用程序的根目录中,而且每个应用程序只能有一个 Global.asa 文件。

    Global.asa 中的事件

    在 Global.asa 中,您可以告诉 application 和 session 对象当 application/session 开始时做什么,当 application/session 结束时做什么。完成这项任务的代码被放置在事件句柄中。Global.asa 文件能包含四种类型的事件:

    — 此事件会在第一个用户调用 ASP 应用程序的第一个页面时发生。此事件会在 Web 服务器重启或者 Global.asa 文件被编辑之后发生。»Session_OnStart» 事件会在此事件发生之后立即发生。

    Session_OnStart — 此事件会在每当新用户请求他(她)在 ASP 应用程序中的第一个页面时发生。

    Session_OnEnd — 此事件会在每当用户结束 session 时发生。在规定的时间(默认的时间为 20 分钟)内如果用户没有请求任何页面,用户 session 就会结束。

    Application_OnEnd — 此事件会在最后一个用户结束其 session 之后发生。典型的情况是,此事件会在 Web 服务器停止时发生。这个子程序用于在应用程序停止后清除设置,比如删除记录或者向文本文件中写入信息。

    一个 Global.asa 文件可能如下所示:

    注释:由于我们无法在 Global.asa 文件中使用 ASP 的脚本分隔符 ( ) 插入脚本,我们需要把子例程放置在 HTML 的

    下面的实例演示了如何把每个新的访客重定向到另一个页面,在这个例子中会定向到一个名为 «newpage.asp» 的页面:

    您可以在 Global.asa 文件中包含函数。

    在下面的实例中,当 Web 服务器启动时,Application_OnStart 子例程也会启动。然后,Application_OnStart 子例程会调用另一个名为 «getcustomers» 的子例程。»getcustomers» 子例程会打开一个数据库,然后从 «customers» 表中取回一个记录集。此记录集会赋值给一个数组,在不查询数据库的情况下,任何 ASP 页面都能够访问这个数组:

    Global.asa 实例

    在这个实例中,我们将创建一个计算当前访客数量的 Global.asa 文件。

    • 当服务器启动时,Application_OnStart 设置 Application 变量 «visitors» 的值为 0。
    • 每当有新的访客来访时,Session_OnStart 子例程就会给变量 «visitors» 加 1。
    • 每当 Session_OnEnd 子例程被触发时,该子例程就会从变量 «visitors» 减 1。

    Файл global.asax

    Файл global.asax позволяет записывать обработчики событий, реагирующие на глобальные события. Пользователи не могут запрашивать файл global.asax напрямую. Файл global.asax выполняет свой код автоматически в ответ на некоторые события приложения.

    Код в файле global.asax пишется точно так же, как и для веб-формы. Отличие заключается в том, что файл global.asax не содержит дескрипторов HTML или ASP.NET. Вместо этого он содержит методы со специфическими предопределенными именами.

    Хотя в показанном коде это не отражено, в каждом файле global.asax определены методы для единственного класса — класса приложения. Класс приложения унаследован от HttpApplication, что позволяет работать в коде со всеми его общедоступными и защищенными членами. В этом примере используется объект Response, который является встроенным свойством класса HttpApplication, точно так же, как и встроенным свойством класса Page.

    В предыдущем примере метод Application_OnEndRequest() выводит в нижней части страницы колонтитул с датой и временем ее создания. Поскольку обработчик событий реагирует на событие HttpApplication.EndRequest, метод Application_OnEndRequest() будет выполняться при каждом запросе страницы, сразу же после завершения выполнения всего имеющегося в ней кода обработки событий.

    Как и в случае веб-форм, содержимое файла global.asax также можно разнести в два файла: один — с объявлением, а второй — непосредственно с кодом. Однако поскольку поверхности проектирования для файлов global.asax не предусмотрено, в этом нет никакой необходимости, поэтому в Visual Studio и не предлагается опция для создания файла global.asax с классом отделенного кода.

    В случае создания веб-приложения как веб-проекта Visual Studio будет применять подход с отделенным кодом и создавать два файла: global.asax (который будет практически пустым) и связанный с ним global.asax.cs (который содержит класс приложения со всеми обработчиками событий). Конечный результат будет точно таким же.

    Файл global.asax является необязательным, но каждому веб-приложению разрешено иметь не более одного файла global.asax, который должен находиться в корневом каталоге приложения, а не в каком-то из его подкаталогов. Чтобы добавить файл global.asax в проект, выберите в меню Website (Веб-сайт) (или в меню Project (Проект), если используется модель веб-проекта) пункт Add New Item (Добавить новый элемент) и укажите шаблон Global Application Class (Глобальный класс приложения). (Если в проекте уже присутствует файл global.asax, этот шаблон отображаться не будет.)

    При добавлении файла global.asax Visual Studio включает в него пустые обработчики для большинства наиболее распространенных событий приложений, поэтому разработчику остается только поместить свой код в нужные методы.

    Стоит отметить, что обработчики событий приложения в файле global.asax присоединяются не так, как обработчики событий обычных элементов управления. Чаще всего для присоединения обработчика событий приложения используется распознаваемое имя метода. Например, если создан защищенный метод по имени Application_OnEndRequest(), то ASP.NET будет автоматически вызывать его при возникновении события HttpApplication.EndRequest. В действительности все зависит от соглашения. Разработчик вполне может решить присоединить обработчик событий к событию HttpApplication.EndRequest, а не предоставлять метод Application_OnEndRequest().

    При первой загрузке домена приложения ASP.NET создает пул объектов приложения и использует его для обслуживания каждого запроса. Размер этого пула может варьироваться в зависимости от системы и количества доступных потоков, но обычно включает от 1 до 100 экземпляров. Каждому запросу предоставляется эксклюзивный доступ к одному из этих объектов приложения, а когда обработка запроса завершается, объект становится доступным для повторного использования. По мере прохождения приложением различных стадий обработки ASP.NET вызывает соответствующие методы, которые приводят в действие написанный разработчиком код. Конечно, в случае, если имена методов указаны неправильно, ASP.NET не может вызывать их, и тогда написанный разработчиком код просто игнорируется.

    События приложения

    В файле global.asax могут обрабатываться события двух следующих типов:

    события, которые возникают всегда, для каждого запроса. К числу таких событий относятся события, связанные запросом, и события, связанные с ответом;

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

    Обязательные события разворачиваются в описанном ниже порядке:


    Application_BeginRequest(). Этот метод вызывается в начале каждого запроса.

    Application_AuthenticateRequest(). Этот метод вызывается до того, как будет выполнена аутентификация. Это стартовая точка для создания собственной логики аутентификации.

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

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

    На этом этапе запрос передается соответствующему обработчику. Например, в случае запроса веб-формы на этом этапе выполняется компиляция страницы (если в этом есть необходимость) и создается ее экземпляр.

    Application_AcquireRequestState(). Этот метод вызывается непосредственно перед тем, как касающаяся сеанса информация будет извлечена для клиента и использована для заполнения коллекции Session.

    Application_PreRequestHandlerExecute(). Этот метод вызывается перед тем, как соответствующий обработчик HTML выполнит запрос.

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

    Application_PostRequestHandlerExecute(). Этот метод вызывается сразу после того, как будет обработан запрос.

    Application_ReleaseRequestState(). Этот метод вызывается тогда, когда информация, специфическая для сеанса, сериализируется из коллекции Session, чтобы стать доступной для следующего запроса.

    Application_UpdateRequestCache(). Этот метод вызывается перед добавлением информации в кэш выходных данных. Например, если вы включили кэширование выходных данных для веб-страницы, то ASP.NET в этот момент поместит сгенерированный HTML-код страницы в кэш.

    ApplicationEndRequest(). Этот метод вызывается в конце запроса перед тем, как объекты будут освобождены и восстановлены. Это подходящая точка для кода очистки.

    На рисунке показан процесс обработки одного запроса:

    Некоторые события срабатывают не при каждом запросе:

    Application_Start()

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

    Илон Маск рекомендует:  jQuery перелистывание - эффект перелистывания страниц на jquery

    Session_Start()

    Этот метод вызывается каждый раз, когда начинается новый сеанс. Он часто применяется для инициализации информации, специфичной для пользователя.

    Application_Error()

    Этот метод вызывается всякий раз, когда в приложении возникает необработанное событие.

    Session_End()

    Этот метод вызывается всякий раз, когда сеанс пользователя завершается. Сеанс завершается, когда код явно освобождает его или когда истекает срок его действия из-за отсутствия запросов на протяжении указанного периода времени (обычно 20 минут). Как правило, этот метод применяется для очистки любых связанных с сеансом данных. Однако вызывается этот метод только в том случае, если используется внутрипроцессный режим хранения состояния сеансов (режим InProc, а не StateServer или SQLServer).

    Application_End()

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

    Application_Disposed()

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

    События приложений обычно используются для выполнения инициализации приложения, очистки, регистрации использования, профилирования и поиска и устранения неисправностей. Однако не следует думать, что приложению обязательно нужны глобальные события приложения. Многие приложения ASP.NET вообще не используют файл global.asax.

    Файл global.asax не является единственным местом, где можно реагировать на глобальные события веб-приложений. Можно также создать специальные модули, принимающие участие в обработке веб-запросов.

    Демонстрация событий приложения

    В следующем веб-приложении используется файл global.asax, который реагирует на событие HttpApplication.Error. Он перехватывает ошибку и отображает некоторую информацию в предопределенном формате:

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

    Запросив эту страницу, вы увидите следующий результат:

    Обычно вы не будете использовать метод ApplicationError(), поскольку он не обладает достаточной гибкостью для работы с различными типами ошибок (если только не предусмотреть большой объем условного кода). Конфигурировать страницы специальных ошибок можно с использованием IIS. Однако метод ApplicationError() может оказаться чрезвычайно полезным, если вы захотите зарегистрировать ошибку, чтобы исследовать ее в будущем или даже отправить администратору системы электронное письмо с уведомлением о ней. В действительности, во многих случаях вам понадобятся именно эти технологии, поскольку объект Response не будет доступен. Двумя такими примерами являются методы Application_Start() и Application_End().

    Hello, ASP World!


    Вы можете увидеть этот текст, выбрав строку Source из меню View в главном окне браузера. Обратите внимание, что в документе нет последовательностей символов « » и « %> ». Все конструкции, содержащие такие последовательности, интерпретируются сервером. Они никогда не попадают в создаваемый документ HTML.

    Рис. 3-2. Просмотр страницы HelloASP.asp в окне браузера

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

    Исходный текст страницы ASP, создающей таблицу, приведен в листинге 3-2.

    Листинг 3-2. Файл ch03/ForASP.asp

    Первая строка файла страницы ForASP.asp содержит оператор @LANGUAGE , определяющий язык серверного сценария:

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


    Значение X Значение X*X

    Счетчиком цикла служит переменная i , принимающая значения от 0 до 5. При помощи конструкции мы вставляем в ячейки каждой строки текущее значение переменной i , а с помощью конструкции — значение квадрата этой переменной.

    Ниже мы приводим исходный текст документа HTML, создаваемого при помощи страницы ForASP.asp. Как видите, получившийся документ HTML не содержит никаких строк сценариев:

    Таблица квадратов целых чисел от 0 до 5











    Значение X Значение X*X
    1 1
    2 4
    3 9
    4 16
    5 25

    Внешний вид получившейся таблицы после загрузки документа в окно браузера показан на рис. 3-3.

    Рис. 3-3. Просмотр страницы ForASP.asp в окне браузера

    Наше следующее приложение Web запрашивает у пользователя регистрационную информацию, а затем показывает ее пользователю в окне браузера. Цель данного примера — показать, как с помощью серверных сценариев в страницах ASP можно получить доступ к данным, введенным при помощи форм.

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

    Рис. 3-4. Форма для запроса идентификатора и пароля пользователя

    В нашем простом примере никакого подключения не происходит. Вместо этого сервер Web создает и отправляет пользователю страницу HTML с регистрационной информацией (рис. 3-5).

    Рис. 3-5. Просмотр регистрационной информации

    Форма находится в обычном документе HTML (листинг 3-3) и не имеет никаких особенностей. В частности, здесь мы не применяем клиентских сценариев для проверки правильности введенных данных.

    Листинг 3-3. Файл ch03/LoginForm.html

    В качестве значения параметра ACTION тега

    Во-вторых, к тегу мы добавили параметр NAME , определяющий имя формы как RegForm . Это имя потребуется нам для ссылки на поля формы в клиентском сценарии.

    И наконец, в-третьих, теперь в параметре ACTION указано имя другой страницы ASP.

    Функция checkForm выполняет простейшую проверку — указал ли пользователь идентификатор и пароль. Если что-то пропущено, на экране пользователя появляется сообщение об ошибке. Если же пользователь все данные ввел правильно, функция checkForm отправляет их на сервер при помощи метода document.RegForm.submit .

    Эта незамысловатая операция уменьшает количество обращений на сервер Web, отсекая пользователей, не указавших свои пароли или имена.

    Страница ASP, получает управление, когда пользователь щелкнет кнопку Подключиться. Она содержит как серверный, так и клиентский сценарий (листинг 3-6).

    Листинг 3-6. Файл ch03/LoginCheckEx.asp

    Задача серверного сценария, строки которого выделены символами « » и « %> », — извлечение идентификатора пользователя и пароля из данных формы с целью отображения в окне браузера (как и в предыдущем примере):

    Кроме того, серверный сценарий используется для формирования таблицы:



    Идентификатор:
    Пароль:

    Что же касается клиентского сценария, то он состоит из одной функции goBack :

    Эта функция получает управление после щелчка пользователем кнопки Назад, добавленной в таблицу (рис. 3-6). Она загружает в окно браузера документ с формой регистрации, расположенной в файле LoginFormEx.html.

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


    Рис. 3-6. Кнопка Назад предназначена для возврата к форме регистрации

    До сих пор при создании простейших приложений Web средствами ASP мы допускали некоторые упрощения. Теперь настало время определить такое понятие, как приложение ASP.

    Фактически это подмножество приложений Web, созданных с использованием технологии активных серверных страниц ASP и сервера Microsoft Internet Information Server.

    Приложение ASP должно располагаться в отдельном виртуальном каталоге сервера Web или занимать корневой каталог виртуального сервера Web. В этом каталоге необходимо разместить:

    · документ HTML или страницу ASP, которая загружается по умолчанию, когда посетитель указывает адрес URL данного каталога в своем браузере;

    · специальный текстовый файл с именем global.asa, определяющий обработчики событий, возникающих в процессе работы приложения ASP;

    · каталоги, содержащие обычные документы HTML, активные страницы ASP, графические изображения, элементы управления ActiveX, аплеты Java и другие объекты, имеющие отношение к приложению.

    Что касается документа HTML или страницы ASP, загружаемой по умолчанию при доступе к каталогу приложения ASP, то его имя определяется при настройке параметров сервера Web. По умолчанию сервер Microsoft Internet Information Server использует для этой цели имя default.htm, однако Вы можете изменить его на более привычное index.html или любое другое.

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

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

    Как мы только что сказали, файл global.asa имеет отношение к приложению ASP в целом и создается для каждого такого приложения. Он должен находится в корне виртуального каталога приложения ASP или в корне виртуального сервера Web.

    В этом файле определены обработчики следующих событий:

    · запуск приложения ASP;

    · останов приложения ASP;

    · начало сеанса пользователя, загрузившего в свой браузер главную страницу приложения ASP;

    · завершение сеанса пользователя с приложением ASP.

    Вызовите подпрограмму / функцию в Global.asa со страницы ASP?

    В Классическом ASP не должна ли подпрограмма в global.asa быть доступной для всех страниц .asp в приложении? По какой-то причине у меня возникают проблемы с вызовом саба. Прежде чем я посмотрю, вызывает ли проблема что-то конкретное для моего приложения, я хотел убедиться, что все правильно понял.

    myinclude.inc, включенный во все страницы:

    Я получаю ошибку несоответствия типов при обращении к foo. Я совершенно не понимаю этого?

    1 ответ

    Вы не можете объявлять такие глобальные функции. Чтобы процитировать документацию :

    Классический asp/asp.net сайт — global.asa не работает

    Недавно мне был предоставлен веб-сайт, написанный в классическом asp для настройки и настройки — хотя у него также есть страницы, написанные на asp.net.

    Проблема, с которой я сталкиваюсь в данный момент, заключается в том, что она не собирает настройки из файла global.asa, например Application ( «ConnectionString» ).

    Как и при попытке записать их где-нибудь в коде — ничего не появляется.

    Любая идея, как запретить этот сайт использовать global.asa. или почему он еще не использует его?

    Есть файл web.config и global.asax. это не должно быть для .net?

    Код не будет компилироваться в visual studio.

    Вызов подпрограммы / функции в Global.asa из страницы ASP?

    В классическом ASP, не подпрограмма в global.asa быть доступна для всех страниц .asp в приложении? По какой-то причине у меня возникли проблемы с вызовом к югу. Перед тем, как смотреть на ли вызывает что-то конкретное для моего приложения, проблема, которую я хотел, чтобы убедиться, что я правильно понял.

    myinclude.inc, включен во всех страницах:

    Я получаю ошибку во время выполнения ссылающегося Foo «Type» рассогласование. Могу ли я полностью недоразумение это?

    Вы не можете объявлять глобальные функции , как это. Цитирую documenation :

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL