Цей текст призначений для тих, хто ніколи не мав справи з ASP, і взагалі смутно собі представляє можливості програмування на стороні сервера. Я ставив собі завдання, створити у читача загальне уявлення про предмет. Окремі неточності при цьому менш важливі, будь ласка, голосно не лайтеся.
ASP (Active Server Pages) - це потужна технологія від Microsoft, що дозволяє легко розробляти програми для WWW. ASP працює на платформі Windows NT і IIS (Internet Information Server), починаючи з версії 3, хоча начебто є реалізації на інших платформах. ASP - це не мова програмування, це внутрішня технологія, що дозволяє підключати програми до Web-сторінок. Основа успіху ASP - простий скриптова мова (Visual Basic Script або Java Script) і можливість використання зовнішніх COM-компонент.
Як це все відбувається?
Які засоби є для програмування?
Web - нормальне середовище програмування, якщо правильно зрозуміти, що є що. У VBScript є всі нормальні конструкції структурного програмування (if, while, case, etc). Є змінні (описувати не обов'язково, тип явно не задається). Підтримуються об'єкти. Робота з ними звичайна - Object.Property, Object.Method. Є ряд вбудованих об'єктів (Request, Response, Session, Server, Connection, Recordset). Можна доустанавливать інші компоненти (завантажувати, купувати, програмувати), наприклад для роботи з електронною поштою.
Поняття "екран", куди можна виводити дані немає. Все, що треба показати користувачеві, викидається у вихідний потік мовою HTML. Браузер користувача інтерпретує цей HTML. Для спрощення виведення існує об'єкт Response. Висновок здійснюється за допомогою методу Write.
Так робиться запис у внутрішній буфер об'єкта Response. Коли скрипт закінчує роботу, весь буфер видається клієнтові. Треба зауважити, що клієнт отримує "чистий" HTML, таким чином програми на ASP не залежить від клієнтського ПЗ, що дуже важливо. Якщо всередині рядка, що виводиться потрібно використовувати лапки, лапки подвоюється. Інші методи і властивості Response дозволяють управляти висновком. Так Response.Buffer регулює, чи одержує клієнт дані в міру із запису в Response, або все відразу по завершенні виконання сторінки. Метод Response.Redirect перенаправляє браузер на іншу сторінку. Щоб їм користуватися, не можна до нього на сторінці використовувати Response.Write.
Програма на ASP не може явно запитати користувача про щось. Вона отримує дані з інших сторінок, або через URL. Передані параметри містяться у вхідний потік і доступні через об'єкт Request. Щоб передати змінну var в програму test.asp. треба написати:
Щоб з програми отримати значення цієї змінної, треба написати:
Кілька змінних розділяється знаком :
Крім того, щоб задавати параметри в URL, можна скористатися формами HTML. У зухвалій сторінці пишемо так:
Так це виглядає:
При цьому користувач побачить форму з одного поля введення (var1), в ньому буде значення за замовчуванням "default". Друге поле (var2) буде невидимо і буде передавати завжди фіксоване значення "var2value". Кнопка "Submit Form" завершує заповнення форми і передає всі змінні на test.asp (action). Якщо method = "get", змінні передаються через URL (test.asp? Var1 = defaultvar2 = var2value). Якщо method = "post", передаються разом із запитом так, що зовні передача змінних не помітна. У спричиненої програмі байдуже, який метод ізпользовался (майже). Якщо у вас немає спеціальних аргументів за метод GET, використовуйте метод POST.
Форми HTML використовуються для організації діалогу з користувачем. Підтримуються стандартні елементи управління. Все різноманіття задається деякими тегами:
- INPUT (з параметром TYPE =)
- SELECT
- TEXTAREA
Опис - в документації по HTML.
Взаємозв'язок між окремими сторінками
Зазвичай сервер WWW не зберігає стан додатка, тобто всі запити взаємонезалежні, і немає стандартного способу зрозуміти, що кілька запитів прийшли від одного і того ж користувача. Але це дуже потрібно для розробки повноцінних додатків і є однією з головних проблем розробки Web-додатків.
Один з методів вирішення цієї проблеми - cookies. Користувачеві при першому зверненні видається спеціальний ідентифікатор, після цього браузер користувача пред'являє цей ідентифікатор при кожному зверненні, і сервер може розпізнати, що це той же самий користувач. Користувач може відключити cookies, в цьому випадку цей метод не працює.
ASP, використовуючи cookies, надає програмісту більш простий засіб - об'єкт Session (сесія). Сесія стартує, коли новий користувач звертається до будь-якого asp-файлу програми. Сесія закінчується при відсутності активності користувача протягом 20 хвилин, або по явній команді. Спеціальний об'єкт Session зберігає стан сесії. Туди можна записувати змінні, які доступні з будь-якої сторінки в цій сесії. Записати дані в цей об'єкт можна просто:
Вважати потім ще простіше:
Сесія, таким чином, - це ще один метод передачі даних між сторінками. Одна сторінка пише дані в сесію, інша - бере потім звідти.
Поряд з об'єктом Session існує об'єкт Application. Якщо сесія створюється для кожного нового користувача, до Application існує в єдиному екземплярі, і може використовуватися всіма сторінками додатка.
Програмісту надається можливість реагувати на 4 події: старт / стоп додатка і старт / стоп кожної сесії. Для реалізації цих подій призначений файл global.asa. який повинен розташовуватися в кореневому каталозі програми. Ось його приблизний скелет:
Потрібно "просто" вписати Ваш код на відповідне місце. Потрібно зауважити, що налагоджувати код для global.asa досить непросто, так як він виконується при дуже специфічних обставин (наприклад при старті або зупинці сервера).
Використання зовнішніх компонент
Якщо на сервері встановлені додаткові компоненти, їх можна використовувати з ASP. Стандартні об'єкти (наприклад з бібліотек ADO (Connection і Recordset) і Scripting (Dictionary, FileSystemObject)) доступні завжди. Установка нової компоненти зазвичай складається в копіюванні dll-файлу в каталог на сервері і її реєстрації за допомогою програми regsvr32.exe. [В COM + використовується своя процедура інсталяції об'єктів, це однак не впливає на використання об'єктів.]
Створити екземпляр об'єкта можна так:
Будь ласка завжди обнуляє всі посилання на об'єкти, коли вони більше не потрібні. Теоретично це повинно відбуватися автоматично при завершенні процедури / сторінки, проте в стандартній зборці сміття є певні "проблеми".
В іншому використання компоненти залежить від самої цієї компоненти.
Робота з базами даних
З ASP можна легко і просто працювати з будь-якими базами даних. Це робиться через дві проміжні технології: ODBC і ADO.
ODBC дозволяє організувати доступ до будь-яких баз даних через уніфікований інтерфейс за допомогою мови SQL. Специфіка конкретних СУБД враховується за допомогою спеціальних драйверів БД. Такі драйвери існують для всіляких СУБД (зокрема SQL Server, Oracle, Access, FoxPro). Підтримка ODBC забезпечується на рівні операційної системи Windows (NT). Налаштування - через Control Panel / ODBC. Базовим поняттям є джерело даних або data source. Джерело даних - це сукупність відомостей про базу даних, включаючи її драйвер, ім'я комп'ютера і файлу, параметри. Щоб користуватися базою треба створити джерело даних для неї. Важливо, щоб джерело даних був "системним", на відміну від "користувацького". Після цього треба лише знати ім'я джерела даних. [В даний час ODBC відступає перед натиском технології OLE DB. На практиці це однак практично нічого не змінює. Замість імені джерела даних потрібно використовувати Connection String, в якій вказується ім'я ODBC-драйвера і все його параметри.]
ADO - це сукупність об'єктів, доступних з ASP, що дозволяють звертатися до джерела даних ODBC [або OLE DB]. Фактично потрібні лише 2 об'єкти - Connection. представляє з'єднання з базою даних і Recordset. представляє набір записів, отриманий від джерела. Спочатку необхідно відкрити з'єднання, потім до нього прив'язати Recordset, потім, користуючись методами Recordset'а, обробляти дані. Ось приклад:
Якщо команда SQL не повертає даних, recordset не потрібен, треба користуватися методом Conn.Execute (SQL_COMMAND).
Якщо Ви хочете викликати збережені процедури сервера БД з параметрами, потрібно скористатися об'єктом Command. який в свою очеред містить об'єкти Parameter.
Методики програмування, поради
VBScript - дуже невибагливий до програміста мова. Так він не вимагає описувати змінні й не містить явних типів даних. Всі змінні належать одному типу Variant. Через відсутність описів можуть відбутися дуже важко виявляються помилки. Одна помилка може коштувати півдня пошуків.
Однак, є можливість явно зажадати описи змінних. Для цього першим рядком в ASP-файлі потрібно написати Option Explicit. Після цього звернення до змінної, яку не було визнано за допомогою Dim. викликає помилку із зазначенням номера рядка.
До речі, де розташовані описи Dim у процедурі - зовсім не важливо. Вони можуть стояти як до використання змінної, так і після, і навіть в циклі. Мабуть вони відпрацьовуються препроцесором. Явно задати тип змінної за допомогою Dim Var as Typ. як в Visual Basic, все одно не можна.
Якщо потрібно видати великий шматок HTML, можна не користуватися Response.Write. Якщо в asp-файлі зустрічається шматок тексту поза дужками <% %>, він трактується просто як HTML, який треба вивести. приклад:
Для відстеження помилок використовується спеціальний об'єкт Err. Він встановлюється в нульове значення, якщо попередня команда породила помилку. Її можна перевіряти за допомогою If, і таким чином реагувати на помилки. Щоб через помилку не припинявся виконання програми, на початку потрібно включити команду
Включення інших файлів
Можна виносити повторюваний код в окремий файл, і підключати до різних інших в міру необхідності за допомогою команди include. Це дуже зручно, якщо ви хочете винести повторюваний код в окремий файл і використовувати знову і знову в різних сторінках:
Важливо: всі includes в тексті відпрацьовуються до виконання файлу. Тобто навіть якщо include коштує усередині if, то спочатку будуть включені всі includes у всіх гілках, і тільки потім, під час виконання, буде принятно рішення, яку гілку виконувати. Тобто Наступного код не дає умовного включення файлів:
Якщо треба щось запитати у користувача і на підставі цього щось зробити, в найпростішому випадку створюється два файли: один з формою, другий - з її оброблювачем. Оброблювач виконує всі дії. приклад:
Рекурсивна обробка форм
Зручний метод полягає в тому, щоб збір даних і обробку здійснював один і той же файл. Для цього пишеться asp, в якому є різні розділи. Спеціальна змінна відповідає за вибір розділу при запуску. приклад:
Тільки треба стежити, щоб до виконання команди redirect нічого не було записано в Response (навіть коментарии HTML).
Одна з найпоширеніших завдань - відправити електронну пошту з Web-сторінки. На перший погляд, можна просто написати
Але це призводить до того, що при відправці форми робиться спроба на клієнтській машині запустити поштову програму і створити нове повідомлення з даними форми. Якщо це не виходить (поштова програма не настроєна, користувач не відправив пошту, і т.д.) - лист і не буде відправлено. Набагато надійніше працює серверне рішення.
Ця добірка складена швидше випадковим чином, з сайтів, на які я натикався в певний час.