Visual Basic 6.0 упрощает разработку для Web

Часть 1. Создание первого Web-приложения

Андрей Колесов, Ольга Павлова

1. Приложения IIS (WebClass) и DHTML

2. Создание первого проекта WebClass

3. Серьезный проект для регистрации пользователей через Web

    3.1. Создание начального проекта

    3.2. Установление связи с событием

    3.3. Доступ к базе данных с помощью объектов ADO

4. Последнее напутствие...

 

    Используемый по умолчанию код запуска события

 

С появлением предыдущей версии Visual Basic 5.0 разработчики впервые получили возможность использования VB для Internet-программирования. О некоторых из этих функций мы уже писали ранее в КомпьютерПресс. В первую очередь нужно отметить средства создания элементов управления ActiveX (КомпьютерПресс № 6’97, с.183), а также появление компонентов WinSock и Internet Transfer, что обеспечивало передачу и управление данными в Сети. Пользователь получил также возможность создавать документы ActiveX (см. КомпьютерПресс № 3’98, с. 177 и № 8’98, с.139). Отдельно следует упомянуть о входящем в состав Microsoft Internet Explorer 4.x элементе управления WebBrowser, который позволяет работать с Web-страницами непосредственно на VB-форме (см. статью «Просмотр документов с помощью WebBrowser» в этом номере).

VB5 также включал API-интерфейс для Active Server Pages (ASP), однако его применение для создания расширений для сервера Microsoft Internet Information Server (IIS) 3.0 было под силу далеко не каждому программисту. И поскольку большинство разработчиков использовали ASP-технологию лишь для написания сценариев для сервера, значительная часть ее потенциала была невостребована.

В VB6 был сделан серьезный шаг по расширению возможностей программирования для Internet (табл. 1), среди которых следует особо отметить появление двух новых типов проектов: IIS Application (в документации и литературе в качестве синонима часто используется название WebClass Application) и DHTML Application. Первый из них обеспечивает обработку данных на сервере, второй — на клиенте, в среде браузера (табл. 2). В распоряжении программистов появился необходимый набор средств разработки Web-приложений в среде VB.

Создание активных Web-приложений в VB основано на идее использования некоторых HTML-шаблонов, которые затем дополняются программным кодом. Таким образом решается важная задача разделения труда между Web-дизайнером и VB-разработчиком, каждый из которых может заниматься своим делом. Именно этот момент мы постараемся отразить в приведенном далее примере.

1. Приложения IIS (WebClass) и DHTML

IIS-приложение — это VB-программа, использующая комбинацию HTML- и VB-кода для генерации активных динамических Web-страниц (ASP), работающих в среде браузера. Само IIS-приложение функционирует в среде Web-сервера, где оно получает запросы от браузера, запускает соответствующий программный код для их обработки (в том числе с обращением к базам данных) и возвращает ответную информацию в браузер (например, меняя не только содержимое, но и структуру HTML-страницы). Таким образом, программный код VB может быть альтернативным вариантом использования скриптов, CGI-обработки и других методов Internet-программирования.

IIS-приложение представляет собой объект, называемый WebClass и содержащий, в свою очередь, несколько элементов WebItem, которые могут быть двух типов: HTML-шаблоны и Custom WebItem. Первые фактически являются HTML-страницами с обозначением специальных полей, содержимое которых может динамически меняться. Вторые включают программируемые блоки обработки внешних запросов.

Принципиальное отличие IIS- и ASP-приложений (кроме того, что первое пишется на VB, а второе — на скриптовых языках типа VBScript или JScript) заключается в том, что в ASP-приложениях комбинация кода и HTML находится на одной странице, а в IIS-приложении пользовательский интерфейс (HTML- или ASP-страницы) физически отделен от программного кода. Такое разделение упрощает отладку приложения и обеспечивает возможность создания повторно используемых программных компонентов.

В отличие от традиционных VB-приложений IIS-приложения в качестве диалогового интерфейса применяют не формы, а HTML-страницы (табл. 3). Как и VB-приложения, IIS-приложения содержат модули кода и визуальные компоненты, которые хранятся в виде текстовых файлов с расширением DSR. Для файлов двоичного варианта приложения используется расширение DSX.

В целом законченное IIS-приложение (его структура приведена на рис. 1) состоит из следующих элементов:

  • одного или нескольких объектов WebClass;

  • одного или нескольких HTML-шаблонов;

  • одного или нескольких элементов Сustom WebItems;

  • ASP-файла, используемого для передачи информации от WebClass в IIS (каждому WebClass соответствует свой ASP-файл);

  • модуль времени выполнения MSWCRUN.DLL;

  • проект, содержащий все компоненты кода в виде DLL-библиотеки, создаваемой при компиляции.

