Создание серверных компонентов asp с помощью vb
В этой статье рассказывается, как вызывать компоненты vb в коде asp, сравнивая их с традиционными методами проектирования. В этой статье мы предполагаем, что читатель обладает соответствующими вводными знаниями о VB и ASP.
Сравнение серверных и клиентских компонентов.
Существует много различий между компонентами на стороне сервера и компонентами на стороне клиента. Компоненты на стороне сервера — это файлы DLL, зарегистрированные на сервере компьютера, а компоненты на стороне клиента — на компьютере, на котором работает браузер. В IE эти клиентские компоненты называются компонентами подключаемого модуля браузера ActiveX.
Клиентские компоненты ActiveX можно написать на VB и отправить в браузер через Интернет или интранет для создания замечательных эффектов. Проблема в том, что клиентские компоненты ActiveX ограничены, например, тогда как серверные компоненты, написанные на vb, могут генерировать чистый html-код и подходят для всех браузеров. Самая большая проблема с серверными компонентами заключается в том, что компонент должен работать в среде Windows+IIS или в приложении, совместимом с API IIS. По сравнению с этим кажется, что добиться такой совместимости на стороне сервера проще.
Серверный компонент IIS находится в том же пространстве памяти, что и IIS, и всегда готов к вызовам веб-страниц ASP, обрабатываемых на сервере. Теоретически мы можем вставить любой текст или код в код ASP, возвращаемый браузеру, но, вообще говоря, большинство серверных компонентов используются для обработки вычислений или поиска информации в базе данных, которые требуют много времени, а затем получения результата. возвращается в браузер в виде html-кода.
Анализ компонентов vb
Поскольку целью этой статьи является обсуждение основных методов написания компонентов VB, примеры будут очень простыми, если они смогут проиллюстрировать проблему. Прежде чем подробно обсуждать написание компонентов VB, мы сначала концептуально проанализируем компоненты VB.
При использовании VB для написания серверных компонентов существует три иерархические концепции (используемые как в коде VB, так и в ASP), на которые необходимо обратить внимание:
·название проекта
·имя класса
·имя метода
Имя проекта VB является именем проекта. Многие разработчики рассматривают имя проекта как имя компонента, но VB рассматривает его только как имя проекта. В нашем примере имя проекта — exampleproject. Конечно, мы можем назвать наш собственный проект произвольно; имя класса — exampleclass, а имя метода — examplemethod.
Имя проекта (имя компонента) также может быть именем файла dll, скомпилированного из кода компонента. Файл dll будет содержать скомпилированный код vb, используемый iis для возврата текста или html-кода в браузер.
Имя метода относится к части кода Visual Basic, которая управляет определенной функцией кода, например вычислением даты или отображением списка всех авторов в базе данных. Методы компонентов — это своего рода черные ящики, которые выполняют определенную работу или возвращают определенную информацию на основе входной информации. Как правило, в компоненте может быть несколько методов. Чтобы более эффективно управлять методами компонентов, методы можно группировать по схожим классификациям. В этом заключается роль классов компонентов.
Класс компонента может генерировать копию кода класса компонента в памяти. При использовании кода asp для создания объекта его также называют созданием экземпляра. Получив объектную ссылку на экземпляр кода класса компонента, мы можем вызвать методы, содержащиеся в классе, из кода asp.
В нашем примере имена проекта, класса и метода будут использоваться для создания экземпляра компонента VB в коде ASP и передачи значений из кода ASP в код VB в виде параметров метода, которые получаются в Код ASP из метода VB. Возвращаемое значение.
Вызов компонента vb из файла asp
Файл asp, который мы используем для вызова компонента vb, будет использовать переменные объекта для сохранения ссылок на объект vb. В файле asp вы можете создать объект, используя метод createobject() объекта сервера asp, который вернет ссылку на созданный им объект. В этом примере мы будем использовать objreference в качестве объектной переменной компонента. Следующий код показывает, что код asp должен использовать имя проекта и имя класса компонента (exampleproject и exampleclass) при создании экземпляра компонента vb.
Код ASP для создания экземпляра компонента vb:
set objreference = server.createobject(exampleproject.exampleclass)
Компонент vb примет значения 3 переменных из кода asp и вернет значение в код asp, которое будет сохранено в переменной asp с именем strmethodreturn. Следующий код показывает, как код asp получает значение, возвращаемое компонентом vb. Он передает три значения параметра с именами param1, param2 и parma3 в метод vb:
strmethodreturn = objreference.examplemethod(param1, param2, param3)
Три параметра param1, param2 и param3 должны быть точно такими же, как определения методов в компоненте VB. Ниже приведен пример двух строк кода ASP, который создает экземпляр класса компонента VB и вызывает метод класса. получить возвращаемое значение:
set objreference = server.createobject(exampleproject.exampleclass)
strmethodreturn = objreference.examplemethod(param1, param2, param3)
На диаграмме ниже наглядно показано, как имена проекта, класса и метода компонента VB координируются с кодом создания экземпляра компонента в файле ASP. Вы можете использовать приведенную ниже таблицу в качестве справочного материала, шаг за шагом изучая, как писать код vb и файлы asp в этом примере.
Роль метода vb
Простой компонент VB в нашем примере получит имя и возраст пользователя, а затем вернет возраст пользователя в днях, а также есть возможность напомнить пользователю, старше ли он 45 лет.
Если мы передадим компоненту вымышленный Эрик Клэптон в качестве значения первого параметра метода и установим второй параметр равным 56, мы получим следующую возвращаемую строку:
Эрику Клэптону более 20440 дней.
Если мы установим для необязательного третьего параметра значение true (этот параметр заставит метод определить, старше ли пользователь 45 лет), мы получим следующую возвращаемую строку:
Эрику Клэптону более 20440 дней.
Поскольку используются три совершенно разные переменные — имя пользователя, возраст и то, старше ли он 45 лет, нам необходимо использовать три параметра метода для передачи этой информации из файла ASP в код VB. В VB очень важно учитывать, какие типы данных использовать. Мы будем использовать строковую переменную с именем strname для представления имени пользователя, целочисленную переменную с именем intage для представления возраста пользователя и логическую переменную с именем blnageemphasison для указания того, старше ли пользователь 45 лет.
Три параметра метода (переменные, передаваемые в код метода компонента vb):
имя_строки (строка)
число (целое число)
blnageemphasisison (логическое значение)
Создание серверных компонентов в vb
После запуска vb дважды щелкните значок «activex dll» в окне «Новый проект». Как только VB загрузит новый проект ActiveX DLL, вы увидите как минимум два открытых окна: окно проекта и окно свойств. Если есть окно, которое невозможно отобразить, вы можете выбрать пункт меню «Вид» из меню VB (используйте «Вид» -> «Менеджер проектов», «Вид» -> «Окно свойств» соответственно).
Поскольку имена первого проекта и класса в VB по умолчанию — project1 и class1 соответственно, мы можем изменить их на exampleproject и exampleclass соответственно. Имя проекта можно изменить в окне проекта. Слева от введенного имени проекта в окне проекта имеется небольшое поле с + или -. Если отображается знак +, выберите маленькое поле, знак + превратится в знак -, а имя класса по умолчанию (class1) будет отображаться под именем проекта. Выберите имя класса по умолчанию в окне проекта и измените имя класса по умолчанию на exampleclass в окне свойств.
При сохранении проекта VB сохранит код, содержащий класс, в файл с расширением cls. Расширение файла проекта — vbp, в котором хранятся различные настройки проекта, имя файла и место хранения файла.
Значения свойств для серверных компонентов
Отобразите свойства класса exampleclass в окне свойств. Обратите внимание, что значение свойства создания экземпляра равно «5 multiuse». Если тип проекта установлен на стандартный exe-проект, значение этого свойства изменится соответствующим образом.
Выберите «Проект» -> «Свойства примера проекта» в меню VB, и откроется окно свойств проекта. Значение свойства «Режим потоковой обработки» в правом нижнем углу вкладки «Общие» должно быть установлено на «Потоковая обработка квартиры», что позволит нескольким посетителям одновременно использовать разные экземпляры нашего класса компонента. Кроме того, выберите два варианта: «Автоматическое выполнение» и «Постоянная память», чтобы избежать утечек памяти в VB6.
код метода vb
Теперь нам нужно использовать окно кода VB для ввода кода VB. Если окно кода по-прежнему пусто, введите следующий код:
опция явная
«Это потребует от нас определения всех переменных.
пример публичной функции (byval имя строки как строка, _
byval intage как целое число, _
необязательный byval blnageemphasison как логическое значение = false) как строка
В приведенном выше коде мы определили метод как общедоступную функцию, что означает, что любой код вне компонента может вызвать его. Поскольку это функция, она также вернет значение коду, который ее вызывает.
публичная функция examplemethod() как строка
Приведенный выше код указывает, что функция examplemethod() вернет значение строкового типа вызывающей стороне.
Наш метод vb имеет 3 переменных параметра, которые принимают значения из кода ASP, последняя переменная параметра является необязательной. Все переменные параметров, используемые для получения значений извне компонента VB, должны быть определены и использованы в скобках метода VB. Мы можем использовать переменные, определенные таким образом, как параметры метода, так же, как переменные, определенные внутри метода. Единственное отличие. между ними находится внешний код asp, определяющий их значения.
Вот три переменные и их типы данных:
byval имя строки как строка
byval intage как целое число
необязательный byval blnageemphasis как логическое значение = false
Приведенный выше код определяет типы данных трех параметров метода, указывая, что они передаются по значению и что третий параметр является необязательным. Если третий параметр отсутствует, его значение по умолчанию равно false.
Затем мы добавим несколько необходимых запятых, пробелов и знаков подчеркивания (_) в определение метода, чтобы он соответствовал грамматическим требованиям VB. Мы поместим список параметров в круглые скобки определения метода, и результирующее определение метода будет следующим:
пример публичной функции (byval имя строки как строка, _
byval intage как целое число, _
необязательный byval blnageemphasison как логическое значение = false) как строка
Введите приведенное выше определение метода в окно кода VB, и будет создан оператор конечной функции. Между определением метода и конечной функцией мы пишем собственный код.
Первая строка кода, которую мы добавляем в тело метода, — это определение строковой переменной для хранения строковых данных, возвращаемых методом. Вместо использования строковой переменной мы можем использовать строку для возврата текстовых данных в код, вызывающий метод.
dim strreturnstring как строка
Далее мы можем создать возвращаемую строку. Мы можем использовать значение переменной strname, передаваемое кодом asp через список параметров метода. Сначала объедините значение переменной параметра strname со строкой «is over». Далее мы будем использовать переменную параметра intage, чтобы вычислить количество дней, в течение которых человек прожил, а затем добавим строку «возраст в днях» к предыдущей строке. Следует отметить, что нам необходимо преобразовать произведение двух целых чисел intage * 365 в строку перед объединением его в строку strreturnstring. Этой цели можно достичь с помощью метода cstr() в VB.
strreturnstring = имя_строки & завершено & cstr(intage * 365)
Если предполагается, что имя, переданное компоненту из asp-кода, — eric clapton, а параметр age равен 56, то strreturnstring должна содержать следующее содержимое:
Эрику Клэптону больше 20440
Наша окончательная строка будет добавлена в зависимости от того, превышает ли значение переменной intage 45 и установлено ли для переменной blnageemphasison значение true.
«дней» или «дней». Следующий код может реализовать эту функцию:
если blnageemphasis и intage > 44, то
strreturnstring = strreturnstring & дней назад.
еще
strreturnstring = strreturnstring & дней назад.
конец, если
Если код asp не передает значение переменной blnageemphasison компоненту в качестве параметра метода, ее значение по умолчанию будет установлено в false в соответствии с определением нашего метода. Если для него установлено значение true и значение переменной intage больше 45, мы получим следующий вывод:
Эрику Клэптону более 20440 дней.
В противном случае мы получим следующий вывод:
Эрику Клэптону более 20440 дней.
Чтобы вернуть указанную выше строку в asp-код вызывающего компонента, мы присваиваем значение строки имени метода:
примерметод = строка возврата
Полный код метода выглядит следующим образом:
пример публичной функции (byval имя строки как строка, _
byval intage как целое число, _
необязательный byval blnageemphasison как логическое значение = false) как строка
'///// Создаем локальные переменные
dim strreturnstring как строка
'///// Создаём значение возвращаемой переменной
strreturnstring = имя_строки & завершено & cstr(intage * 365)
'///// Улучшить strreturnstring
если blnageemphasis и intage > 44, то
strreturnstring = strreturnstring & дней назад.
еще
strreturnstring = strreturnstring & дней назад.
конец, если
'///// Возвращаемая строка
примерметод = строка возврата
конечная функция
Вызов метода vb в коде asp
Создать экземпляр объекта vb в коде asp
Большая часть необходимого нам кода ASP обсуждалась в концептуальном обзоре выше. В asp-коде нам еще нужно последовательно выполнить следующую работу:
· Используйте метод createobject() объекта сервера asp для создания экземпляра компонента vb.
· Вызов методов компонента, используя соответствующие переменные параметров метода.
· Присвойте строковое значение, возвращаемое методом vb, переменной в переменной asp.
·Затем используйте эту переменную в методе response.write(), чтобы отправить строку в браузер.
Мы будем использовать некоторый код в файле asp для создания экземпляра класса компонента vb. Ниже приведен код для создания экземпляра компонента vb:
set objreference = server.createobject(exampleproject.exampleclass)
Метод createobject() объекта сервера ASP возвращает адрес объекта кода VB, поэтому мы можем вызвать любой общедоступный метод класса в ASP. Следует отметить, что поскольку параметром метода asp createobject() является имя проекта и класса vb, objreference используется для хранения ссылки на экземпляр объекта класса компонента.
Как использовать компоненты в файлах asp
Теперь мы можем использовать пример метода класса компонента, чтобы получить данные о продолжительности жизни человека в днях. Следующий код использует значение параметра и присваивает значение строки, возвращаемой методом, переменной с именем strmethodreturn:
strmethodreturn = objreference.examplemethod(Эрик Клэптон, 56, правда)
Совет: Когда создается экземпляр нашего компонента, objreference представляет класс exampleproject.example, который появился в методе createobject(). Хотя мы можем считать objreference.examplemethod эквивалентом exampleproject.exampleclass.examplemethod(), мы не можем использовать его таким образом.
Конечно, мы также можем использовать переменные вместо прямых значений в качестве параметров метода. Имена выбранных переменных параметров не обязательно должны быть такими же, как в списке параметров метода VB. Они должны быть такими же, как имена. количество, тип и количество необязательных параметров в списке параметров. Порядок тот же.
aspname = Эрик Клэптон aspage = 56 aspemphasis = true strmethodreturn = objreference.examplemethod(aspname, aspage, aspemphasis)
Использование переменных вместо значений делает ваш код более понятным и управляемым, особенно когда он становится длинным.
Теперь нам нужно только вернуть strmethodreturn браузеру, получившему доступ к коду asp в методе asp response.write(). Ниже приведен полный код asp. В конце кода мы добавляем строку кода, которая отделяет адрес объекта компонента, чтобы очистить объектный код компонента:
<%
'///// Создать экземпляр объекта компонента
set objreference = server.createobject(exampleproject.exampleclass)
'///// Установите локальные переменные в качестве параметров метода
aspname = Эрик Клэптон
аспэйдж=56
аспемфаз = правда
'///// Вызов метода компонента и сохранение возвращаемого значения
strmethodreturn = objreference.examplemethod(aspname, aspage, aspemphasis)
'///// Отправляем возвращаемое значение посещающему браузеру
response.write(strmethodreturn)
'///// Очистим объект компонента
установить objreference = ничего
%>
Сохранение приведенного выше кода asp в файле asp приведет к выводу следующей строки:
Эрику Клэптону более 20440 дней.
Включить код asp для вызова файлов dll
Тест нашего компонента заключается в том, чтобы сообщить Windows, где он хранится и когда код ASP вызывает его. Сначала выберите значок «Выполнить» или «Выполнить/Пуск» в меню VB, и VB временно зарегистрирует компонент в системе.
Совет: Вы не можете использовать браузер для загрузки файлов ASP напрямую, так как загрузка файлов ASP должна загружаться в браузер через веб-сервер.
В браузере отобразится надпись «Эрику Клэптону более 20440 дней».
Чтобы компонент мог работать на других серверах, его необходимо скомпилировать в dll-файл, а затем зарегистрировать на сервере. Конечно, если вы хотите постоянно использовать компонент на компьютере разработчика, вам также необходимо его скомпилировать и зарегистрировать. Единственный файл, необходимый для запуска этого компонента на других компьютерах, — это скомпилированный файл dll. Конечно, для этого на компьютере должен быть установлен файл библиотеки времени выполнения vb.
Как скомпилировать исходный код компонента для получения dll-файла и как зарегистрировать компонент на компьютере выходит за рамки данной статьи, поэтому мы не будем описывать это подробно.
В качестве побочного продукта написания серверных компонентов IIS мы можем вызывать методы написанных компонентов из любого файла ASP и других компонентов VB, что еще больше улучшит гибкость и модульность кода.