ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    HTML і бази даних
         

     

    Інформатика, програмування


    Кафедра математичної статистики і економетрики

    Курсова робота

    По курсу:

    "Математична статистика"

    " HTML і бази даних "

    Група: ДІ 302

    Студент: Шеломанов Р.Б.

    Студент: Мельников А.А

    Керівник: Шевченко К.К.

    Москва 1999

    Зміст

    Введення. 3

    Internet - інтеграція технологій 3

    Цілі і завдання проекту 6

    Форми в HTML 7

    ISAPI програми 16

    Вихідний код ISAPI модуля на мові Delphi 4 17

    Бібліографічний список. 24

    Введення.

    Свою роботу я вирішив офрміть у вигляді проекту. У ній крім теоріїприсутній приклад програмного проекту, важко назвати по іншомуоб'єднання HTML коду і коду мови програмування. Проекту це створеннясервер містить базу даних товарів «народного споживання», якийчерез Internet-броузер отримує від віддаленого користувача запити,обслуговує їх і відправляє відповідь користувачеві у вигляді HTML сторінок.

    Одразу зазначу, що дана робота розрахована на читача вжещо має досвід роботи в Інтернеті, що представляє собі що таке HTMLдокумент, знайомого з самим мовою гіпертекстової розмітки, а такожщо має навички програмування в сучасних об'єктно - орієнтованихзасоби розробки додатків. Тому описувати всі специфікації HTMLмені не видається за потрібне. Знову ж таки, в цій роботі ви не знайдетеопису HTML, а тільки тій його частині, яка присвячена роботі з формами ів деякій мірі проектування таблиць. Що стосується програмування,я не буду заглиблюватися в опис програмної логіки проекту, описуватипризначення всіх процедур і функцій мого модуля, а тільки зупинюся наможливості створення ISAPI/NSAPI додатків, тому що основна мета проектуце показати можливості використання HTML для взаємодіїкористувача і віддаленій базі даних.

    Свій проект я побудував таким чином:

    У теоритического частині я викладу основи технологій використаних вроботі. Це форми HTML, побудова ISAPI/NSAPI модулів в середовищі розробкидодатків DELPHI 4.0. А в практичній, відповідно, вихідний кодпрограми і код HTML документів.


    Internet - інтеграція технологій

    В останні кілька років можна було помітити бурхливе зростання кількостікористувачів глобальної комп'ютерної мережі Інтернет в Росії. Значнозбільшилося число інтернет провайдерів. Завдяки створенню «домашніх»комп'ютерних мереж в деяких районах Москви стало можливим якіснепідключення до Інтернету за невеликі гроші Всі ці заходи були покликанізадовольнити всі зростаючі потреби суспільства в інформації, і кращимджерелом цієї інформації стала всесвітня глобальна комп'ютерна мережа -
    Інтернет Зараз я хотів би сказати кілька слів про те що ж являєсебе Інтернет.

    З технічної точки зору Internet - це об'єднаннятранснаціональних комп'ютерних мереж, що працюють по різних протоколах,що зв'язують різні типи комп'ютерів, фізично передають дані повсіх доступних типах ліній - від витої пари і телефонних проводів дооптоволокна і супутникових каналів. Більша частина комп'ютерів в Internetпов'язане по протоколу TCP/IP. Можна сказати, що Internet-це мережа мереж,обплутують всю земну кулю.

    Протокол TCP/IP дозволяє передавати інформацію, а його використовуютьрізноманітні мережеві сервіси, по-різному звертаються з цією інформацією.
    Internet не вирішила проблеми зберігання та впорядкування інформації, але вирішилапроблему її передачі, давши можливість отримувати її коли і де завгодно.
    Оскільки Мережа (тут і далі Мережа-з великої літери-означатиме
    Internet) децентралізована, то відключення навіть значної частиникомп'ютерів не вплине на її функціональність. За оцінками аналітиків, у
    1995 число повноцінно підключених до Мережі комп'ютерів склало близько
    7 мільйонів і продовжує стрімко зростати. За тими ж оцінками, на початкунаступного століття Мережа може стати настільки ж доступна, як телефон аботелебачення сьогодні.

    Як уже згадувалося, в Мережі існує велика кількість сервісів. Нас унадалі буде цікавити WWW або просто Web (Word-Wide Web-всесвітняпавутина). Це самий популярний сервіс Мережі та зручний спосіб роботи зінформацією. Сьогодні існує щонайменше 30 тис. серверів WWW.
    Саме за рахунок WWW Мережа зростає так стрімко. Користуючись нескладним мовоюопису, можна складати гіпермедійний документи для їх подальшогопублікації в Мережі (під гипермедийным я маю на увазі документ, який можемістити всі види інформації - від простого тексту до мултімедійнихроликів). Щоб побачити зміст документа так, як його уявляє собійого автор потрібно мати на комп'ютері-клієнті програму перегляду-браузер.
    Найбільш популярні сьогодні Internet Explorer і Netscape Navigator,підтримують багато розширення HTML (Hyper Text Markup Language-мовагіпертекстової розмітки документів - саме з його допомогою оформляєтьсяінформація в WWW). Далі під словами браузер або програма перегляду я будуна увазі саме ці програми.

    Як я вже сказав вище Мережа найвищою мірою зобов'язана своєюпопулярністю службі WWW. Саме з цією службою у багатьох асоціюєтьсяпоняття Інтернет. WWW-це простота доступна навіть дитині, наочність іширокі можливості надання інформації, можна навіть відзначити такийкритерій як видовище, тому що багато WWW документи являють собоювитвір дизайнерського та художнього мистецтва.

    Тепер трохи інформації про технології «клієнт-сервер». Вона відомавже досить тривалий час, але раніше найчастіше використовувалася ввеликих мережах масштабу підприємства. Сьогодні, з розвитком Internet, цятехнологія все частіше приваблює погляди розробників програмногозабезпечення. Її можна представити так:клієнт формує і посилає запит до бази даних сервера, точніше - допрограмі, яка обробляє запити.ця програма проводить маніпуляції з БД, що зберігається на сервері, взгідно із запитом, формує результат і передає його клієнту.
    Клієнт отримує результат, відображає його на дисплеї і чекає подальшихдій користувача. Цикл повторюється, поки користувач не закінчитьроботу з сервером.

    У світі накопичено величезну кількість інформації з різних питань.
    Найчастіше ця інформація зберігається в базах даних (БД). Щоб опублікуватиїї в Мережі доводилося експортувати БД в HTML-документи, що вимагаловеликих витрат і ускладнювало пошук інформації. Сьогодні є великий досвідподібних робіт. Практично будь-який користувач Мережі не раз стикався зподібними БД. Наприклад, головне в роботі популярного пошукового сервера
    Altavista (адреса-http::www.altavista.com) - це запити до бази даних WWW-сервера за ключовими словами. Відповідь сервера-список гіпертекстових посилань назнайдені в Мережі сторінки, що містять потрібну інформацію. Аналогічнийприклад: коли ми шукаємо іформацію про ціни на що-небудь у Іітернете то мимаємо справу з базою даних, наприклад сервер www.prices.ru Саме сьогодніпроблема Web-інтерфейсу до БД як ніколи актуальна. І саме цю проблемуя хотів би висвітлити в своїй роботі.

    Цілі і завдання проекту

    Даний ескіз показує, як працює система загалом. Конкретно всізалежить від того, де знаходиться клієнт, сервер, як клієнт під'єднаний досервера. Користувач на клієнтському комп'ютері в програмі переглядузаповнює запропоновану форму або вибирає подальшу дію. Браузер понатискання однієї з кнопок у формі пересилає дані із заповненої форми абовідображає знову отримані в результаті якої-небудь операції. Не важливо, доякий з мереж підключений клієнт (він навіть може бути віддаленим користувачемі з'єднатися по модему). Програма приймає дані, перевіряє їх іформує запит (запитом називається будь-яка дія яке користувачпропонує здійснити БД) до монітора БД або отримує від нього результат.
    Отримавши запит, монітор опрацьовує його. Якщо не відбулося помилок, чекаєзапиту від програми на відправку програмі результату. На диску серверазберігається БД, модифікується по запиту клієнта.

    Форми в HTML

    Для того, щоб користувач міг сформувати і відправити запитсервера через HTML документ, використовуються так звані форми введення. Цеблок документа HTML ув'язнений в тегах містить різнітекстові поля і кнопки відправлення і служить для формування і відправкисерверу запиту користувача. Форми мають наступний синтаксис

    зміст форми, включаючи елементи INPUT і, можливо, елементи TEXTAREA і
    SELECT

    де:
    | ім'я | можливі | Сенс атрибута | примітки |
    | атрибут | значення | | |
    | а | | | |
    | ACTION | URL | адреса сервера, | сервер HTTP або URL |
    | | | Який використовує | |
    | | | Форма | |
    | METHOD | GET, POST | метод передачі | за замовчуванням - GET |
    | | | Даних, отриманих | |
    | | | Від користувача, на | |
    | | | Сервер | |
    | ENCTYPE | рядок | механізм, | за замовчуванням програма |
    | | | Використовується для |/x-www-form-url-кодірова |
    | | | Кодування | ня |
    | | | Вмісту форми | |


    У змісті форми ми можемо мати такі поля:
    Є деякі елементи, які можуть з'явитися тільки в межах елемента
    FORM. Зокрема:

    INPUT - поля введення у формах
    Мета даного поля специфікувати в межах форми вступні поля:одностроковие текстові поля, поля пароля, перемикачі, радіокнопки,кнопки відсилання і перезавантаження, приховані поля, вивантаження файлу, кнопкизображення і т.д.
    Типове відображення
    Змінюється відповідно до типу поля.
    Основний синтаксис

    Можливі атрибути
    | ім'я | можливі | сенс | примітки |
    | атрибута | значення | | |
    | TYPE | TEXT, PASSWORD, | тип поля для введення | за замовчуванням |
    | | CHECKBOX, RADIO, | | TEXT |
    | | SUBMIT, RESET, | | |
    | | FILE, HIDDEN, | | |
    | | IMAGE | | |
    | NAME | рядок | ім'я для ідентифікації | потрібно для |
    | | | Поля, коли його | всіх атрибутів, |
    | | | Вміст передається | крім SUBMIT і |
    | | | Сервера | RESET |
    | VALUE | рядок | початкове | обов'язковий, |
    | | | Значення введеного | якщо TYPE = |
    | | | Поля; для атрибутів | RADIO або |
    | | | SUBMIT або RESET - | CHECKBOX |
    | | | Текстова мітка | |
    | CHECKED | встановлений | коли TYPE = RADIO або | |
    | | | CHECKBOX, | |
    | | | Ініціалізує поле до | |
    | | | Встановленому | |
    | | | Станом | |
    | SIZE | ціле | видимий розмір поля; | |
    | | | Кількість символів | |
    | MAXLENGT | ціле | максимальне | за замовчуванням не |
    | H | | кількість символів, | обмежено |
    | | | Дозволених до | |
    | | | Текстовому полі | |
    | SRC | URL | адресу зображення | для полів з |
    | | | | Фоновими |
    | | | | Зображеннями |
    | ALIGN | TOP, MIDDLE, | вирівнювання | за замовчуванням |
    | | BOTTOM, LEFT, | зображення для | BOTTOM |
    | | RIGHT | графічних | |
    | | | Керуючих кнопок | |


    Різні значення атрибуту TYPE відповідають різним видам ввіднихполів.
    TYPE = TEXT (тип = текст - за замовчуванням)
    Одностроковое текстове поле, чий видимий розмір може бути встановленийатрибутом SIZE, наприклад, SIZE = 40 для 40-символьного поля. Користувачіможуть вводити і більше символів, ніж це обмеження, але з текстовимскролінгом (гортання) поля, щоб курсор введення залишався видимим. Виможете задати верхню межу кількості символів атрибутом MAXLENGTH.
    Атрибут NAME використовується для найменування поля, а атрибут VALUEініціалізує текстовий рядок у полі, коли документ вперше завантажений.
    Зауважимо, що текстовий введення обмежений одним рядком. Використовуйте елемент
    TEXTAREA, щоб визначити многостроковие текстові поля.
    Приклад:

    TYPE = PASSWORD (тип = пароль)
    Цей тип подібний TYPE = TEXT, проте всі Зауважте, що ви представляються увигляді *, щоб приховати текст від підглядають очей, коли вводиться пароль.
    Ви можете використовувати атрибути SIZE і MAXLENGTH, щоб керувати видимої імаксимальної довжинами поля точно так само, як для звичайного текстового поля.
    Приклад:

    TYPE = CHECKBOX (тип = полі установки - перемикач)
    Використовується для простих бульових атрибутів (тобто атрибутів, які приймаютьзначення ІСТИНА або ЛОЖЬ) або для атрибутів, які одночасно можутьприймати безліч значень. Кожне заповнене переключательное полегенерує окрему пару ім'я/значення в формованих даних, навіть якщо цепризводить до дублювання імен. Використовуйте атрибут CHECKED для ініціалізаціїполя установки за умовчанням.
    Приклад:

    TYPE = RADIO (тип = радіокнопки)
    Використовується для атрибута, який може приймати єдине значення змножини. Кожне поле радіокнопки в групі повинно бути задано тільки однимзначенням атрибуту NAME. Радіокнопки вимагають явного атрибуту VALUE.
    Єдина натиснута радіокнопки в групі генерує пару ім'я/значення вформованих даних. Одна радіокнопки в групі атрибутом CHECKED повинна бутипопередньо встановлена за замовчуванням.
    Приклад:

    TYPE = SUBMIT (тип = відсилання)
    Визначає кнопку, яку користувач може натиснути, щоб передативміст форми сервера. Позначка встановлюється атрибутом VALUE. Якщоатрибут NAME заданий, то пара найменування/значення для виконуваної кнопкибуде включена до передані дані. Ви можете включити кількавиконуваних кнопок у форму. Дивіться TYPE = IMAGE для графічних виконуванихкнопок.
    Приклади:

    TYPE = RESET (тип = перезавантаження)
    Визначає кнопку, яку користувач може натиснути, щоб повернути поляформи до початкового стану, коли документ був вперше завантажений. Ви можетевстановити мітку за допомогою атрибуту VALUE. Кнопки перезавантаження ніколи ненадсилаються як частина вмісту форми.
    Приклад:

    TYPE = FILE (тип = файл)
    Цей тип дає можливість користувачам прикріпити файл до вмістуформи. Елемент зазвичай відображається, як текстове поле з кнопкою, принатисканні на яку з'являється файловий броузер для відбору імені файлу. Назвафайлу також може бути введено прямо в текстовому полі.
    Таким же чином, як для TYPE = TEXT, для TYPE = FILE можна використовуватиатрибут SIZE, щоб встановити видиму ширину поля. Ви також можетевстановити верхню межу для довжини імені файлу, використовуючи атрибут
    MAXLENGTH. Деякі програми перегляду підтримують здатністьобмежувати види файлів, які можуть бути прикріплені до форми,перерахуванням розділяється комами список файлів з вмістом типу MIME,що задається атрибутом ACCEPT. Наприклад, ACCEPT = "image/*" обмежить файлизображеннями. Додаткова інформація може бути знайдена в RFC 1867.
    Приклад:

    TYPE = HIDDEN (тип = прихований)
    Цей тип поля не відображається користувачеві. Приховане поле дає можливістьдля серверів зберігати інформацію про стан разом з формою. Коли форма
    "виконується" при натисканні відповідної кнопки, серверу буде переданапари ім'я/значення, визначена з використанням відповідних атрибутів.
    Цей тип створює робоче оточення для повноти можливостей HTTP і єальтернативою для використання так званої HTTP cookies.
    Приклад:

    TYPE = IMAGE
    Використовується для графічних кнопок відсилань, що відображаються зображенням. URLдля зображень специфікується атрибутом SRC. Вирівнювання зображенняможе бути специфікована атрибутом ALIGN. У цьому відношенні графічнікнопки відсилання ідентичні елементів IMG (так, Ви можете встановити для ALIGN
    - LEFT, RIGHT, TOP, MIDDLE або BOTTOM). Атрибути NAME і VALUE трактуютьсяточно також, як текстові кнопки відсилання і повинні бути задані длязабезпечення роботи неграфіческіх програм перегляду.
    Приклад:

    Допустимий контекст
    Текстовий контейнер, тобто будь-який елемент, який може містити текстовіелементи. Включає більшість елементів HTML. Текстовий контейнер можез'явитися в межах елемента FORM.
    Вміст
    Ніяке.
    Приклади

    Примітки
    Використання INPUT для введення тексту обмежено одностроковимі полями.
    Використовуйте TEXTAREA, щоб визначити многостроковие текстові поля.

    SELECT (ВИБРАТИ) - меню вибору у формі
    Мета
    Специфікація в межах форми: меню, з якого користувач може вибратиодин або декілька елементів.
    Типове відображення
    Меню вибору, яке може бути "активізовано" деякими залежних відброузера чином; зазвичай в графічних броузерах це означає спадаючеменю. В залежності від броузера всі варіанти вибору можуть бути видиміодночасно або користувач може переглядати елементи меню.
    Основний синтаксис

    елементи OPTION


    Можливі атрибути
    | ім'я | можливі | сенс | примітки |
    | атрибута | значення | | |
    | NAME | рядок | ім'я, яке | обязателен; кожна |
    | | | Використовується для | відібрана опція |
    | | | Ідентифікації | утворює пару |
    | | | Вибору меню, коли | ім'я/значення, що включається |
    | | | Форма передається | у вміст форми |
    | | | Сервера | |
    | SIZE | ціле | встановлює | використовується, коли |
    | | | Число одночасно | задано MULTIPLE |
    | | | Видимих опцій | |
    | MULTIPLE | MULTIPLE | означає, що | за замовчуванням дозволено |
    | | | Користувач може | тільки один вибір |
    | | | Зробити | |
    | | | Множинний | |
    | | | Вибір з меню | |


    Допустимий контекст
    Текстовий контейнер, тобто будь-який елемент, який може містити текстовіелементи. Це включає більшість елементів HTML. Однак, текстовийконтейнер може з'явитися тільки в межах елемента FORM.
    Вміст
    OPTION елементи.
    Приклади
    Приклад:


    Vanilla
    Strawberry
    Rum and Raisin
    Peach and Orange

    Примітки
    Дивіться обговорення форми.
    Як альтернативу SELECT, Ви можете використовувати елемент INPUT з
    TYPE = CHECKBOX або TYPE = RADIO, який при відображенні дозволяєкористувачеві побачити всі варіанти відразу.

    TEXTAREA - багаторядкові поле текстового вводу у формі
    Мета
    Специфікувати в межах форми область для багато -призначеного для користувача введення.
    Типове відображення
    Область вводу, що з'являється у вигляді окремого прямокутника, можливо,що має свій фоновий колір і звичайно зі скролінгом деякого типу як ввертикальному, так і в горизонтальному напрямку. Область ініціалізованийвмістом елемента TEXTAREA, що використовують однорозмірних шрифт.
    Основний синтаксис

    текст


    Можливі атрибути
    | ім'я | можливі | сенс | примі |
    | атріб | є | | чанія |
    | УТА | значення | | |
    | NAME | рядок | ім'я, яке використовується для ідентифікації поля | зобов'язань |
    | | | З текстовим вмістом, коли форма передається | тельно |
    | | | Сервера | о |
    | ROWS | ціле | кількість ліній видимого тексту | зобов'язань |
    | | | | Тельно |
    | | | | О |
    | COLS | ціле | число, що задає видиму ширину тексту | зобов'язань |
    | | | | Тельно |
    | | | | О |


    Програма перегляду не повинна інтерпретувати атрибути ROWS і COLS, якобмежують розмір дійсного введення. Браузер повинен надатидеякі засоби скролінгу вмісту області тексту, що вводиться, колийого розмір виходить за межі видимої області.
    Браузер може перенести рядок видимого тексту, щоб укластися в довжинурядка видимого тексту без скролінгу.
    Допустимий контекст
    Текстовий контейнер, тобто будь-який елемент, який може включати текстовіелементи. Це включає більшість елементів HTML. Однак, текстовийконтейнер може з'являтися тільки в межах елемента FORM.
    Вміст
    Рядок. Escape послідовність дозволена, однак ніякі теги нерозпізнаються.
    Вміст використовується для ініціалізації тексту, який виводиться уввідному поле при першому завантаженні документа.
    Приклади

    Your address here ...

    Примітки
    Дивіться обговорення форм.
    Для однострокового поля введення можна використовувати елемент з INPUT TYPE = TEXT.


    Форма буде правильно працювати лише в тому випадку, якщо всі вищевказаніполя укладені між тегами і кожному текстовому полюобов'язково має бути присвоєно ім'я NAME =..
    Ось так форма відображається в браузері.
    А от HTML код цієї форми


    Сервер "Електронний магазин"
    Залиште ваше повідомлення


    Введіть Вашу адресу електронної пошти


    Введіть Ваші побажаннятут

    При натисканні кнопки «Введення» відбувається подія SUBMIT та змісттекстових полів цієї форми відправляється за адресою який вказаний в ACTIONвластивості форми action = "/ Scripts/test/webshop.dll/addmsg. В даному випадкуадреса вказує на динамічну бібліотеку webshop.dll завантажену насервер і цій бібліотеці передається команда addmsg тобто отримати зтекстового поля саме повідомлення користувача, адресу його електронної поштиі записати ці дані в якій або файл на сервері. Повний вид запитупосилається серверу має такий вигляд:http://shop.com/Scripts/test/webshop.dll/addmsg?sender=xxx @ xxx & message = ccc
    , Де xxx і ссс зміст відповідних полів текстової форми. Якщовідкинути адреса сервера, запит має вигляд командного рядка DOSwebshop.dll/addmsg? sender = xxx @ xxx & message = ccc Бібліотека webshop.dll
    -Називається ISAPI додатком (ISAPI - Internet Services API). Самеогляду інтерфейсу ISAPI буде присвячена наступна глава.


    ISAPI програми

    Місце програмування в публікації даних таке. Прийомом іобробкою запитів від клієнтів займається WEB сервер. Більша частинасерверів Internet працює під управлінням UNIX і популярного на ційплатформі сервера Apache, зростає популярність платформи Windows NT Server ісервера Microsoft Internet Information Server. Сервер реалізує підтримкупротокала HTTP, приймаючи від браузерів клієнтів запити і видаючи їм у відповідьті чи інші WWW сторінки. Але всіх можливих запитів не передбачиштому після після отримання запиту сервер передає управління WEB
    -Інтерфейсу БД (модулю розширення). Найчастіше ці модулі розширенняназивають сценаріями або скриптами (scripts). Завдання такого скрипта --обробити запит, витягти з бази даних або іншого зовнішнього джерелапотрібну інформацію, оформити її у вигляді HTML документа і передати її назадсервера, який візьме на себе працю відправити її браузеру клієнтів.

    Першим і загальноприйнятим інтерфейсом для створення модулів розширенняє CGI (Common Gateway Interface), поширений в Unix.
    Улюбленим мовою написання CGI скриптів є PERL, хоча можна писатиі на С, Basic і Delphi.

    Microsoft забезпечила свій сервер Internet протоколом для взаємодії змодулями розширення ISAPI (ISAPI - Internet Services API), за якимскрипт являє собою динамічну бібліотеку, що завантажується сервером іщо працює з ним в одному адресному просторі. Бібліотека повиннаекспортувати цілком певні функції (їх три: GetExtensionVersion,
    HttpExtensionProc, TerminateExtension), які і будуть викликатися сервером
    . Одна бібліотіка може обробляти скільки завгодно запитів.

    Приклад сгенеренной ISAPI модулем HTML сторінки, яка видає відповідь назпрос:

    Вихідний код ISAPI модуля на мові Delphi 4

    unit webshopunit;

    interface

    uses
    Windows, Messages, SysUtils, Classes, HTTPApp, DBWeb, Db, DBTables;

    type
    TWebModule1 = class (TWebModule)

    GroupQuery: TQuery;

    WebSession: TSession;

    StoreQTP: TQueryTableProducer;

    GroupQueryMainGroup: TIntegerField;

    GroupQuerySubGroup: TIntegerField;

    GroupQueryGroupName: TStringField;

    StoreQuery: TQuery;

    ValidateQuery: TQuery;

    AddMsgQuery: TQuery; procedure WebModule1GetGroupAction (Sender: TObject;

    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure WebModule1Create (Sender: TObject); procedure StoreQTPFormatCell (Sender: TObject; CellRow,

    CellColumn: Integer; var BgColor: THTMLBgColor; var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,

    CellData: String); procedure WebModule1Destroy (Sender: TObject); procedure WebModule1ValidateAction (Sender: TObject;

    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure StoreQTPGetTableCaption (Sender: TObject; var Caption: String; var Alignment: THTMLCaptionAlignment); procedure WebModule1AcceptOrderAction (Sender: TObject ;

    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); procedure WebModule1SearchAction (Sender: TObject; Request: TWebRequest;

    Response: TWebResponse; var Handled: Boolean); procedure WebModule1AddMSgAction (Sender: TObject; Request: TWebRequest;

    Response: TWebResponse; var Handled: Boolean); private

    ScriptName: String;

    (Private declarations ) public

    (Public declarations) function GroupListProducer (Query: TQuery; Kind: Integer): string; function CreateGroupList (Gr1, Gr2, Kind: Integer): string; end;

    var
    WebModule1: TWebModule1; resourcestring sOrderAccepted = 'Tр ° чр'рч єеях ° ею яЕше Є'; sContent = '+ уиртихешх';

    implementationuses inifiles;
    ($ R *. DFM) var HTMLPath, TemplatesPath, DBAliasName, iniName, CommonLook, CommonEnd: string;

    UserStatus: Integer; csect: TRTLCriticalSection;

    procedure TWebModule1.WebModule1Create (Sender : TObject);var ini: TINIFile;
    FN: array [0 .. MAX_PATH-1] of char; s1, s2: string; fs: TFileStream; bgpath, txtcol, lcol, vcol, acol: string;begin
    GetWindowsDirectory (FN, SizeOf (FN)); s1: = StrPas (fn);
    GetModuleFileName (hInstance, FN, SizeOf (FN)); s2: = ExtractFileName (StrPas (fn)); if not (Char (s1 [Length (s1)]) in ['/','']) then AppendStr (s1 ,'/');

    if Pos ('.', s2) 0 then s2 : = Copy (s2, 1, Pos ('.', s2) -1); iniName: = s1 + s2 + '. ini'; ini: = TINIFile.Create (iniName);

    HTMLPath: = ini.ReadString ( 'Paths', 'HTMLPath', '/ test');
    TemplatesPath: = ini.ReadString ( 'Paths', 'TemplatesPath', s1);
    DBAliasName: = ini.ReadString ( 'Paths', 'DBAliasName', 'webtest');

    if Assigned (WebSession) and WebSession.IsAlias (DBAliasName) then begin

    GroupQuery.DatabaseName: = DBAliasName;

    StoreQuery.DatabaseName: = DBAliasName;

    ValidateQuery.DatabaseName: = DBAliasName; end;

    bgpath: = ini.ReadString ( 'Design', 'Background', 'imgsand.jpg'); txtcol: = ini.ReadString ( 'Design', 'text', 'black'); lcol: = ini.ReadString ( 'Design', 'link', 'blue'); acol: = ini.ReadString ( 'Design', 'alink', 'aqua'); vcol: = ini.ReadString ( 'Design', 'vlink', 'aqua'); ini.Free;

    CommonLook: = Format ('',

    [HTMLPath, bgpath, txtcol, lcol, acol, vcol]);
    CommonEnd: ='';end;

    procedure TWebModule1.WebModule1Destroy (Sender: TObject);begin
    ;end;

    function TWebModule1.GroupListProducer (Query: TQuery; kind: Integer):string;var s: string; gn1, gn2: Integer;begin with Query do try

    Open;

    Result: ='';

    First; while not Eof do begin gn1: = Query.Fields [0] . AsInteger; gn2: = Query.Fields [1]. AsInteger; if Gn2 = 0 then s: =''else s: = IntToStr (Gn2);

    Result: = Result + Format ( '% d.% s% s ',

    [Request.ScriptName, gn1, gn2, Kind, gn1, s, Query.Fields [2]. AsString ]);

    Next; end; finally

    Close; end;end;

    function TWebModule1.CreateGroupList (Gr1, Gr2, Kind: Integer): string;var fs: TFileStream; i: Integer;begin
    Result: =''+ sContent +''; with GroupQuery do begin if Gr1 = 0 then

    SQL.Text: = 'SELECT * FROM Groups WHERE SubGroup = 0' else

    SQL.Text: = Format ( 'SELECT * FROM Groups WHERE (MainGroup =% d) and
    (SubGroup> 0) ', [Gr1]); try

    Result: = Result + GroupListProducer (GroupQuery, Kind); if Gr10 then

    Result: = Result + Format (' TхЕеєЄ № е ъ юуиртихеш |',

    [Request.ScriptName, 0,0, Kind]); except on E: EDBEngineError do begin

    Result: = Result + '+ ° шс'р BDE'+''; for i: = 0 to E. ErrorCount -1 do

    Result: = Result + E. Errors [i]. Message +''; end; end; end; < br> Result: = Result + '| юшеъ'

    + CommonEnd;end;

    // QueryAction - GetGroup тvтюф ЄрсышЎv яю Єют.уЕєяяхthreadvar OperKind: Integer;

    procedure TWebModule1.WebModule1GetGroupAction (Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var gn1, gn2: Integer; OrderCol: THTMLTableColumn;begin with Request.QueryFields do begin gn1: = IndexOfName ( 'Kind'); if (gn10) then OperKind: = StrToIntDef (Values [ 'Kind'], 0); if gn1> = 0 then Delete (gn1); gn1: = StrToIntDef (Values [ 'Gr1'], 0); gn2: = StrToIntDef (Values [ 'Gr2'], 0); end;// with if gn1 = 0 then Response.Content: =
    CommonLook + CreateGroupList (gn1, gn2, OperKind) else if gn2 = 0 then Response.Content: =
    CommonLook + CreateGroupList (gn1, gn2, OperKind) else begin
    // define group name with GroupQuery do begin

    SQL.Text: = 'SELECT * FROM Groups WHERE (MainGroup =: gn1) and < br>(SubGroup =: gn2 )';

    Params [0]. AsInteger: = gn1;

    Params [1]. AsInteger: = gn2;

    Open ; with StoreQTP do begin

    Header.Clear;

    Header.Add (CommonLook); if OperKind> 0 then begin

    OrderCol: = THTMLTableColumn.Create ( StoreQTP.Columns);

    OrderCol.Title.Caption: = '| р'рч'; end else

    OrderCol: = nil; case OperKind of

    1: Header.Add ('');

    2: Header.Add (''); end;// case

    Header.Add ( '| рЄхуюЕш:
    '+ FieldByName (' GroupName '). AsString +'');

    Close;
    //

    Footer.Clear; if OperKind = 1 then Footer.Add ( 'TЕю' юяирЄv'); if OperKind> 0 then begin

    Footer.Add (''

    +''); end;

    Footer.Add (Format ( 'TхЕеєЄ № е ъ юуиртихеш |',

    [Request.ScriptName, gn1, 0, OperKind ])); end;// with storeqtp end;// with groupquery
    Response.Content: = StoreQTP.Content; if Assigned (OrderCol) then OrderCol.Free; end;// generating tableend;

    procedure TWebModule1.StoreQTPFormatCell (Sender: TObject;
    CellRow, CellColumn: Integer; var BgColor: THTMLBgColor; var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,
    CellData: String); var s: string;begin if (CellRow0) then if (CellRow mod 2 = 0) then BgColor: = 'silver' else
    BgColor: = 'Gray'; if (OperKind> 0) and (CellColumn = 0) and (CellRow> 0) then begin
    CellData: =''
    + CellData; end; if (OperKind> 0) and (CellColumn = StoreQTP.Columns.Count-1) and (CellRow> 0)then begin
    CellData: = '| р'рчрЄ №'; s: =''; end;end;

    procedure TWebModule1.StoreQTPGetTableCaption (Sender: TObject; var Caption: String; var Alignment: THTMLCaptionAlignment);begin
    Caption: = '= рщфхею чряшехщ:' + IntToStr (StoreQTP.Query.RecordCount);end;

    procedure TWebModule1.WebModule1ValidateAction (Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);begin with ValidateQuery do begin
    Params [0]. AsString: = Request.QueryFields.Values [ 'UserName'];
    Params [1]. AsString: = Request.QueryFields.Values [ 'Password']; try
    Open; if RecordCount> 0 then begin

    UserStatus: = FieldByName ( 'UserCategory'). AsInteger;

    Response.Content: = CommonLook + 'Tv єеях ° ею чрЕхушеЄЕшЕютреv' ; if UserStatus> 0 then

    Response.Content: = Response.Content + 'TvсхЕшЄх ЄютрЕеє | уЕєяяє шттхфшЄх чр'рч '+ CreateGroupList (0,0,1) else begin

    Response.Content: = Response.Content +' T ърўхеЄтх рфьшешеЄЕрЄюЕр '

    +' TЄЕрэшЎррфьшешеЄЕрЄюЕр '; end; end else

    Response.Content: = CommonLook +' Tр ° ш фрееvх юЄеєЄеЄтє | Є т срчх.
    + сЕрЄшЄхе № ъ ерь яю рфЕхеє [email protected] '; finally

    Close; end;

    end;

    end;

    procedure TWebModule1.WebModule1AcceptOrderAction (Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);begin
    Response.Content: = CommonLook + sOrderAccepted + CommonEnd;
    //-ри № ° х теЄрт № Єх етющ'юф фы т'и | ўхэш чр'рчр т срчєend;

    procedure TWebModule1.WebModule1SearchAction (Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var s: string;begin s: = Request.QueryFields.Values [ 'Phrase'];
    GroupQuery.SQL.Text: = 'SELECT * FROM Groups WHERE GroupName LIKE
    "% '+ s +'%"';< br> Response.Content: = CommonLook +' | хчєи № ЄрЄv яюше'р '+ s +':'< br> + GroupListProducer (GroupQuery, 0) + CommonEnd;end;

    procedure TWebModule1.WebModule1AddMSgAction (Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); var MCookies: TStringList; i: integer;begin
    Response.Content: = CommonLook; with AddMsgQuery do try
    Params [0]. AsString: = Request.QueryFields.Values [ 'Sender'];
    Params [1]. AsString: = Request. Host;
    Params [2]. AsDateTime: = Request.Date;
    Params [3]. AsMemo: = Request.QueryFields.Values [ 'Message'];
    Prepare;
    ExecSQL;

    MCookies: = TStringList.Create;
    MCookies.Add ( 'User =' + Request.PathTranslated);
    MCookies.Add ( 'Test =' + Request.RemoteHost);
    MCookies.Add ( 'Time =' + Request.UserAgent);
    Response.SetCookieField (MCookies,'', Request.PathInfo, Date 1, False);
    MCookies.Free;

    Response.Content: = Response.Content + 'Tр ° х еююс • хэшх яЕше єю' +
    CommonEnd; except on E: EDBEngineError do begin

    Response.Content: = Response.Content + '+ ° шс'р BDE'+''; for i: = 0 to E. ErrorCount -1 do

    Response.Content: = Response.Content + E. Errors [i]. Message +'';

    Response.Content: = Response.Content + CommonEnd; end; end;end;

    end.

    Бібліографічний список.


    1. Комп'ютер Прес N2 1997р.
    2. П. Дарахвелидзе, Є. Марков «Програмування в Delphi 4»
    3. Комп'ютер Прес N4 1997р.
    4. Комп'ютер Прес N5 1998р.
    5. Computer Week Москва N4 (210) 1999р.
    6. Computer Week Москва N17 (223) 1996р.
    7. Computer Week Москва N18 (224) 1998р.
    8. Компьютерра N15 (142) 1996.

    -----------------------

    Браузер клієнта

    Користувач

    Internet/Intranet або ЛВС

    Web-інтерфейс до БД

    Монітор БД (Postmaster)

    БД

    Клієнт

    сервер

    Клієнт

    Програма на сервері

    БД

    Запит до сервера БД

    Відповідь сервера

    Маніпуляції з БД

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status