DHTML-приложения представляют собой комбинацию динамических HTML-страниц и откомпилированного VB-кода. Они служат примером использования расширенной DHTML-технологии, реализованной в IE начиная с версии 4.0 и предназначенной для создания интерактивных Web-страниц. DHTML-приложения выполняются непосредственно на компьютере клиента. При создании DHTML-приложений можно писать VB-код обычным образом, а также использовать специальный конструктор в среде VB для создания Web-страниц.

В составе VB6 имеется несколько примеров с демонстрацией работы IIS- и DHTML-приложений (DhShowMe, PropBag и WCdemo), которые находятся на компакт-диске MSDN Library или на жестком диске в подкаталоге \MSDN98\98VS\1033\SAMPLE\V98.

В начало

В начало

2. Создание первого проекта WebClass

Хотя технология разработки приложения для Web в среде VB6 является достаточно простой, на начальном этапе освоения она может несколько напугать программиста. Ведь объектные модели IIS/ASP/WebClass обладают невероятным количеством возможностей, и вряд ли найдется человек, который был бы знаком с ними в полной мере. Тем не менее не стоит волноваться — нужно только ознакомиться с основами Internet-разработки, а затем вы сможете приступить к созданию реальных приложений, шаг за шагом осваивая документацию.

Вначале необходимо ознакомиться с HTML-шаблонами и событиями, научиться создавать HTML-код «на лету», заменять элементы языка (тэги), а также управлять данными, отправленными клиентом. Об этом мы и постараемся рассказать в данной статье, а для начала выполним совсем простой пример.

Внимание. Для создания и работы с WebClass на компьютере должны находиться IIS (для Windows NT) или Personal Web Server (для Windows 9x). Для установки PWS (персональный Web-сервер, который иногда называется Peer Web Services, — аналог IIS при работе в среде Windows 9x) используйте диск Setup VB6. В стартовом окне укажите опцию Server Application and Tools и нажмите кнопку Next. В следующем окне отметьте позицию NT Option Pack (для Windows 9x) и щелкните кнопку Install. По запросу программы установите второй диск Setup. Далее укажите вариант записываемой конфигурации PWS (рекомендуем для первого раза Typical). После окончания загрузки в меню Windows появится новая группа MS Personal Web Server.

Одним из компонентов проекта WebClass являются HTML-шаблоны, которые, в принципе, представляют собой обычные HTML-файлы. Обычно они создаются вне интегрированной среды разработки VB, но после их импорта в проект вы получаете возможность редактировать их внутри VB IDE с помощью любого привычного вам редактора, например Notepad или FrontPage. Для этого выберите команду Options из меню Tools, перейдите во вкладку Advanced и введите путь к нужному вам редактору в поле ввода External HTML Editor. (Мы выбрали Notepad.)

Первый шаг, с которого начинается разработка приложения, — это создание проекта WebClass. Запустите VB и в окне New Project выберите элемент IIS Application (рис. 2).

После загрузки проекта переименуйте его из Project1 в WCSimple. Затем дважды щелкните папку Designers в окне Project. Раскроется дерево проекта, и вы увидите модуль WebClass1. Дважды щелкните его, и на экране появится Конструктор.

Переименуйте модуль в WClass1.Dsr (рис. 3). Сохраните проект на жестком диске с именем Simple.vbp (это обязательное условие для дальнейшей работы над проектом).

Конструктор WebClass состоит из двух панелей. В левой части показаны элементы модуля — HTML Template WebItems и Custom WebItems, а справа — соответствующие им элементы языка HTML (рис. 4).

Следующим шагом разработки приложения является импорт HTML-шаблонов. Для нашего примера создадим в редакторе Notepad следующий простой шаблон с именем Simple.htm, состоящий всего из одной строки:

<html><body>Привет всем!</body></html>

Теперь импортируем шаблон в конструктор. Для этого либо щелкните правой кнопкой мыши дерево на левой панели Конструктора, а затем выберите Add HTML Template, либо щелкните кнопку со значком IE Globe на панели инструментов (рис. 4). В появившемся окне откройте файл Simple.htm. В результате наш модуль WebClass1 приобретает такой вид, который показан на рис. 5.

Замечание. Обратите внимание, что текст содержимого Simple.htm в поле HTML Context Конструктора выдается в кодировке, которая установлена в вашем текущем браузере по умолчанию. У нас там стоит КОИ8-Р, поэтому сейчас мы видим русский текст в окне Конструктора в искаженном виде.

