Автор: Пучкова Д.М. 1. 2. 3. 4. 5. Введение. Создание собственного браузера. Приложения CGI. Сервер Web Delphi. Работа с БД в Интернет. Задача текущей лекции – научиться работать с Интернет с помощью компонентов Delphi и научиться средствами Delphi создавать различные типы страниц Web. Интернет является физической и логической сетью, которая объединяет подключенные к ней компьютеры и локальные сети. Сетевой протокол, посредством которого машины связываются в Интернет, носит название TCP/IP (протокол управления передачей/межсетевой протокол: transmission control protocol/internet protocol). Этот протокол обеспечивает взаимопонимание программ, работающих на разных компьютерах, на разных платформах и языках. Прикладные протоколы могут использовать любой протокол, который основан на TCP/IP и используется для связи в Интернет. WWW-серверы и браузеры общаются друг с другом при помощи протоколов верхнего уровня. В основном, это протокол передачи гипертекста – HyperText Transfer Protocol (HTTP) и протокол передачи файлов – File Transfer Protocol (FTP). Они позволяют клиенту и серверу обмениваться друг с другом сообщениями. Протокол HTTP, в основном, ориентирован на транзакции: клиент запрашивает порцию данных и сервер, удовлетворив его запрос, завершает соединение. В качестве запрашиваемых данных могут выступать документы HTML, изображения, прикладные программы и другие данные. Для того, чтобы было возможно выполнять примеры серверных приложений, необходим сервер Web приложений, поддерживающий интерфейсы CGI, ISAPI и WIN-CGI. Для этого можно использовать серверы Web Microsoft Internet Information Server или Personal Web Server (поставляемый с Windows NT 4.0), который поддерживает CGI и ISAPI. Для работы с Windows 95/98/2000/XP подойдет персональный сервер Web, который поставляется с пакетом FrontPage. Также потребуется браузер, поддерживающий компоненты ActiveX (например, IE). Персональный сервер необходимо настроить соответствующим образом. Если на компьютере установить FrontPage, то персональный сервер расположится в «…\FrontPage Web». В нем два подкаталога: Content и Server. В каталоге «Server» есть файл vhttpd32.exe (файл сервера). Перед обращением к серверу из приложений, запустите этот файл. В каталоге «Content» есть ряд подкаталогов, из которых, в первую очередь, необходим подкаталог «cgi-bin». Это исполняемый каталог сервера. Здесь располагаются созданные Вами файлы и .exe и .dll, которые должны выполняться на сервере. Если на сервере не введена возможность выполнить эти файлы из выполняемого каталога, то в свойствах этого каталога необходимо включить индикатор «Allow Scripts or Programs to be Run». Во время установки FrontPage в персональный сервер заносится имя компьютера, например, «MyComputer». Это имя необходимо согласовать с именем компьютера, которое установлено в Windows. Выполните: «Панель управленияСеть» в открывшемся диалоговом окне на странице «Идентификация» установить в окне «Имя компьютера» соответствующее имя, например, «MyComputer». В этом же окне проверить, установлен ли компонент TCP/IP. Если все сделали правильно, то к тем файлам, которые отображены в каталоге cgi-bin возможно обращаться по URL: «http://mycomputer/cgi-bin/имя_файла». Страницы Web оформляются на языке HTML (HyperText Markup Language) – язык описания документов, используемый в WWW. В Delphi 6 открывать и отлаживать документы HTML можно, не выходя из ИСР Delphi. Открыть текстовый файл (FileNewOther, выбрать пиктограмму «Text») и занести в него код на языке HTML. Сохранить файл (FileSave As), введя расширение .html. Далее – щелкнуть в окне «Редактор кода» правой кнопкой мыши и выбрать из контекстного меню команду «html Editor». Если настройка страницы Internet окна опций среды проведена правильно, то, задав команду «Open», откроется браузер и пользователь увидит, как выглядит Internet-страница. Теперь по настройке страницы Internet. Эта страница позволяет задать настройки для работы с файлами и скриптами в приложениях, связанных с Internet. Эта страница находится в многостраничном окне настройки (ToolsEnvironment Options). Окно «Internet File Types» содержит список расширений файлов, предназначенных для работы с Интернет. По умолчанию в список занесены файлы HTML с расширениями .html и .htm и файлы XML с расширениями .xml, .xsl, .xsd. Кнопка Delete позволяет удалять выделенную строку списка, а кнопки «New» и «Edit» позволяют, соответственно, создать новую строку для нового типа файлов или отредактировать выделенную в списке строку. Обе эти кнопки открывают диалоговое окно. В окно «Description» можно заносить названия типа файлов. В окно «Extensions» заносится список расширений файлов. В выпадающем списке «Edit action» можно указать, какую операцию должен проводить с файлами данного типа, загруженными в окно Редактора Кода, внешний редактор при выполнении команды «ToolsExternal Editor» или щелчке на кнопке «External Editor» инструментальной панели «Internet» или командой «htm Editor» контекстного меню Редактора Кода. Если на компьютере для просмотра используется IE, а для редактирования – FrontPage, то при операции «Open» из Редактора Кода будет вызываться FrontPage. Индикаторы в окне «EditType» означают: Syntax Highlight (выделение цветом в окне Редактора Кода тегов и других синтаксических элементов кода); Show HTML Custom View (отображение страницы предварительного просмотра для скриптов HTML); Show XML Custom View (отображение страницы предварительного просмотра для скриптов XML). Вернемся к окну «Environment Options», страница «Internet». Индикатор «Enable Debugging» позволяет при ошибке в скрипте стартовать отладчик, установленный на компьютере. Если этот индикатор выключен, то при ошибке пользователь получит только сообщение о ней. Радиокнопка «HTML File Extension» указывает расширение файлов, которое задает Мастер построения приложений для Web для файлов HTML. В окне «Sample Image File» можно указать изображение, которое будет отображаться, если истинное изображение не доступно во время проектирования. По настройкам все. Слушателям рекомендуется почитать дополнительную литературу по языкам HTML, XML для правильного программирования на этих языках в среде Delphi. Построим простейший браузер средствами Delphi. Открыть новое приложение и перенести на форму компонент WebBrowser со страницы Internet. Развернуть его на всю форму, указав свойство Align = alClient. Чтобы иметь возможность просматривать подготовленный ранее документ, достаточно в обработке OnCreate формы записать оператор: WebBrowser1.Navigate(‘...\myFile.html’); Этот оператор ищет методом Navigate указанный файл или адрес URL и загружает в браузер затребованный документ. Это получится узконаправленный браузер. Чтобы иметь возможность просматривать различные документы, добавьте в приложение OpenDialog. В его свойство Filter занести: файлы HTML (*.html, *.htm) *.html, *.htm все файлы *.* Ввести в приложение меню с разделом Open. В обработчике события написать оператор: if (OpenDialog1.Execute) then WebBrowser1.Navigate(OpenDialog1.Filename); Выполнить приложение. В браузер загрузится созданный ранее документ, и его возможно будет просматривать. С помощью раздела «Open» можно открывать любые документы HTML. Этот браузер довольно простой. Но его возможности бывают весьма полезными. Попробуем с его помощью открыть некоторый документ Word с расширением *.doc. Данный браузер откроет в себе Word и откроет этот файл. Для файлов с расширением *.bmp будет вызван редактор Microsoft Paint. Теперь усовершенствуем браузер. Преобразуем прежнее приложение, удалив из него тексты ранее введенных обработчиков. Либо возможно создать новое приложение. Добавить на форму панель CoolBar. Перенести на CoolBar инструментальную панель ToolBar. Установить в TRUE ее свойство ShowCaptions, чтобы можно было видеть надписи на кнопках. Ввести на панель щелчками правой кнопки мыши две кнопки: ToolButton1 и ToolButton2 (это кнопки, перемещающие, соответственно, к предыдущему и последующему из просмотренных документов). В свойстве «Caption» кнопок указать «Назад» и «Вперед», соответственно. Для обеих кнопок задать свойство «Enabled» равным FALSE. Можно также задать пиктограммы, добавив в приложение компонент ImageList. Перенести на панель CoolBar компонент выпадающего списка ComboBox. В окне редактирования этого списка пользователь сможет набирать URL или имя файла документа HTML, а из выпадающего списка выбрать один из ранее просмотренных документов. Назвать выпадающий список ComboBox1. Установить для панели CoolBar ее свойства AutoSize и ShowText в TRUE. ShowText – видимость текстовых полос. Щелкнуть на «…» около свойства «Bands» в Object Inspector и в открывшемся окне редактирования полос для полосы, где расположен ComboBox1, задать текст (свойство Text) равным «URL». Перенести на форму панель состояния StatusBar. Установить свойство SimplePanelTRUE. Функции ToolButton1Click и ToolButton2Click являются обработчиками щелчков на кнопках «Назад» и «Вперед». В них в качестве текста списка ComboBox1 задается текст элемента, соответственно, предыдущему или следующему по отношению к текущему элементу. Теперь можно запускать приложение и поэкспериментировать с его функциями. Ранее мы имели дело со статическими страницами Web. Содержание таких страниц неизменно и их можно заранее разработать при помощи любого редактора Web. Если страница динамическая, то серверу посылается динамический запрос, сервер обрабатывает его, динамически формирует документ HTML и посылает его пользователю. Используются два метода формирования динамического документа: вызов сервером исполняемой программы, которая формирует динамический документ, или обращение сервера к библиотеке DLL, формирующей ответ клиенту. Первый метод, связанный с вызовом программ, *.exe, осуществляется интерфейсами CGI и WIN-CGI. Второй метод, связанный с DLL, осуществляется интерфейсом ISAPI и NSAPI. Приложения CGI (Common Gateway Interface) получают от сервера информацию, передаваемую через стандартный ввод и переменные окружения. Формируемый документ HTML, который должен быть послан пользователю, как правило, помещается приложением CGI в стандартный вывод. Самый примитивный способ создания приложения CGI – консольная программа (FileNewOther, выбрать пиктограмму «Console Application»). В открывшемся проекте можно прописывать команды HTML между «begin» и «end»: begin writeln(‘<HTML>’); writeln(‘<BODY>’); writeln(‘Hello world!’); writeln(‘</BODY>’); writeln(‘</HTML>’); end; При компиляции программы будет создан файл .exe. При его запуске откроется окно DOS, в котором появится текст, выводимый программой. Этот модуль можно поместить в выполняемый каталог Вашего сервера (это – каталог cgi-bin). В любом браузере ввести URL в виде: «myComputer/cgi-bin/<имя_проекта>.exe», и в браузер будет выведен результат обработки HTML-тегов, описанных в проекте. Преимущество прикладных программ CGI над приложениями ISAPI (использующими API-сервера Internet фирмы Microsoft) или NSAPI (использующими API сервера Netscape фирмы Netscape) состоит в том, что такую исполняемую программу можно использовать на любом сервере Web. Однако, эффективность CGI заметно ниже. Каждый раз, когда прикладная программа вызывает программу CGI, сервер Web должен создать процесс, выполнить CGI-программу, результаты работы возвратить пользователю и освободить использованные ресурсы. Программные запросы ISAPI и NSAPI позволят серверу выполнять задание внутри своих процессов и не порождать новый процесс в результате каждого динамического запроса. Динамические страницы, вообще говоря, содержат при каждом выполнении новый текст и новые данные. В Delphi имеется инструментарий, позволяющий решать проблемы взаимодействия клиента и сервера. Серверные приложения Delphi строятся на основе модуля Web-компонентов WebModule. Этот компонент может служить контейнером для других компонент. Сервер типа TWebModule отсутствует в палитре компонентов. Чтобы спроектировать его, необходимо выполнить команду «FileNewOther», и в диалоговом окне Items на странице New выбрать пиктограмму «Web Server Application». Откроется окно, в котором необходимо указать тип модуля. Выберем «CGI Standalone executable» – выполняемый модуль CGI. Delphi создаст в Редакторе Кода заготовку соответствующего модуля, и будет видно окно модуля. Окно существенно различается в D5 и D6. В D6 будет видно просто окно, в котором можно размещать компоненты, создающие страницы, осуществляющие связи с БД и т.д. Пока все эти продукты не нужны, можно об этом окне забыть, кроме одного свойства: у контекстного меню этого окна можно выбрать редактор действий, с которым будем работать. В окне Object Inspector можно видеть свойства модуля Web (в Delphi 5 их можно видеть, если выделить в окне вершину WebModule1). Основное свойство модуля – Actions. Это собрание действий объектов типа TWebActions. Заполняется этот список специальным редактором действий, вызываемым щелчком на кнопке с «…» в Object Inspector рядом со свойством Actions. То же окно можно открыть выбором из контекстного меню раздела «Action Editor». В открывшемся окне быстрой кнопкой «Add New» можно добавить новое действие, кнопкой «Delete Selected» – удалить выделенное действие, кнопками со стрелками – изменить последовательность действий. Любое действие – объект типа TWebActionItem. Свойства можно видеть в Object Inspector, выделив одно из действий. Основное свойство действия – PathInfo (то, что написано в URL после последнего «/» и вплоть до «?»). Эта информация определяет способ обработки информации серверным приложением. После «?» следует часть URL, называемая Query-запрос. Обычно она состоит из списка, включающего идентификаторы, символы равенства и значения этих идентификаторов. Отдельные элементы списка помечаются символом «&». Теперь можно вернуться к рассмотрению свойств действия и к главному свойству – PathInfo. Это свойство совпадает с элементом PathInfo запроса URL. При получении запроса производится поиск действий, в котором PathInfo совпадает с запросом PathInfo. Если такое действие найдено, и оно имеет обработчик события OnAction, то выполняются операторы, заключенные в этом обработчике. Заголовок обработчика имеет вид: procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); Параметр Request определяет объект запроса типа TWebRequest. Основное свойство этого объекта – Query – строка типа String, представляющая часть Query запроса URL. Через объект QueryFields обработчик события получает доступ к содержащейся в запросе информации. Обращаться к значениям параметров запроса можно при помощи метода Values[имя]. Параметр Response определяет, завершен ли ответ, или объект Response должен дополнительно формироваться другими действиями. Если требуется, чтобы формирование Response завершили другие действия, следует в обработчике задать значение Handled = FALSE. Тогда если ответов займется другое действие, ему будет передан объект Response, в котором свойство Content содержит текст, замененный другими действиями. Мы рассмотрели свойство PathInfo объекта действия и обработчик события OnAction. У объекта действия имеется свойство Default. Если оно в одном из действий TRUE, то это действие является действием по умолчанию. Если в модуле не нашлось действия, в котором PathInfo совпадает с запросом, то наступает событие OnAction действия по умолчанию. Свойство Enabled объекта действия определяет его доступность. У самого сервера типа TWebModule, содержащего собрание действий, имеются два события, которые часто используются для управления сервером. Это событие BeforeDispatch и AfterDispatch, наступающие в начале и в конце обработки запроса. Их заголовки подобны приведенному выше для события OnAction. В обработчике события BeforeDispatch можно проанализировать запрос и дать на него ответ или произвести настройку сервера, например, сделать с помощью свойства enabled доступными или недоступными отдельные действия. Затем наступают события действий. В конце наступает событие AfterDispatch. В его обработчике можно проанализировать ответ, сформированный действиями, и что-то в нем изменить. Работу с БД начнем с просмотра таблицы данных в Web. Для решения этой задачи в палитре компонентов на странице Internet имеется компонент DataSetTableProducer. Создать новый сервер для Web и создать в нем объект действия, назвав его «Default», и установить его свойство DefaultTRUE. Перенести в окно сервера Web компонент набора данных Table и компонент DataSetTableProducer. Набор данных Table1 связать обычным образом с таблицей T1. Связать компонент DataSetTableProducer с набором данных Table1, задав его свойство DataSet равным «Table1». Свойство Header определяет команды HTML, которые будут располагаться в документе HTML перед таблицей. Свойство Footer определяет команды HTML, которые должны следовать после таблицы. Свойство Caption определяет заголовок таблицы. Свойство MaxRows устанавливает максимальное число строк таблицы. Если число записей окажется меньше, то число строк таблицы определится числом записей. Если число записей в таблице больше, то на экран будет выдано MaxRows первых записей. Остальные свойства компонента DataSetTableProducer легче задавать не в Инспекторе Объектов, а в специальном редакторе, который вызывается двойным щелчком на компоненте или из контекстного меню (команда Response Editor). Необходимо указать поля набора данных, которые должны отображаться в таблице. Это можно сделать или быстрой кнопкой «Add New» – добавить новое поле, или кнопкой «Add All Fields» – добавить все поля. Если Редактором Полей не воспользовались, то будет доступна только кнопка «Add New». Причем, при вводе очередного элемента в таблицу, его необходимо выделить в списке и в Инспекторе Объектов установить его свойство FieldName, а в подсвойстве Caption свойства Title задать надпись. Индикаторы в левой панели открывшегося окна позволят установить общие свойства таблицы. Border позволяет задать сетку таблицы. Окно Width определяет ширину таблицы в процентах от ширины страницы. Если Width = 100%, то при просмотре в браузере ширина таблицы будет выбираться, исходя из окна браузера, и будет изменяться при изменении ширины таблицы. Если Width < 100%, то ширина таблицы будет фиксированной. Если в обработчик события OnAction единственного действия модуля внести набор операторов: Table1.Action:=true; Response.Content:=DataSetTableProducer1.Content; Table1.Active:=false; то будет возвращен в качестве ответа серверного приложения результат, формируемый компонентом DataSetTableProducer1. Сохраним проект под именем Project1, скомпилируем и перенесем модуль *.exe в исполняемый каталог сервера Web. При запуске откроется таблица. В таблице можно производить индексацию и фильтрацию данных. Также можно осуществлять работу с отдельными записями или редактировать наборы данных. Основной 1. Архангельский А.Я. Программирование в Delphi 5. -М.: Нолидж, 2000. 2. Баас Р. и другие. Delphi 5. Для пользователя. Киев, 2000. 3. Бобровский В.А. Delphi 5. Учебный курс. СПб., 2000. 4. Гофман В., Хомоненко А. Delphi. Быстрый старт. – Спб.: БХВ Петербург, 2001. 5. Кандзюба С.П., Громов В.Н. Delphi 6. Базы данных и приложения. Лекции и упражнения. – М.: DiaSoft, 2001. 6. Культин Н. Delphi 6. Программирование на Object Pascal. – Спб.: БХВ - Петербург, 2001. 7. РейсдорКент ф. Delphi 4. Освой самостоятельно. М.:Бином, 1999. 8. Фаронов В.В. Учебное пособие по Delphi 4. СПб., 1999. 9. Фаронов В. Профессиональная работа в Delphi 6. – Спб.: Питер, 2002. 10. Эбнер Михаэль. Delphi 5. Руководство разработчика. Киев, 2000. Дополнительный 1. Бобровский В.А. Delphi 5. Начальный курс. - СПб., 1998. 2. Пачек Ксавье. Программирование в Delphi 5. Руководство разработчика. - М.:Нолидж, 2000. 3. Свиридов С. и др. Создание мультимедийных приложений. - М.:Нолидж, 2000. Факультативный 1. Кнут, Численные методы. 2. Интернет-ресурс по Delphi: www.torry.net. 3. А.А.Самарский, Численные методы. 4. Гуденко, Петраченко, Сборник задач Turbo Pascal. Преподаватель курса: Пучкова Д.М. email: dpuchkova@gmail.com web: http://www.webbcare.0fees.net Корпоративные ресурсы: http://www.ikis.tsogu.ru http://educon.tsogu.ru:8081