назад | содержание | вперед

Отправка данных

Вы также можете посмотреть не только внешний вид, но и исходный текст подготовленного вами HTML-документа и даже внести в него изменения. Для этого нажмите кнопку Launch Editor на панели инструментов окна проекта. Откроется редактор Notepad, содержащий текст HTML-документа.

<HTML>

<HEAD><TITLE></TITLE>

</HEAD>

<BODY>

<P аlign=сеntеr>Введите данные о себе:</Р>

<TABLE border=1 name=tblCustomer>

<TR>

<ТD>Компания

<TD>

<INPUT id="" name=txtccompany

style="HEIGHT: 25px; LEFT: 112px; TOP: 61px; WIDTH: 378px"

maxLength=20>

<TR>

<ТD>Фамилия

<TD>

<INPUT id="" name=txtclastname

style="HEIGHT: 25px; LEFT: 112px; TOP: 61px; WIDTH: 378px"

maxLength=l6>

<TR>

<ТD>Имя

<TD>

<INPUT id="" name=txtcfirstname

style="HEIGHT: 25px; LEFT: 112px; TOP: 61px; WIDTH: 378px"

maxLength=l6>

<TR>

<ТD>Отчество

<TD>

<INPUT id="" name=txtcsecondname

style="HEIGHT: 25px; LEFT: 112px; TOP: 61px; WIDTH: 378px"

maxLength=16>

<TR>

<TD>Пoчтовыйi индекс

<TD>

<INPUT id="" name=txtczip

style="HEIGHT: 25px; LEFT: 112px; TOP: 61px; WIDTH: 378px"

maxLength=6>

<TR>

<ТD>Страна

<TD>

<INPUT id="" name=txtccountry

style="HEIGHT: 25px; LEFT: 112px; TOP: 61px; WIDTH: 378px"

maxLength=2 0>

<TR>

<TD>Регион

<TD>

<INPUT id="" name=txtcregion

style="HEIGHT: 25px; LEFT: 112px; TOP: 61px; WIDTH: 378px"

maxLength=3>

<TR>

<TD>Город</TD>

<TD>

<INPUT id="" name=txtccity

style="HEIGHT: 25px; LEFT: 112px; TOP: 61px; WIDTH: 378px"

maxLength=20></TD></TR>

<TR>

<TD>Aдpec</TD>

<TD>

<INPUT id="" name=txtcaddress

style="HEIGHT: 25px; LEFT: 112px; TOP: 61px; WIDTH: 378px"

maxLength=60></TD></TR></TABLE></P>

<INPUT id=btnContinue name=btnContinue style="HEIGHT: ЗОрх; LEFT: 189px;

POSITION: absolute; TOP: 391px; WIDTH: 160px" type=button

vаlue=Продолжить >

</BODY></HTML>

Для того чтобы данные, содержащиеся в полях ввода, можно было отправить на сервер, поля ввода необходимо поместить в форму данных. Начало формы в документе HTML обозначается тэгом <FORM>, конец — тэгом </FORM>. При этом тэг <FORM> может иметь атрибуты: имя формы и метод отправки данных.

Добавьте строчку <FORM NAME=frminputCustomer METHOD=POST> перед тэгом <TABLE> и тэг </FORM> перед тэгом </BODY> в исходном тексте вашего HTML-документа. В результате этого все поля ввода и кнопка Продолжить оказались внутри формы данных с именем frminputCustomer. Теперь сохраните текст и закройте редактор Notepad. Visual Basic сообщит о том, что данные были изменены и предложит обновить их. Нажмите кнопку Yes.

Существует два способа отправки данных на сервер. Первый и самый простой — использование элемента управления типа submit. Если пользователь нажмет на такую кнопку, расположенную внутри формы данных, то вся введенная в остальные элементы управления информация будет немедленно передана на Web-сервер. Недостатком данного способа является то, что мы не сможем контролировать правильность введенных значений, поэтому применим второй способ — использование сценария VBScript для проверки правильности вводимой информации и отправки данных. Вставьте в начало HTML-документа следующий код:

<SCRIPT Language="VBScript">

<!--

Sub btnContinue_OnClick()

Dim frmCurrent

Set frmCurrent=Document.frmInputCustomer

