Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
69_Web.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Тема 3. Обробка подій

3.1. Події життєвого циклу Web-додатка

Web-додатки живуть, поки в них є хоч один активний сеанс, а Web-форми живуть буквально миттєвості. Життя Web-додатка складається з наступних етапів:

  1. Браузер запитує його початкову сторінку.

  2. У гру вступає Web-сервер, що запускає частину коду додатка, яка виконується (DLL), яка і формує відгук.

  3. Частина коду, яка виконується, створює екземпляр запитаної Web-форми, генерує HTML-текст відгуку й посилає його браузеру, після чого DLL додатку знищує створений їй екземпляр Web-форми у себе на сервері.

  1. Після одержання браузером HTML, згенерованого додатком, користувач може заповнювати текстові поля форми, установлювати потрібні перемикачі й виконувати інші дії, поки він не спровокує подію, що викликає відправлення форми на сервер (наприклад, клацнувши кнопку).

  2. Ця подія змусить браузер відіслати дані сторінки (стан її відображення) назад на сервер для обробки події.

  3. Одержавши стан відображення, сервер створює новий екземпляр Web-форми, заповнює його даними стану відображення і обробляє всі події.

  4. Завершивши обробку, сервер повертає браузеру отриманий у результаті HTML і знищує створений ним екземпляр Web-форми.

Закінчивши роботу, користувач закриває браузер або переходить на інший Web-сайт, у результаті сеанс цього користувача завершується.

Якщо з додатком більше ніхто не працює (тобто сеансів більше немає), він завершується. Однак це не завжди відбувається відразу. ASP.NET керує пам'яттю за допомогою збору сміття. При використанні цього механізму сервер періодично перевіряє посилання об'єктів. Виявивши об'єкт, що більше не використовується, сервер знищує його, звільняючи зайняту їм пам'ять. Як наслідок, не можна сказати напевно, коли саме спрацює подія Aplication_End.

3.2. Збереження даних Web-форми

Оскільки Web-форми живуть дуже недовго, ASP.NET вживає спеціальні заходи для збереження даних, уведених в елементи керування Web-форми. З кожним запитом на сервер відправляються всі дані, які було введено в елементи керування, де вони записуються в елементи керування під час обробки події Page_Init. Тепер ці дані будуть доступні оброблювачеві події Page_Load.

Дані, які ASP.NET зберігає між передачею запитів, називаються станом відображення (view state) Web-форми. Стан відображення Web-форми доступно тільки усередині цієї Web-форми. Щоб зробити уведені в Web-форму дані доступними іншим Web-формам додатка, необхідно зберегти їх у змінних станів (в об'єктах Application або Session). Ці об'єкти відрізняються областю дії:

  • змінні станів на основі об'єкта Application доступні всім користувачам додатка, тому їх можна розглядати як глобальні змінні, які доступні декільком користувачам. Ці змінні дозволяється читати і записувати з будь-яких сеансів;

  • змінні станів на основі об'єкта Session доступні в межах одного сеансу (тільки одному користувачеві). Змінні Session нагадують глобальні змінні стандартних Windows-додатків. Ці змінні станів доступні тільки в поточному сеансі.

Змінні Application і Session оголошуються інакше, ніж звичайні. Змінні станів створюються кодом «на льоту». Наступний код підраховує, скільки разів клацнули кнопку, і записує результат у змінну стану Session.

// Код з файлу Global.asax.es

protected void Session_Start(Object sender, EventArgs e)

{

// Ініціалізувати змінну стану Clicks Session

Session["Clicks"] = 0;

}

// Цей код узятий з файлу StateNEvents.asax.cs

private void Button1_Click(object sender, System. EventArgs e)

{

// Збільшити число натискань

Session["Clicks"] = (int)Session["Clicks"] + 1;

// Показати число натискань

Response.Write("Number of clicks: " + Session["Clicks"] + "<br>");

}

У змінних станів можна зберігати дані будь-якого типу, від звичайних цілочислених значень до об'єктів. Оскільки змінні станів відносяться до глобальних, необхідно виробити стратегію їх використання в додатку.

Увага! Як правило, у програмах на Visual C# змінні станів Application треба ініціалізувати перед використанням. Наприклад, перед перетворенням типів (int)Session[«Clicks»] змінну стану Clicks необхідно ініціалізувати, у противному випадку під час виконання ви одержите повідомлення про помилку: «Value null was found where an instance of an object was required».

3.3. Події об’єктів Application і Session

Код, що обробляє події об'єктів Application і Session, можна помістити у файл Global.asax. Події Application будуть використовуватися для ініціалізації об'єктів і даних, які повинні бути доступними всім поточним сеансам Web-додатка. Події Session служать для ініціалізації даних, які потрібно зберігати в межах одного сеансу, не роблячи їх доступними іншим сеансам. У таблиці перераховані оброблювачі різних подій Application із вказівкою обставин, при яких вони викликаються.

Таблиця .... Оброблювачі подій Application

Ім'я

Коли викликається

Application_Start

Перший користувач відкрив початкову сторінку Web-додатка

Application_End

З додатком більше ніхто не працює

Application_BeginRequest

На початку кожного запиту до сервера. Запит відбувається щоразу, коли браузер відкриває яку-небудь сторінку додатка

Application_EndRequest

Наприкінці кожного запиту до сервера

Session_Start

Новий користувач відкрив початкову сторінку додатка

Session_End

Користувач покинув додаток, закривши браузер, або

наступив тайм-аут по бездіяльності

У додатках Web Forms сеанс (session) представляє унікальний екземпляр браузера. Якщо користувач запустить у себе на комп'ютері кілька екземплярів браузера і відкриє в кожному з них сторінки Web-додатка, для кожного екземпляра браузера буде створений окремий сеанс.

Щоб побачити події Application і Session у дії, додайте у файл Global.asax проекту Web Forms наступний код:

protected void Application_Start(Object sender, EventArgs e)

{

// Оголосити змінні станів Application

Application["AppCount"] = 0;

Application["SessCount"] = 0;

// Зареєструвати запуск додатка.

Application["AppCount"] = (int)Application["AppCount"] + 1;

}

protected void Session_Start(Object sender, EventArgs e)

{

// Підрахувати сеанси

Application["SessCount"] = (int)Application["SessCount"] + 1;

// Показати число екземплярів додатка.

Response.Write("Number of applications: " + Application["AppCount"] + "<br>");

// Показати число сеансів.

Response.Write("Number of sessions: " + Application["SessCount"] + "<br>");

}

protected void Session_End(Object sender, EventArgs e)

{

// Зменшити число сеансів.

Application["SessCount"] = (int)Application["SessCount"] - 1;

}

Щоб побачити, як працюють ці події, виконайте попередній код, потім запустіть новий екземпляр браузера і відкрийте в ньому свій Web-додаток, набравши його адресу. З кожним новим екземпляром браузера число сеансів збільшується, але число додатків залишається рівним 1.

Зверніть увагу, що внутрішні об'єкти, такі, як Session і Response, не доступні на момент події Application Start. Щоб задіяти ці об'єкти, прийдеться дочекатися подій, які відбуваються при їхньому створенні.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]