При импорте шаблона Конструктор создает его копию, чтобы защитить исходный файл. Для нашего проекта фактически используемый файл носит имя Simple1.htm. Данный момент является существенным, если вы вдруг захотите отредактировать исходный шаблон вне среды Конструктора. Если вы будете исправлять шаблон в среде Конструктора (кнопка Edit HTML Template), то обратите внимание, что вы работаете с файлом Simple1.htm.

Теперь нужно сформировать код события WebClass_Start, которое активизируется при запросе пользователем URL-адреса. Событие WebClass_Start является аналогом события Form_Load в традиционном VB-приложении. Объект WebClass также имеет и другие события, включая Initialize и Terminate, аналогичные обычным событиям в VB.

Откроем окно кода (например, дважды щелкнув значок WebClass1 в окне Конструктора). При первом обращении к WebClass_Start туда автоматически запишется некоторый код (см. врезку «Используемый по умолчанию код запуска события»). Однако в нашем приложении Simple.vbp требуется написать только одну строку кода:

Private Sub WebClass_Start()
                        Template1.WriteTemplate 
End Sub

Метод WriteTemplate направляет указанный шаблон в браузер. Теперь запустим созданное приложение на выполнение. При первом запуске VB попросит установить свойства проекта (рис. 6), а затем указать имя виртуального корневого каталога (рис. 7) для PWS. В обоих случаях не будем изменять параметры, предложенные по умолчанию, и нажмем OK. Далее после нескольких секунд размышления компьютера (при последующих запусках все будет выполняться достаточно быстро) мы увидим результат — IE покажет созданную нами ASP-страницу (рис. 8). Обратите внимание на адрес созданной страницы, которая находится во временном виртуальном каталоге персонального Web-сервера.

Выйдите из браузера и остановите выполнение приложения — именно таков порядок закрытия WebClass-приложения в процессе разработки или отладки. Поздравляем! Вы создали первое IIS-приложение на VB.

В начало

В начало

3. Серьезный проект для регистрации пользователей через Web

Сейчас мы попробуем создать более полезное WebClass-приложение, предназначенное для довольно часто встречающейся задачи регистрации пользователей через Web. Здесь наша программа будет не только создавать ASP-страницы, но и записывать данные в базу данных Access. Для этого в VB6 должны быть установлены следующие компоненты (входящие в состав типичной установки): Access ODBC Driver (Workstation Tools) и Data Access Components 2.0 (Server Tools).

В начало

В начало

3.1. Создание начального проекта

Повторите для нового приложения то, что мы уже выполняли в предыдущем примере. Запустите новую сессию VB6 и выберите IIS Application в окне New Project. После загрузки проекта переименуйте его из Project1 в SimpleR. Раскройте папку Designers, щелкните элемент WebClass1 для вывода на экран Конструктора. Опять зайдите в окно Properties и установите WebClass1 как wcSimple, а свойство NameInURL — как SimpleR. Теперь сохраните проект на жестком диске с именем SimpleR.vbp. (рис. 9).

Для разработки приложения мы используем HTML-шаблон с именем SimpleR.htm, содержимое которого приведено в листинге 1. Этот файл был создан в Visual InterDev, но вы можете подготовить его в любом другом редакторе, в частности Notepad. Добавьте этот шаблон к проекту и назовите появившийся новый элемент WebItem как tplSimple. Дважды щелкните его, в появившемся окне кода найдите подпрограмму WebClass_Start и замените содержащийся там текст на следующий код, который выводит шаблон при загрузке приложения:

Private Sub WebClass_Start() 
                     ‘ Выводит исходный HTML-шаблон 
                     tplSimple.WriteTemplate 
End Sub

Запустите проект на выполнение, и вы увидите, что браузер выводит ASP-страницу, которая в данном случае является точной копией исходного HTML-шаблона (рис. 10). Выйдите из браузера и остановите выполнение приложения.

В Конструкторе WebClass щелкните правой кнопкой мыши элемент tplSimple и выберите команду Edit HTML Template из контекстного меню. Тогда вы увидите свой шаблон в редакторе HTML-кода, который вы установили по умолчанию в среде. Еще раз обратите внимание, что вы имеете сейчас дело не с исходным файлом шаблона, а с его копией SimpleR1.htm. Внимательно приглядевшись, вы обнаружите, что шаблон страницы включает три элемента, имеющих такой вид:

<WC@TAGTITLE>Title</WC@TAGTITLE> 
... 
<WC@TAGEMAIL>Email</WC@TAGEMAIL> 
... 
<WC@TAGNAME>Name</WC@TAGNAME>