If IsNumeric(frmCurrent.txtczip.Value) then

frmCurrent.Action="default.asp?mode=inputcustome r"

frmCurrent.submit

Else

MsgBox "В поле Почтовый индекс недопустимы буквы",,"Ошибка типа"

End If

End Sub

-->

</SCRIPT>

Замечание

В элементе управления HTML поле ввода для доступа к значению использует свойство value вместо привычного свойства Text.

В этом фрагменте кода описывается процедура btnContinue_Onciick, которая обрабатывает событие, возникающее при нажатии на кнопку btncontinue. Сначала определяется ссылка на форму данных, содержащую поля ввода. Далее проверяется, является ли числовым значение, введенное в поле Почтовый индекс. Если это не так, то в диалоговом окне выводится сообщение об ошибке (рис. 19.7).

Рис. 19.7. Вывод сообщений пользователю с помощью процедуры MsgBox

В противном случае мы задаем параметры отправки данных и вызываем метод submit формы данных, который и осуществляет отправку введенной информации на Web-сервер. Как обрабатывать эти данные на сервере, вы узнаете в следующем разделе.

Введение в Active Server Page

Работая в сети Internet, вы, наверное, обратили внимание на то, что большинство страниц в World Wide Web нельзя назвать статическими. Например, работая с поисковым сервером, вы получаете перечень ссылок, удовлетворяющих вашему запросу. Это яркий пример, когда Web-страница представляет собой не простой HTML-документ, а видоизменяется в зависимости от различных условий, будь то принимаемые запросы от пользователей или изменение информации в источниках данных. Чтобы понять, как функционируют такие Web-страницы, рассмотрим подробнее работу Web-сервера. На запрос Web-браузера Web-сервер должен ответить HTML-потоком. Однако главной особенностью динамических страниц является то, что отправляется не подготовленный заранее HTML-документ, а созданный или видоизмененный "на лету".

Для генерации HTML-потока на Web-сервере запускается специальная программа. На сегодняшний день существует несколько технологий создания подобных программ. Это может быть CGI-сценарий или программа на традиционном алгоритмическом языке. Еще одним вариантом может стать использование относительно новой технологии фирмы Microsoft — Active Server Pages (Активные страницы сервера). ASP основывается на появившейся возможности Web-сервера (Internet Information Server или Personal Web Server) обрабатывать ASP-сценарий, прототипом для которого послужил все тот же Visual Basic. ASP-сценарий во многом похож на VBScript, с той лишь разницей, что он выполняется на сервере, а не на клиентском компьютере. Это имеет ряд преимуществ по сравнению с VBScript.

Переход от HTML к ASP

ASP-страница во многом похожа на HTML, поскольку основана на тех же стандартах. Web-сервер распознает Active Server Page по расширению asp. Если просто изменить расширение существующего DHTML-документа на asp, вы не получите динамическую страницу. Ключом к созданию таких страниц является добавление ASP-сценария. Для указания Web-серверу фрагмента кода, который должен исполняться на сервере, служат маркеры "<%" и "%>".

Совет

Вы также можете указать, что фрагмент кода должен выполниться на сервере, используя в тэге <SCRIPT> атрибут RUNAT="SERVER". Например: <SCRIPT LANGUAGE="VBSCRIPT" RUNAT="SERVER"> ... </SCRIPT>.

ASP-страница, случайным образом формирующая приветствие, будет выглядеть следующим образом:

<HTML>

<BODY>

<%

Randomize

Select Case Round(Rnd()*4)

Case 0

Response.Write ("Привет")

Case 1

Response.Write ("Добро пожаловать")

Case 2

Response.Write ("Рады видеть")

Case 3

Response.Write ("День добрый")

Case 4

Response.Write ("Здравствуйте")

End Select

%>

<BODY>

<HTML>

Следующее отличие ASP от HTML — объектная модель. В ASP-сценарии доступны некоторые специфичные только для этой технологии объекты.

Виртуальные каталоги

Технология ASP поддерживается Internet Information Server (под Windows NT) и Personal Web Server (под Windows 95 и Windows 98). Для иллюстрации работы ASP будем использовать Personal Web Server. Настроить параметры его работы можно с помощью программы Personal Web Manager.

