ДонНУ, кафедра КТ, проф. В. К. Толстых Технологии разработки Internet- приложений Среда Delphi: CGI, ISAPI приложения (В Visual Studio нет прямых и простых средств создания ISAPI расширений) Delphi –Windows, Kylex – LinuxPageProducer Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета
Delphi – вид Web Server Application
Создание Web-приложения
Создание Web-модуля в приложении Если Action несколько, то для них надо указывать свои пути
Сгенерированный код Web-модуля unit Unit1; interface uses SysUtils, Classes, HTTPApp; type TWebModule1 = class(TWebModule) procedure WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); private { Private declarations } public { Public declarations } end; var WebModule1: TWebModule1; Добавлен заголовок обработчика onAction
(продолжение) Обработчик onAction 1 … implementation {$R *.dfm} procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); Begin {место программирования кодов обработки Web-запроса} end; end. Контейнер запросаКонтейнер ответа Флаг для диспетчера о готовности ответа
Рекомендации для создания и тестирования приложения При тестировании Web-приложений в свойствах браузера в разделе «временные файлы» установить «Проверять наличие обновления… при каждом посещении страницы». Создать Web-сайт, или Web-приложение (рекомендуем это!), или виртуальный каталог (см. Архитектура IIS.ppt), установить Web и NTFS разрешения (разрешить запуск сценариев и исполняемых файлов – для IIS5 и 6, для IIS7; запись в файлы – см. далее).Архитектура IIS.pptIIS5 и 6IIS7 Для ISAPI (IIS 5) и ASP (IIS 6) отменить кэширование. При работе в локальной сети можно использовать соседний IIS. Доступ к его корню – это компьютера, например, Убедитесь, что в настройках подключения браузера к сети его запросы не отправляются к удаленному прокси-серверу (отметить «не использовать прокси- сервер для локальных адресов») Теперь можно в какой-либо среде разработки сайтов, например, SharePoint Designer 2007, Visual Studio… подключиться к созданному сайту (приложению, виртуальному каталогу) на локальном IIS и приступать к его разработке. Введите в строке открытия сайта –
Установка NTFS-разрешений 1.Убедитесь, что у вас есть закладка Безопасность в свойствах файлов и папок. Если нет, то в меню Windows Explorer выберете: Сервис – Свойства папки… – Вид – Использовать простой общий доступ к файлам – снять флаг, 2.Теперь для необходимого файла в его свойствах можно выбрать появившуюся закладку Безопасность, далее выберете имя пользователя от которого вы работаете, или – Гостевую учётную запись, и поставьте флаги на Чтение, Запись или Полный доступ для выбранного Вами ресурса.
Web-модуль TWebModule = TDataModule + TWebDispatcher Основные свойства TWebModule: Actions => TWebActionItem: Default, Enabled, MethodType, PathInfo Событие: OnAction
Web-диспетчер TwebDispatcher, согласно запросу, ищет действия с подходящими MethodType (POST, GET…) и PathInfo, если такое действие находится, то вызывается обработчик OnAction этого действия. Обработчик помещает ответ в WebResponse. Если формирование ответа не закончено, то устанавливают значение параметра Handled:=False (по умолчанию - True). В этом случае диспетчер запускает обработчик действия со свойством Default:=True, не зависимо от значений его свойств MethodType и PathInfo. Если значение PathInfo не определено и действие имеет значение Enabled=Default=True, то оно будет обработано первым. Если диспетчер не нашел ни одного действия, то связь сервера с клиентом разрывается без всяких сообщений. События: BeforDispatch, AfterDispatch
Демонстрация передачи клиентом параметров методами GET, POST Форма запроса: GET (2 КБ) POST (8 МБ) Путь к Action Пробел, преобразованный к 16-ричной форме
TWebRequest Содержит информацию, присылаемую от Клиента в HTTP-запросе Основные свойства Request : RemoteHost, UserAgent, Accept, Referer, Authorization, Cookies… (см. далее) Content :String – строка запроса с разделителями = и & POST: ContentFields :TStrings – массив строк типа name=value ContentFields.Values['name элемента формы '] – чтение значения Value элемента формы по его идентификатору, определённому в атрибуте name Query :String – строка запроса с разделителями = и & GET:QueryFields :TStrings – массив строк, разделённых на символе & QueryFields.Values[' имя параметра перед ='] – чтение значения параметра
Параметры запросов GET, POST:
Другие параметры запроса Web-Клиента Другие свойства Request через localhost Другие свойства Request через
Пример перенаправления запроса для дальнейшей обработки: Firm:=Request.QueryFields[1]; // статистика запросов для ДонНУ Response.SendRedirect(Request.QueryFields[0]+'? '+ // +GET-параметр Request.QueryFields[2]); // перенаправление TWebResponse Основные методы Response: SendResponse – отправить ответ (немедленно, не дожидаясь окончания OnAction) SendRedirect('новый URL') – перенаправить запрос Основные свойства Response: Content – контейнер строк HTML-кода для ответа (отправки) клиенту Cookies, ContentType… Содержит информацию, отправляемую Клиенту на HTTP-запрос 012
TPageProducer Основной метод: Content – генерирует HTML-страницу (просматривает HTML-шаблон, генерирует событие onHTMLTag для каждого настраиваемого тега заменяет настраиваемый тег HTML-кодом) Основные свойства: HTMLFile, HTMLDoc – шаблон страницы Генератор HTML-страниц на основе шаблонов Событие: onHTMLTag – возникает при каждой встрече с настраиваемым тегом: Параметры процедуры (обработчика события) onHTMLTag: Tag type TTag = (tgLink, tgImage, tgTable, tgCustom …); TagString – только имя тега, TagParams – только параметры тега ReplaceText – заменяет настраиваемый тег HTML-кодом
Работа с PageProducer подготовка запроса Клиентская часть
Включение и удаление из списка рассылки Введите Ваше имя, адрес электронной почты, выберете нужный "Пункт и нажмите кнопку "Включить" или "Удалить": Имя: Пункт 1 Пункт 2
Ответ сервера Серверная часть
Файл-шаблон ответа
Код файла-шаблона ответа для PageProducer1.HTMLFile Уважаемый коллега,, Спасибо за Ваш интерес к нашим разработкам! Ваша запись в списке рассылки: Пункт:
Подготовка ответа сервера Обработчик события onAction var Colleague, ,Item : String; Btn : Boolean; // - глобальные переменные procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin // определение имени коллеги Colleague:=Request.ContentFields.Values['name']; // определение =Request.ContentFields.Values['mail']; // обработка радиальных кнопок Case StrToInt(Request.ContentFields.Values['R1']) Of 1: Item:='Выбран Пункт 1'; 2: Item:='Выбран Пункт 2'; end; // "включить", "удалить" из списка If Request.ContentFields.Values['B1']='Включить' Then Btn:=True else Btn:=False; // формирование ответа Response.Content:=PageProducer1.Content; Handled:=True; // ответ готов end;
Разборка настраиваемых тегов Обработчик события onHTMLTag (пример 1) procedure TWebModule1.PageProducer1HTMLTag(Sender: TObject; Tag: TTag; const TagString: String; TagParams: TStrings; var ReplaceText: String); begin Case Tag of tgCustom: If TagString='Tag1' Then ReplaceText:=Colleague else If TagString='Tag2' Then ReplaceText:= else If TagString='Tag3' Then ReplaceText:=Item else If TagString='Blank' Then If Btn Then ReplaceText:=' ' else ReplaceText:=' Указанная запись успешно удалена! '; tgImage: ReplaceText:=''; end;
Разборка настраиваемых тегов Обработчик события onHTMLTag (пример 2) procedure TWebModule1.PageProducer1HTMLTag(Sender: TObject; Tag: TTag; const TagString: String; TagParams: TStrings; var ReplaceText: String); begin If TagString='Tag1' Then ReplaceText:=Colleague; If TagString='Tag2' Then ReplaceText:= ; If TagString='Tag3' Then ReplaceText:=Item; If TagString='Blank' Then If Btn Then ReplaceText:=' ' else ReplaceText:=' Указанная запись успешно удалена! '; If TagString='Image' Then ReplaceText:=''; end;