Префикс WC@ указывает не то, что поля этих элементов могут заменяться во время выполнения программы на код, содержащийся в WebClass. Для этого мы будем использовать метод WriteTemplate, который вызывает специальную процедуру ProcessTag, как только в HTML-шаблоне встретится подобный элемент. Вернемся в среду VB и дважды щелкнем элемент tplSimple для вывода окна Code.

Введите в процедуру WebClass_Start (в самом начале, перед строкой tplSimple.WriteTemplate — см. листинг 1) еще одну строчку кода:

Session(“Title”) = “Введите свою “ &_ 
                   “информацию для регистрации:”

Далее в окне кода в левом верхнем списке выберите элемент tplSimple, а в правом верхнем списке — ProcessTag. В появившейся процедуре tplSimple_ProcessTag введите следующий текст:

Select Case TagName 
         Case “WC@TAGTITLE” 
         TagContents = Session(“Title”) 
         Case “WC@TAGEMAIL” 
         TagContents = “Email:<br>” & _ 
                “<input type=’text’” & _ 
                “ name=’Email’><br>” 
         Case “WC@TAGNAME” 
         TagContents = “Имя:<br>” & _ 
        “<input type=’text’” & _ 
        “ name=’Name’><br>” 
End Select

Обратная передача HTML-кода с помощью параметра TagContents осуществляет замену элементов. Установите контрольную точку (breakpoint) в строке tplSimple.WriteTemplate подпрограммы WebClass_Start и запустите приложение на выполнение. После остановки программы в контрольной точке с помощью клавиши F8 проследите шаг за шагом порядок выполнения событий. Вы увидите, что подпрограмма tplSimple_ProcessTag вызывается три раза — поочередно для каждого из трех элементов в шаблоне. Особенно интересно здесь то, что данная процедура заменяет элементы Email и Name на HTML-код, который создает поля ввода в браузере (рис. 11).

Возможность интерактивно отлаживать код события для сервера является одной из наиболее мощных возможностей разработки WebClass-приложений, включенных в VB6. При Web-разработке в VB5 нельзя интерактивно отлаживать код на VBScript в ASP-приложениях — создание пробных версий и исправление ошибок было, к сожалению, единственным способом проведения отладки.

В начало

В начало

3.2. Установление связи с событием

Следующий этап в разработке нашего приложения — написание кода, который обрабатывает событие для кнопки «Зарегистрироваться», расположенной на форме. Для этого в Конструкторе WebClass щелкните элемент tplSimple на левой панели. Тогда справа вы увидите список HTML-элементов страницы, к которым можно подключить события. Щелкните правой кнопкой мыши элемент Form1 и выберите команду Connect to Custom Event из контекстного меню (рис. 12). Присвойте добавленному событию имя RegisterMe и обратите внимание на то, что имя события в столбце Target, расположенном рядом со столбцом Form1, также изменилось (рис. 13). Теперь перейдем в HTML-шаблон и убедимся, что элемент FORM принял следующий вид:

<FORM method=’post’ action=SimpleR.ASP?WCI=tplSimple _ 
                              &amp;WCE=RegisterMe&amp;WCU>

SimpleR.asp — это специальная ASP-программа, о которой мы расскажем ниже. Значения, идущие после знака вопроса, обозначают следующее: элемент WebClass (WebClass Item — WCI) равен tplSimple; событие WebClass (WebClass Event — WCE) равно RegisterMe; а адрес WebClass URLData (WCU) пуст.

Когда пользователь щелкает кнопку «Зарегистрироваться» в браузере, эта строка кода запускает событие tplSimple_RegisterMe в ActiveX DLL-библиотеке на сервере. В данном случае работа формы связана с событием на сервере, однако вы можете установить в браузере любую гиперссылку, которая будет запускать нужное событие на сервере. Таким образом, использование WebClass вносит еще одно новшество в разработку Web-приложений — событийно-управляемый стиль программирования VB распространяется и на приложения, основанные на использовании браузера.

Дважды щелкните событие RegisterMe на левой панели Конструктора WebClass, чтобы перейти в окно кода. Для нашего события введите следующий текст:

If Len(Request.Form(“Email”)) = 0 Then 
            Session(“Title”) = “Пожалуйста, введите “
    & _  
            “свой Email-адрес!” 
            Session(“Email”) = “” 
            Session(“Name”) = “” 
Else      
            Session(“Title”) = “Вот, что Вы ввели:” 
            Session(“Email”) = 
    Request.Form(“Email”) 
            Session(“Name”) = Request.Form(“Name”) 
End If 
tplSimple.WriteTemplate