Для тестирования нашего примера необходимо создать виртуальный каталог. Это означает, что надо соотнести логическое имя, которое мы будем использовать в URL в разделе path, с физическим каталогом на диске сервера. При отладке наших примеров применим локальную модель, т. е. Web-сервер и Web-браузер будут работать на одном компьютере, хотя обычно это бывает не так. Запустите Personal Web Manager и в открывшемся диалоговом окне щелкните на значке Advanced.

При установленном флажке Enable Default Document можно задать имена файлов, считываемых сервером по умолчанию при посещении пользователем виртуальных каталогов без указания имен файлов в URL. Задайте Default Document(s) равным Default.htm, Default.asp. Теперь создайте на диске новый каталог, например C:\WEBSHARE\WWWROOT\MyDir, и в этот каталог поместите файл Default.asp с текстом нашего примера, формирующего приветствие. Теперь, чтобы создать новый виртуальный каталог, поддерживаемый нашим Web-сервером, нажмите кнопку Add.

В поле Directory появившегося диалогового окна Add Directory введите путь к созданному каталогу, а в поле Alias — имя нового виртуального каталога Web-сервера. В разделе Access осуществляется управление доступом, причем возможны следующие режимы.

Итак, теперь вы можете просмотреть свою страницу в сети Internet. Для этого загрузите Internet Explorer и укажите следующий адрес:

http://MyServer/test/

Замечание

Предполагается, что MyServer — имя вашего сервера в настройках DNS.

Web-сервер станет выполнять ASP-сценарии, содержащийся в файле Default.asp, динамически сформирует HTML-документ и отправит его Web-браузеру, который позволит вам увидеть наше приветствие. Поэкспериментируйте, нажимая кнопку Refresh. Вы будете получать каждый раз (или почти каждый раз) новое приветствие.

Создание проекта типа US Application

В Visual Basic имеется тип проекта IIS Application, который дает возможность создавать ASP-страницы. Этот тип проекта предоставляет разработчику специальный класс webciass, который оформляется в виде ActiveX Dll и встраивается в ASP-страницу, инициализируется при обращении к ней и работает на сервере. Все тонкости этого механизма Visual Basic берет на себя, предоставляя вам привычную среду для создания проектов. Таким образом, вы разрабатываете приложение, затем оно компилируется и встраивается в ASP-страницу, при этом для вас не существует ограничений VBScript, и вы можете пользоваться всеми возможностями Visual Basic при написании кода.

Рассмотрим создание проекта IIS Application на следующем простом примере. Web-сервер будет предлагать ввести данные о покупателе, принимать их, формировать на их основе HTML-документ и отправлять его обратно пользователю для подтверждения.

Создайте новый проект, выбрав в диалоговом окне New Project (рис. 19.10) значок IIS Application.

Рис. 19.10. Создание проекта типа IIS Application

Перед вами появляется окно, в котором можно добавлять к проекту HTML-шаблоны, а также элементы webitem. HTML-шаблоны— это обычные HTML-документы, которые вы сможете посылать Web-браузеру пользователя. Элементы webitem содержат шаблоны, однако, обрабатывая события и используя методы этих элементов, вы также можете формировать HTML-поток.

Назовите проект serverPage, а единственный входящий в его состав объект WebClass — Default. Задайте для свойства StateManagement объекта Default значение wcRetainInstance. Это приведет к тому, что экземпляр класса WebClass будет создаваться один раз, а не при каждом обращении Web-браузера к ASP-странице.

Добавьте в проект два шаблона HTML, воспользовавшись кнопкой Add HTML Template Webitem. Первый, на основе созданного нами ранее файла Customer.htm, предназначен для ввода информации о покупателе, второй — для отправки созданного нами HTML-документа, содержащего принятые от пользователя данные.

В окне Project выберите объект Default, перейдите в окно редактора кода данного объекта и введите следующий текст:

Option Explicit

Option Compare Text

Private Sub WebClass BeginRequest()

If Request.QueryString.Count > 0 Then

If Request.QueryString.Item(1) = "inputcustomer" Then

'записать данные в html-файл на сервере

Open "С:\Work\ServerPage\custlist.htm" For Output As #1

Print #1, "<HTML>"

