|
Модель подій та життєвий цикл сторінокОбработка запроса и генерация страницы большой и сложный процесс, который происходит на стороне сервера. При обработке запроса в каждый момент времени сервер выполняет различные действия, которые в общем случае незаметны для пользователя приложения и разработчика. Зачастую для разработчика нет необходимости знать о процессах, которые происходят в рамках среды исполнения. Однако при реализации некоторых механизмов может потребоваться вмешаться в процесс обработки запроса. Например, это может быть необходимо, когда разрабатывается собственная система безопасности или реализуется сложный механизм кэширования страницы. В этом случае нужно каким-то образом вмешаться в процесс разработки и запустить собственный код. Для этих целей в ASP.NET существует модель событий, которая позволяет это сделать. В рамках этой модели существуют предопределенные события, которые запускаются каждый раз при обработке запроса от клиента в строго определенные моменты времени. Все события в модели событий ASP.NET можно разделить на два больших типа: - События страницы - исполняются каждый раз при обработке обращения к странице; - Глобальные события– исполняются в момент запуска или остановки приложения
Рассмотрим механизм работы событий ASP.NET Web Forms, которые генерируются при каждом обращении к странице. Эти события можно разделить на группы, в зависимости от времени исполнения:
- События, выполняющиеся в момент подготовки к обработке запроса; - События, выполняющиеся перед генерацией результата - кода HTML; - События, выполняющиеся после генерации результата.
Первый тип событий необходим для отслеживания момента подготовки объектов страницы, инициализации ее структуры и формирования общей инфраструктуры. Подписавшись на такие события можно инициализировать собственные объекты, необходимые для обработки запроса. После обработки таких событий происходит генерация событий, выполняющихся непосредственно перед генерацией кода HTML. К событиям этой группы относятся такие события как аутентификация и авторизация пользователя, опрос кэша на наличие данной страницы, восстановление состояния и др. Эти события позволяют выполнить собственный код до генерации результата, который будет передан пользователю. После генерации кода HTML выполняются события, которые позволяют выполнить заключительные действия после обработки запроса. Например, при обработке этих запросов можно сохранить результат в кэше, сохранить состояние страницы или освободить память от ранее созданных объектов. В целом процесс генерации страницы можно представить следующим образом (рис4.9).
Давайте более подробно рассмотрим этапы обработки страницы: Инициализация структуры страницы. На этом этапе ASP.NET создает страницу, генерируются все элементы управления, размещенные на странице. При обратном вызове Postback ASP.NET десериализует (преобразует в объектное представление) информацию из состояния вида Viewstate и применяет ее ко всем элементам страницы. На этом этапе запускается событие Page.Init. Однако это событие редко обрабатывают, поскольку объекты элементов управления еще не созданы и информация из Viewstate еще не загружена.
Рисунок 4.9 – Жизненный цикл страницы
Инициализация кода пользователя. На этом этапе запускается событие Page.Load и запускается код самой страницы. Многие используют событие Page.Load для инициализации своих элементов управления. Важно, что Page.Load запускается всякий раз при загрузке страницы, даже при обратном вызове Postback.
Проверка достоверности. На этом этапе у страницы вызывается метод Validate(), который перебирает все элементы управления валидатора и вызывает у него метод Validate(). На основе информации от валидаторов задается свойство страницы Page.IsValid. Обработка пользовательских событий. На этом этапе элементы управления страницы созданы, а страница прошла проверку на достоверность. Теперь ASP.NET запустит все события элементов управления, происходившие с момента последней обратной отсылки Postback, например, обработчики кнопок и других элементов управления.
Генерация страницы. На этом этапе ASP.NET запускает события генерации HTML-кода страницы. Генерация элементов управления происходит рекурсивно в рамках страницы.
Очистка. На данном этапе страница находится в конце своего жизненного цикла. В этот момент уже сгенерирован HTML код и повлиять на него уже невозможно. Однако объекты элементов управления до сих пор существуют. В этот момент начинается реальная очистка этих объектов и запускается событие Page.Unload. Основную цепочку событий, которые генерируются средой исполнения ASP.NET можно представить последовательностью событий. На каждое такое событие можно подписаться из своего кода и запускать в этот момент собственный код. Семантика каждого события заключается в следующем:
Таблица 4.4 – События страницы
Кроме этих событий, существует еще ряд глобальных событий, которые генерируются не при каждом обращении к странице, а при определенных условиях:
Таблица 4.5 – Глобальные события
Таким образом, среда исполнения ASP.NET содержит необходимый набор событий для определения собственного поведения приложения в различные моменты времени. Для того чтобы подписаться на любое из приведенных выше событий, можно воспользоваться двумя способами: - создать собственный HTTP-модуль, который будет встроен в среду исполнения HTTP; - использовать файл приложения global.asax.
Для подписки на события из файла приложения global.asax, необходимо создать этот файл и определить в классе приложения методы, имена которых совпадают с именем события. Для того, чтобы создать файл приложения, необходимо выбрать пункт "Add new item" в контекстном меню веб-приложения.
Рисунок 4.10 – Подписка на события из файла приложения global.asax
После этого в появившемся окне необходимо выбрать соответствующий тип файла.
Рисунок 4.11 – Подписка на события из файла приложения global.asax
Созданный класс приложения должен содержать методы, имена которых соответствуют именам приведенных выше событий.
Для того, чтобы отследить обрабатываемые на странице события можно использовать встроенные в ASP.NET средства отладки, например, объект Debug. Для этого необходимо открыть разметку страницы и в директиве Page определить задать атрибут Trace равное True.
После этого при обращении к странице будет отображаться отладочная информация. Среди прочей полезной информации будет содержаться информация о генерируемых событиях.
Рисунок 4.12 – Информация о генерируемых событиях при запуске страницы
Таким образом, ASP.NET предоставляет полноценную инфраструктуру для отслеживания критических точек при обработке запроса. Все что необходимо сделать, чтобы вмешаться в обработку запроса – подписаться на событие и выполнить собственный код. Поскольку процесс обработки запроса к веб-серверу достаточно сложный, он имеет ряд строго определенных моментов времени, в которые выполняется та или иная обработка. Для того, чтобы вмешаться в стандартный процесс обработки существует модель событий ASP.NET. В своем приложении можно подписаться на любое событие ASP.NET и обрабатывать его в соответствии с логикой приложения.
![]() ![]() ЧТО ПРОИСХОДИТ ВО ВЗРОСЛОЙ ЖИЗНИ? Если вы все еще «неправильно» связаны с матерью, вы избегаете отделения и независимого взрослого существования... ![]() Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем... ![]() Что будет с Землей, если ось ее сместится на 6666 км? Что будет с Землей? - задался я вопросом... ![]() Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|