Request.Form представляет собой стандартный способ возвращения введенных в форме данных из страницы в браузере. При этом устанавливается несколько переменных Session и повторно выводится тот же самый HTML-шаблон. Установите контрольную точку на операторе If и запустите проект.

Введите электронный адрес и имя, а затем щелкните кнопку «Зарегистрироваться». Вы увидите, что поле Title обновится, но поля ввода станут пустыми, так как пока в нашем программном коде им не присваивается никакого значения. Остановите выполнение проекта и откорректируйте tplSimple_ProcessTag в соответствии с кодом, приведенным в листинге 2. Для этого нужно добавить две строки, которые присваивают полям ввода значения (переменная Value), соответствующие переменным Session:

“ value=’” & Session(“Email”) & “‘“ & _
и
“ value=’” & Session(“Name”) & “‘“ & _

Снова запустите проект и удостоверьтесь, что теперь все будет работать как надо (рис. 14).

В начало

В начало

3.3. Доступ к базе данных с помощью объектов ADO

И наконец, последний этап разработки — включение в состав проекта возможности хранить и получать записи из базы данных. Для этого создадим базу данных Microsoft Access 7.0 в том же каталоге, где находится наше приложение, и назовем ее Register.mdb. Для этого можно воспользоваться встроенным средством VB — Visual Data Manager (VisData), которое запускается из меню Add-Ins. (Мы подробно описывали работу в VisData в статье «Создание персональной адресной книги на VB 5.0» в КомпьютерПресс № 7’98, с. 187.) Добавим таблицу с двумя полями — Email и Name — и сохраним ее как Users. Щелкнем OK, когда Access предложит нам создать уникальное поле индекса. Чтобы сейчас не заниматься настройкой путей файлов, запишем Register.mdb в корневой каталог на диске C.

В среде VB добавьте ссылку к библиотеке Microsoft ActiveX Data Objects Library: с помощью команды Project|References отметьте библиотеку ADO Library 1.5 или 2.0. В случае если последняя не установлена на вашем компьютере, загрузите установочный комплект MDAC 2.0 с Web-узла Microsoft по адресу: http://www.microsoft.com/data/ado. Теперь откорректируйте подпрограмму tplSimple_RegisterMe в соответствии с кодом, приведенным в листинге 3.

Новая процедура tplSimple_RegisterMe сохраняет данные из формы в переменных Session, затем открывает набор записей ADO и ищет Email-адрес. Если адрес найден, подпрограмма возвращает найденную запись из базы данных с сообщением о дубликатном адресе. Если адрес не найден, информация о пользователе заносится в базу данных. Следующая строка кода определяет имя файла базы данных и указывает тип связи с ADO:

Connect = “DBQ=c:\register.mdb;” & _ 
                        “Driver={Microsoft Access Driver
		 (*.mdb)}”

Установите контрольную точку в подпрограмме tplSimple_RegisterMe, запустите проект и понаблюдайте, как работает код доступа к данным. Помните, однако, что любое «настоящее» приложение, которое вы собираетесь создавать, должно включать обработку ошибок. Кроме того, вам необходимо обеспечить обновление существующих записей и удаление ненужных данных.

После компиляции проекта происходят две вещи. Во-первых, созданная библиотека ActiveX DLL регистрируется на той машине, где она разрабатывалась, — аналогично тому, как это бывает с любым ActiveX-проектом в VB. Во-вторых, создается специальный ASP-файл запуска, где указано имя проекта в свойстве NameInURL для WebClass. В нашем примере этот файл называется SimpleR.asp. Взгляните на текст этой программы в каком-либо из редакторов, например в Notepad. Когда пользователь вводит в браузере URL-адрес файла SimpleReg.asp, IIS-сервер выполняет программу и создает экземпляр SimpleR.wcSimple. Здесь необходимо обратить ваше внимание на то, что Microsoft не рекомендует тем или иным образом изменять такой ASP-код.

В начало

В начало

4. Последнее напутствие...

Надеемся, что вам удалось создать некоторую базу для разработки своих собственных WebClass-приложений. Однако мы советуем не спешить с преобразованием уже существующих Web-приложений в WebClass-проекты. Подобная работа требует значительных затрат времени и имеет смысл только в тех случаях, когда такой переход действительно оправдан. Лучше используйте WebClass для создания новых приложений или при серьезной модификации уже существующих проектов.

Несомненно, VB5 можно было использовать для разработки Web-приложений, но там приходилось прибегать к огромному множеству программных трюков, чтобы ASP-сценарии взаимодействовали с DLL-библиотеками надлежащим образом. С появлением VB6 отшли в прошлое ограничения в VBScript и отсутствие подлинной событийно-управляемой среды программирования.

КомпьютерПресс 5'1999