Print #1, "<P аlign=сеnter>Сведения о последнем покупателе:</Р>"

With Request

Print #1, "Компания: " & .Form("txtccompany") & "<Р>"

Print #1, "Фамилия: " & .Form("txtclastname") & "<P>"

Print #1, "Имя: " & .FormC'txtcfirstname") & "<Р>"

Print #1, "Отчество: " & .Form("txtcsecondname") & "<P>"

Print #1, "Почтовый индекс: " & .Form("txtczip") & "<Р>"

Print #1, "Страна: " & .Form("txtccountry") & "<Р>"

Print #1, "Регион: " & .FormC'txtcregion") & "<P>"

Print #1, "Город: " & .Form("txtccity") & "<Р>"

Print #1, "Адрес: " & .Form("txtcaddress")

End With

Print #1, "</HTML>"

Close #1

'отправить файл клиенту

Response.Clear

CustList.WriteTemplate "custlist.htm"

End If

Else

'отправить клиенту форму для ввода

Customer.WriteTemplate

End If

End Sub

По сути дела мы описали обработку события BeginRequest, которое происходит всякий раз при обращении Web-браузера к ASP-странице. Здесь мы анализируем содержимое коллекции QueryString объекта Response. При первом обращении она пуста, и мы отправляем пользователю форму для ввода данных, вызвав метод WriteTemplate нашего HTML-шаблона.

Рассмотрим параметры, которые мы устанавливаем при передаче введенных пользователем данных Web-серверу:

default.asp?mode=inputcustomer

В приведенной строке мы определили имя ASP-страницы (default.asp), которой будет передана информация, и режим (inputcustomer), что позволит нам различить ситуацию обращения. Итак, если в коллекции QueryString объекта Response находится элемент inputcustomer, мы можем считать, что при данном обращении к ASP-странице были переданы данные, следовательно, надо их принять, сформировать HTML-документ на их основе и отправить его пользователю. Получить доступ к принятым данным можно, используя коллекцию Form. Элементы этой коллекции — наши поля ввода. Воспользуемся стандартным механизмом Visual Basic для работы с файлами и сохраним принятые данные в файле на нашем диске \\ServerPage\CustList.htm, а потом отправим его Web-браузеру пользователя с помощью HTML-шаблона custList, предварительно очистив поле Web-браузера:

Response.Clear CustList.WriteTemplate "CustList.htm"

Запустите приложение, нажав клавишу <F5>. Вам будет предложено установить режим отладки. Выберите из списка, расположенного рядом с опцией Start Component, созданный нами WebClass — Default.

Рис. 19.15. Ввод данных о покупателе в предоставленный Web-сервером шаблон

Далее потребуется создание виртуального каталога, куда будет помещена ASP-страница. Без этого не может начаться даже отладочный запуск IIS Application.

Взаимодействие Internet-приложений с базами данных

Усложним наш пример. Теперь при первом обращении к ASP-странице будем отображать содержимое таблицы customer базы данных, а при нажатии на кнопку Добавить будем посылать все ту же форму для ввода данных о покупателе, однако полученные результаты будем заносить опять же в базу данных.

Для доступа к базе данных будем использовать технологию ADO, поэтому откройте окно References нашего проекта и добавьте ссылки на библиотеки Microsoft ActiveX Data Objects 2.1 Library и Microsoft ActiveX Data Objects Recordset 2.0 Library (рис. 19.17).

Рис. 19.17. Добавление ссылок на библиотеки ADO

Теперь нам потребуется обрабатывать событие webciass_initialize для выполнения операций соединения с базой данных и открытия Recordset и событие WebClass_Terminate для закрытия объектов Recordset иConnection.

Подпрограмма viewCustomers () будет посылать Web-браузеру в виде HTML-потока содержимое таблицы Customer базы данных, а также размещать объект типа Submit, при нажатии на который будет производиться вызов формы для ввода информации и последующего добавления новой записи о покупателе. Ранее мы уже говорили о таком способе отправки информации на Web-сервер. В данном случае никакой информации отправлено не будет, нам важно только то, чтобы сервер получил запрос с параметром begininput и передал Web-браузеру шаблон для ввода информации о покупателе.

Обработка события webciass_BeginRequest изменена таким образом, чтобы при первом обращении показывать содержимое таблицы Customer и кнопку Добавить, при обращении к ASP-странице с параметром inputCustomer принимать информацию и добавлять полученные сведения в базу данных, а при обращении с параметром begininput предоставлять форму для ввода информации о покупателе:

Option Explicit

Option Compare Text

Dim mcnnCustomer As ADODB.Connection

Dim mrstCustomer As ADODB.Recordset

Private Sub WebClass_BeginRequest()

If Request.QueryString.Count > 0 Then

'получены данные

If Request.QueryString.Item(1) = "ihputCustomer" Then

'записать полученные данные в таблицу

With mrstCustomer

.AddNew

.Fields("ccompany").Value = Request.Form("txtccompany")

.Fields("clastname").Value = Request.Form("txtclastname")

.Fields("cfirstname").Value = Request.Form("txtcfirstname")

. Fields ("csecondnairie") .Value = Request.Form("txtcsecondname")

. Fields("czip").Value = Request.Form("txtczip")

. Fields("ccountry").Value = Request.Form("txtccountry")

.Fields("cregion").Value = Request.Form("txtcregion")

.Fields("ccity").Value = Request.Form("txtccity")

.Fields("caddress").Value = Request.Form("txtcaddress")

.Update

End With

ViewCustomers

End If

'запрос на добавление записи

If Request.QueryString.Item (1) = "begininput" Then

'отобразить форму для ввода

Customer.WriteTemplate

End If

Else

ViewCustomers

End If

End Sub

'просмотр всех записей

Private Sub ViewCustomers ()

With Response

.Clear

.Write "<HTML>"

.Write "<P align=center> Список покупателей </Р>"

.Write "<FORM NAME=frmOutputCustomer METHOD=POST ACTION=default.asp?mode=begininput>"

.Write "<INPUT name=btnAdd type=submit уа1ие=Добавить>"

If Not (mrstCustomer.BOF And mrstCustomer.EOF) Then

mrstCustomer.MoveFirst

.Write "<TABLE border=l>"

.Write "<TR>"

.Write "<TD><P align=center> Компания </TD>"

.Write "<TD><P align=center> Фамилия </TD>"

.Write "<TD><P align=center> Имя </TD>"

.Write "<TD><P align=center> Отчество </TD>"

.Write "</TR>"

Do Until mrstCustomer.EOF

.Write "<TR>"

.Write "<TD>" & mrstCustomer.Fields("ccompany") & "</TD>"

.Write "<TD>" & mrstCustomer.Fields("clastname") & "</TD>"

.Write "<TD>" & nirstCustomer.Fields("cfirstname") & "</TD>"

.Write "<TD>" & mrstCustomer.Fields("csecondname") & "</TD>"

.Write "</TR>"

mrstCustomer.MoveNext

Loop

.Write "</TABLE>"

End If

.Write "</FORM>"

.Write "</HTML>"

End With

End Sub

Private Sub WebClass_Initialize ()

Set mcnnCustomer = New ADODB.Connection

mcnnCustomer.CursorLocation = adUseClient

mcnnCustomer.Provider = "SQLOLEDB.1"

mcnnCustomer.CommandTimeout = 300

"строка для соединения, имя пользователя, пароль

mcnnCustomer.Open "Data Source= MYSERVER; Initial Catalog=SALES", "SYSADM", "SYSADM"

Set mrstCustomer = New ADODB.Recordset

mrstCustomer.Open "Customer", mcnnCustomer, adOpenKeyset, adLockOptimistic, adCmdTable

End Sub

Private Sub WebClass Terminate()

mrstCustomer.Close

Set mrstCustomer = Nothing

mcnnCustomer.Close

Set mcnnCustomer = Nothing

End Sub

Запустите проект. Перед вами достаточно простое Internet-приложение, обменивающееся информацией с базой данных и предоставляющее пользователю Web интерактивные средства для работы с этой информацией.

Замечание

Реальные Internet-приложения гораздо сложнее. Однако в нашем примере мы попытались дать тот минимальный материал, который поможет вам в дальнейшем при освоении принципов проектирования для World Wide Web.

назад | содержание | вперед

Hosting uCoz