До сих пор все примеры приложений в этой книге касались консольных приложений и приложений Windows Forms. В этой главе и далее мы выясним, каким образом платформа .NET упрощает задачу построения приложений о интерфейсом на основе браузера, Но сначала мы обсудим ряд ключевых для Web понятий (таких, как HTTP, HTML, сценарий клиента и сервера), а также роль Web-сервера (включая сервер разработки ASP.NET, WebDev.Webserver.exe),
На основе полученной информации в оставшейся части главы мы сконцентрируемся на компонентах ASP.NET (включая усовершенствованную модель страницы с внешним кодом поддержки) и на использовании Web-элементов управления ASP.NET. Вы увидите, что ASP.NET 2.0 предлагает целый ряд новых элементов управления, новую модель "шаблона" страницы и новые возможности настройки Web-страниц.
Web-приложения очень сильно отличаются от традиционных приложений для настольных систем. Первым очевидным отличием является то, что любое реальное Web-приложение предполагает использование, как минимум, двух соединенных в сеть, машин (конечно, при разработке приложения вполне возможно, чтобы роли клиента и сервера играла одна машина). Задействованные машины должны согласовать использование определенного сетевого протокола для успешного осуществления отправки и приёма данных. Сетевым протоколом, соединяющим компьютеры в рассматриваемом нами случае, является протокол HTTP (Hypertext Transfer Protocol – протокол передачи гипертекста).
Когда машина-клиент запускает Web-браузер (такой, как Netscape Navigator, Mozilla Firefox или Microsoft Internet Explorer), генерируется HTTP-запрос доступа к конкретному ресурсу (например, к файлу *.aspx или *.htm) на удаленной машине-сервере. Протокол HTTP – это текстовый протокол, построенный на стандартной парадигме запросов и ответов. Например, при обращении к http://www.IntertechTraining.com программное обеспечение браузера использует Web-технологию, называемую сервисом DNS (Domain Name Service – служба имен доменов), которая позволяет превратить зарегистрированный адрес URL в 4-байтовое (32-разрядное) числовое значение (называемое IP-адресом). После этого браузер открывает сокет (обычно через порт с номером 80) и посылает HTTP-запрос странице, используемой Web-узлом http://www.IntertechTraining.com по умолчанию. Осуществляющий хостинг Web-сервер получает поступающий HTTP-запрос, и указанный в запросе ресурс может содержать программную логику, способную прочитать значения, введенные клиентом (например, в окне текстового блока), чтобы сформировать HTTP-ответ, Разработчик Web-программы может использовать любые технологии (CGI, ASP, ASP.NET, сервлеты Java и т.д.), чтобы динамически генерировать содержимое HTTP-ответа. Затем браузер клиента отображает HTML-код, полученный от Web-сервера. На рис. 23.1 показана общая схема цикла запросов-ответов HTTP.
Рис. 23.1. Цикл запросов и ответов HTTP
Другой особенностью Web-разработки, заметно отличающей ее от программирования традиционных приложений, оказывается то, что протокол HTTP является сетевым протоколом, не сохраняющим состояние. Как только Web-сервер отправляет ответ клиенту, вся информация о предыдущем взаимодействии оказывается "забытой". Поэтому на вас, как Web-разработчика, возлагается задача принятия специальных мер, обеспечивающих "запоминание" соответствующей информации о клиентах, которые в настоящий момент оказываются зарегистрированными на вашем узле (такой информацией может быть, например, список товаров в корзине покупателя). В следующей главе вы сможете убедиться в том, что ASP.NET обеспечивает целый ряд способов обработки состояния, причем как стандартных для всех Web-платформ (это сеансовые переменные, файлы cookie и переменные приложения), так и новых (визуальные состояния, состояния элементов и кэш).
Под Web-приложением можно понимать коллекцию файлов (*.htm, *.asp, '*.aspx, файлы изображений и т.д.) и связанных компонентов (например, таких как библиотека программного кода .NET), хранимых в отдельном семействе каталогов на данном Web-сервере. Как будет показано в главе 24, Web-приложения имеют специфический цикл существования и поддерживают множество специальных событий (например, события начальной загрузки и окончательного завершения работы), которые вы можете обработать.
Web-сервер - это программный продукт, обеспечивающий хостинг для ваших Web-приложений, и, как правило, предлагающий целый ряд сопутствующих сервисов, таких как, например, интегрированные службы безопасности, поддержка FTP (File Transfer Protocol – протокол передачи файлов), службы обмена почтовыми сообщениями и т.д. Web-сервером производственного уровня является сервер IIS (Internet Information Server – информационный сервер Интернет) от Microsoft, который, как вы можете догадаться, предлагает внутреннюю поддержку и "классических" Web-приложений ASP, и Web-приложений ASP.NET.
При создании Web-приложений ASP.NET вам потребуется взаимодействие с IIS. И здесь важно подчеркнуть, что сервер IIS по умолчанию при установке Windows Server 2003 или Windows XP Professional Edition не устанавливается (а среда Windows XP Home Edition поддержку IIS не предлагает вообще). Поэтому, в зависимости от конфигурации вашей машины разработки, вам, возможно, придется установить IIS вручную. Для этого откройте окно Установка и удаление программ (Add/Remove Program) из папки Панель управления (Control Panel) и выберите в нем Установка компонентов Windows (Add/Remove Windows Components).
Замечание. Сервер IIS лучше установить до установки .NET Framework. Если установить IIS после установки .NET Framework, то Web-приложения ASP.NET не будут выполняться корректно (вы увидите только пустые страницы). К счастью, можно настроить IIS на поддержку .NET-приложе-ний с помощью запуска утилиты командной строки aspnet_regiis.exe (с флагом /i).
В предположении о том, что на вашей рабочей станции сервер IIS установлен должным образом, вы сможете взаимодействовать с IIS из папки Администрирование (размещенной в папке Панель управления). Для работы с материалом этой шалы нас будет интересовать только узел Web-узел по умолчанию (Default Web Site), рис. 23.1.
Рис. 23.2. Окно оснастки IIS
Одна инсталляция IIS способна обслуживать множество Web-приложений, каждое из которых размещается в своем виртуальном каталоге. Каждый виртуальный каталог проецируется в физический каталог на локальном жестком диске. Так, если вы создадите новый виртуальный каталог с именем CarsRUs, внешние пользователи смогут просматривать этот узел, используя, например, адрес URL http://www.CarsRUs.com (в предположении о том, что IР-адрес вашего узла имеет всемирную регистрацию). В фоновом режиме виртуальный каталог отображается в соответствующий физический корневой каталог, например, в C:\inetpub\www-root\AspNetCarsSite, в котором находится содержимое Web-приложения.
При создании Web-приложения ASP.NET с помощью Visual Studio 2005 вы имеете возможность генерировать новый виртуальный каталог для текущего Web-узла. Вы также можете создать виртуальный каталог вручную. Для примера предположим, что нам нужно создать простое Web-приложение с именем Cars. Первым шагом при этом оказывается создание на машине новой папки (например, папки C:\CodeTests\CarsWebSite), которая будет содержать коллекцию файлов, компонующих новый узел.
Затем нужно создать новый виртуальный каталог для узла Cars. Просто щелкните в окне IIS правой кнопкой мыши в строке Веб-узел по умолчанию и выберите Создать→Виртуальный каталог из появившегося контекстного меню. Будет запущен интегрированный мастер создания виртуальных каталогов. Перейдите от окна приветствия к следующему окну и укажите для вашего Web-узла подходящий псевдоним (Cars). Далее вас попросят указать физическую папку на жестком диске, которая содержит файлы и изображения, используемые для этого узла (для нашего примера это папка C:\CodeTests\CarsWebSite).
На заключительном шаге мастер запрашивает информацию о правах доступа к новому виртуальному каталогу (разрешение доступа к файлам дли чтения/записи, обзора файлов с помощью Web-браузера, запуска выполняемых файлов и т.д.), Для нашего примера вполне подойдет вариант выбора, предлагаемый мастером по умолчанию (тем более, что вы в любое время можете изменить эти настройки, открыв окно свойств с помощью щелчка правой кнопкой мыши в любом из окон, интегрированных в IIS). По завершении работы мастера вы увидите в окне IIS новый виртуальный каталог (рис. 23.3).
Рис. 23.3. Виртуальный каталог Cars
Комплект поставки ASP.NET 2.0 содержит "облегченную" версию Web-сервера под названием WebDev.WebServer.exe. Эта утилита позволяет разработчику осуществлять хостинг Web-приложений ASP.NET 2.0 за границами IIS. С помощью этого инструмента вы можете строить и проверять Web-страницы из любого каталога на своей машине (что очень удобно при разработке сценариев в группе разработчиков и при создании Web-программ ASP.NET 2.0 в среде ОС Windows XP Home Edition, которая не поддерживает US).
Замечание. Сервер WebDev.WebServer.exe нельзя использовать для тестирования "классических" Web-приложений ASP.
При построении Web-узла с помощью Visual Studio 2005 вы имеете возможность использовать WebDev.WebServer.exe для обслуживания создаваемых страниц. Но вы также имеете возможность взаимодействовать с этим инструментом вручную из командной строки .NET. Если ввести команду
WebDev.WebServer.exe -?
вы увидите окно сообщения, в котором будут описаны действительные опции командной строки. В сущности, вам нужно указать неиспользуемый порт с помощью опции /port:, корневой каталог Web-приложения с помощью опции /path: и необязательный виртуальный путь с помощью опции /vpath: (если вы не укажете значение /vpath:, по умолчанию используется значение /). Рассмотрим следующий пример.
WebDev.WebServer.exe /port: 12345 /path:"C:\CodeTests\CarsWebSite"
После ввода этой команды вы можете запустить свой любимый Web-браузер для запроса соответствующих страниц. Так, если в папке CarsWebSite содержится файл с именем MyPage.aspx, вы можете ввести следующий адрес URL.
http://localhost:12345/CarsWebSite/MyPage.aspx
Во многих примерах из этой и следующей глав WebDev.WebServer.exe будет использоваться через Visual Studio 2005. Следует учитывать то, что этот Web-сервер не предназначен для хостинга Web-приложений производственного уровня, он предназначен исключительно для целей разработки и тестирования.
Замечание. Проект Mono (см. главу 1) предлагает бесплатное расширение ASP.NET для Web-сервера Apache. За более подробной информацией обратитесь по адресу: http://www.mono-project.com/ASP.NET
Сконфигурировав каталог для своего Web-приложения, вы должны создать и его содержимое. Напомним, что Web-приложение - это просто термин используемый для обозначения множества файлов, обеспечивающих функционирование узла, Значительная часть этих файлов будет содержать синтаксические лексемы, определенные в рамках HTML (Hypertext Markup Language – язык гипертекстовой разметки). HTML – это стандартный язык, используемый для описания того, как в окне браузера клиента должна выполняться визуализация буквального текста, изображений, внешних ссылок и различных элементов графическом) интерфейса.
Этот специальный аспект Web-разработки является одной из главных причин столь распространенной нелюбви программистов, которую они испытывают к разработке Web-программ. И хотя современные средства Web-разработки (включан Visual Studio 2005) и платформы (такие как ASP.NET) генерируют большинство HTML-кода автоматически, сегодня для успешной работы с ASP.NET все еще важно хорошо понимать этот язык. Данный раздел, конечно же, ни в коей мере не претендует на охват всех аспектов HTML, но давайте рассмотрим основные.
Файл HTML состоит из множества дескрипторов, описывающих представление данной Web-страницы. Как и следует ожидать, базовая структура любого HTML-документа примерно одинакова. Например, файлы *.htm (или, альтернативно, файлы *.html) открываются и закрываются дескрипторами ‹html› и ‹/html›, обычно в них определяется раздел ‹body› и т.д. Следует иметь в виду, что HTML не чувствителен к регистру символов. Поэтому для браузера ‹HTML›, ‹html› и ‹Html› оказываются идентичными.
Для демонстрации некоторых базовых возможностей HTML откройте Visual Studio 2005, создайте пустой HTML-файл, выбрав File→New→File из меню, и сохраните этот файл под именем default.htm в каталоге C:\CodeTests\CarsWebSite. Наша исходная разметка весьма незамысловата.
‹html›
‹body›
‹/body›
‹/html›
Дескрипторы ‹html› и ‹/html› используются для обозначения начала и конца документа. Как вы можете догадаться, Web-браузер использует эти дескрипторы, чтобы выяснить, с какого места следует начать и где следует закончить обработку признаков форматирования, указанных в главной части документа. Почти все содержимое документа определяется в рамках дескриптора ‹body›. Чтобы немного "оживить" страницу, определите ее заголовок так, как показано ниже.
‹html›
‹head›
‹title›Web-страница Cars‹/title›
‹/head›
‹body›
‹/body›
‹/html›
Вы, наверное, догадались, что дескрипторы ‹title› используются для обозначения текстовой строки, которая при вызове этой страницы должна размещаться в строке заголовка окна Web-браузера.
Реальное действие в файле *.htm происходит в рамках элементов ‹form›. HTML-форма - это просто именованная группа связанных элементов пользовательского интерфейса, используемых для сбора данных пользовательского ввода, которые затем передаются Web-приложению по протоколу HTTP. He следует путать HTML-форму со всей областью окна браузера. Фактически HTML-форма представляет собой логическое объединение элементов, размещенных между дескрипторами ‹form› и ‹/form›.
‹html›
‹head›
‹titlе›Web-страница Cars‹/title›
‹/head›
‹body›
‹form id="defaultPage" name="defaultPage"›
‹!-- Место для Web-содержимого --›
‹/form›
‹/body›
‹/html›
Для id и name этой формы указано значение default Page. Как правило, открывающий дескриптор ‹form› задает также атрибут aсtion, указывающий адрес URL, по которому следует передать данные формы, и метод передали этих данных (POST или GET). Эти возможности дескриптора ‹form› мы рассмотрим чуть позже. Пока чего давайте выясним, какие элементы могут размещаться в HTML-форме. В панели инструментов Visual Studio 2005 предлагается специальный раздел HTML, в котором сгруппированы связанные с HTML элементы управления (рис. 23.4).
Рис. 23.4. Раздел HTML в окне панели инструментов
Перед добавлением HTML-элементов в HTML-форму важно заметить, что Visual Studio 2005 позволяет редактировать содержимое файлов *.htm с помощью интегрированного HTML-редактора и окна свойств. При выборе DOCUMENT в окне свойств (рис. 23.5) вы получаете возможность настройки ряда параметров HTML-страницы, например цвета ее фона.
Теперь измените раздел ‹body› файла default.htm так, чтобы отобразить пользователю приглашение ввести имя и пароль, и установите для фона тот цвет, который вам нравится (вы можете вводить и форматировать текстовое содержимое непосредственно в окне НТМL-редактора).
‹html›
‹head›
‹titlе›Web-страница Cars‹/title›
‹/head›
‹body bgcolor="NavajoWhite"›
‹!-- Приглашение ввода для пользователя --›
‹h1 align="center"›Страница входа в систему Cars‹/h1›
‹р align="center"›‹br›Введите ‹i›имя пользователя‹/i› и ‹i›пароль‹/i›.‹/р›
‹form id="defaultPage" name="defaultPage"› ‹/form›
‹/body›
‹/html›
Рис. 23.5. Редактирование HTML-документа средствами VS .NET
Теперь давайте построим саму HTML-форму. Вообще говоря, каждый HTML-элемент описывается с помощью атрибута name (соответствующее значение используется для программной идентификации элемента) и атрибута type (это значение задает вид элемента интерфейса, который вы хотите поместить в рамки декларации ‹form›). В зависимости оттого, с каким элементом интерфейса вы работаете, в окне свойств появляется дополнительные атрибуты, присущие данному конкретному элементу.
Пользовательский интерфейс, который мы собираемся здесь построить, будет содержать два текстовых поля ввода (одно из которых – типа Password) и два кнопочных типа (один для подачи запроса с данными формы, а другой – для сброса данных формы в значения по умолчанию).
‹!-- Построение формы для получения информации от пользователя --›
‹form name="defaultPage" id="defaultPage"›
‹P align="center"›Имя пользователя:
‹input id="txtUserName" type="text" NAME="txtUserName"›
‹/P›
‹P align="center"›пароль:
‹input name="txtPassword" type="password" ID="txtPassword"›
‹/P›
‹P align="center"›
‹input name="btnSubmit" type="submit" value="Отправить" io="btnSubmit"›
‹input name="btnReset" type="reset" value="C6poc" ID="btnReset"›
‹/form›
Обратите внимание на то, что здесь для каждого элемента назначены соответствующие значения name и id (txtUserName, txtPassword, btnSubmit и btnReset). Еще более важно то, что каждый элемент ввода имеет дополнительный атрибут type, который ясно идентифицирует их как вполне определенные элементы пользовательского интерфейса. Например, type="reset" указывает на автоматическую очистку всех полей формы и присвоение им начальных значений, type="password" – маскированный ввод пароля, a type="submit" – отправку данных формы получателю. На рис. 23.6 показан вид получившейся страницы.
Рис. 23.6. Исходный вид страницы, сохранённой в файле default.htm
Данный файл *.htm может содержать блок кода сценария, который будет помещен в ответный поток и обработан браузером, запросившим этот поток. Есть две главные причины, по которым используются сценарии клиента.
• Проверка пользовательского ввода перед отправкой данных Web-серверу.
• Взаимодействие с моделью DOМ целевого браузера.
В отношении первого пункта следует понимать, что "наследственной" проблемой Web-приложений является необходимость частых обращений к серверу (называемых вторичными обращениями) для обновления HTML-кода, отображаемого в окне браузера. И хотя вторичных обращений полностью избежать нельзя, всегда нужно стремиться минимизировать сетевой обмен. Одним из подходов, уменьшающих количество циклов сетевого обмена, является использование сценария клиента для проверка правильности пользовательского ввода перед отправкой данных формы Web-серверу. Если обнаруживается ошибка (например, не указаны данные в одном из обязательных полей), можно предложить пользователю исправить ошибку, не посылая данные Web-серверу напрасно. (В конце концов, ничто не раздражает пользователя больше, чем отправка данных по медленной связи только для того, чтобы получить в ответ совет исправить ошибки ввода!)
В дополнение к проверке пользовательского ввода, сценарии клиента могут также использоваться для взаимодействия с объектной моделью DOM (Document Object Model – объектная модель документов) браузера. Большинство коммерческих браузеров предлагает множество объектов, которые можно использовать для управления поведением браузера. Главным раздражающим фактором здесь является то, что различные браузеры предлагают подобные, но не идентичные объектные модели. Поэтому запущенный вами сценарий клиента, взаимодействующий с DOM, может работать по-разному в разных браузерах.
Замечание. ASP.NET поддерживает свойство HttpRequest.Browser, которое позволяет в среде выполнения определить возможности браузера, отправившего текущий запрос.
Имеется множество языков сценариев, которые могут использоваться для написания программного кода сценариев клиента. Двумя наиболее популярными из них являются VBScript и JavaScript. Язык VBScript представляет собой подмножество языка программирования Visual Basic 6.0. Следует подчеркнуть, что Microsoft Internet Explorer (IE) – это единственный Web-браузер, имеющий встроенную поддержку VBScript клиента. Поэтому если вы хотите, чтобы ваши HTML-страницы работали корректно в любом коммерческом Web-браузере, для программной логики сценариев клиента лучше VBScript не использовать.
Другим популярным языком сценариев является JavaScript. Здесь следует подчеркнуть, что JavaScript никоим образом не является подмножество языка Java. Хотя JavaScript и Java имеют несколько схожий синтаксис, JavaScript нельзя безоговорочно отнести к семейству языков ООП, поэтому этот язык оказывается далеко не таким мощным, как Java. Но здесь важно то, что все современные Web-браузеры поддерживают JavaScript, что делает этот язык естественным кандидатом на роль языка сценариев клиента.
Замечание. Чтобы еще больше усложнить ситуацию, напомним также о JScript.NET – управляемом языке программирования, с помощью которого, используя подобный сценариям синтаксис, можно строить компоновочные блоки .NET.
Чтобы продемонстрировать роль сценариев клиента, давайте выясним, как можно выполнить перехват событий, посылаемых HTML-элементами пользовательского интерфейса клиента. Предположим, что вы добавили в свою HTML-страницу default.htm тип Button (с именем btnHelp), которая должна предоставить пользователю возможность увидеть информацию справки. Чтобы выполнить перехват события Click для этой кнопки, активизируйте окно просмотра HTML и выберите имя кнопки из левого раскрывающегося списка. Затем в правом раскрывающемся списке выберите событие onclick. В результате этого в определение атрибута нового типа Button будет добавлен атрибут onclick.
‹input id="btnHelp" type="button" Value="Help" language="javascript" onclick="return btnHelp_onclick()"/›
Visual Studio 2005 также создаст пустую функцию JavaScript, которая будет вызываться при щелчке пользователя на кнопке. Чтобы отобразить окно сообщения клиента, нужно в пределах этой заглушки просто использовать метод alert().
‹script language="javascript" type="text/javascript"›
‹!--
function btnHelp_onclick() {
alert("Это не так уж трудно. Просто щелкните на кнопке Отправить!");
}
-->
‹/script›
Обратите внимание на то, что блок сценария помещен в рамки HTML-комментария (‹!-- --›). Причина этого очень проста. Если ваша страница окажется в браузере, не поддерживающем JavaScript, программный код будет интерпретирован как комментарий и потому проигнорирован. Конечно, возможности вашей страницы будут более узкими, но зато ваша страница не будет полностью отвергнута браузером.
Теперь давайте добавим в нашу страницу default.htm клиентскую поддержку контроля вводимых в форму данных. Нам нужно, чтобы при щелчке пользователя на кнопке Отправить вызвалась функция JavaScript, которая проверяла бы каждый текстовый блок на пустые значения. При наличии пустого значения должно появиться окно сообщения с указанием ввести правильные данные. Сначала обработайте событие onclick для кнопки Отправить.
‹input name="btnSubmit" type="Submit" value="Submit" id="btnSubmit" languaege="javascript" onclick="return btnSubmit_onclick()"›
Этот обработчик события реализуйте так, как показано ниже.
function btnSubmit_onclick() {
// Если пользователь о чем-то забыл, отобразить сообщение.
if ((defaultPage.txtUserName.value == "") || (defaultPage.txtPassword.value == "")) {
alert("Следует указать имя пользователя и пароль!");
return false;
}
return true;
}
Теперь вы можете открыть свой любимый браузер, перейти к странице default.htm в виртуальном каталоге Cars и проверить работу вашего сценария клиента.
http://localhost/Cars/default.htm
Теперь, когда у вас есть простая HTML-страница, мы должны выяснить, как передать данные формы обратно Web-серверу для обработки. При построении HTML-формы в открывающем дескрипторе ‹form› обычно задается атрибут action, указывающий получателя вводимых в форму данных. Возможными получателями могут быть почтовые серверы, другие файлы HTML, файлы ASP (как "классические", так и .NET) и т.д. Для нашего примера мы используем "классический" файл ASP с именем ClassicAspPage.asp. Обновите свой файл default.htm, указав в нем следующие атрибуты в открывающем дескрипторе ‹form›.
‹form name="defaultPage" id="defaultPage" action="http://localhost/Cars/ClassicAspPage.asp" method = "GET"›
‹/form›
Добавленные атрибуты гарантируют, что при щелчке на кнопке Отправить данные формы будут отправлены файлу ClassicAspPage.asp с указанным URL. Указание method = "GET" для режима передачи означает, что данные формы присоединяются к строке запроса в виде набора пар имен и значений, разделенных символами амперсанда.
http://localhost/Cars/ClassicAspPage.asp?txtUserName=Andrew&txtPassword=abcd123$&btnSubmit=Submit
Другой метод передачи данных формы Web-серверу указывается с помощью method = "POST".
‹form name="defaultPage" id="defaultPage" action="http://localhost/Cars/ClassicAspPage.asp" method = "POST"›
‹/form›
В этом случае данные формы не присоединены к строке запроса, а записываются в отдельной строке в рамках HTTP-заголовка. При использовании POST данные формы будут невидимы для внешнего наблюдателя. Еще более важно то, что POST не имеет ограничений на длину символьных данных (многие браузеры выдвигают ограничения на длину запросов с использованием GET). Пока что для отправки данных формы странице-получателю *.asp мы будем использовать HTTP-метод GET.
"Классическая" ASP-страница является комбинацией HTML и программного кода сценария сервера. Если вы никогда не работали с ASP, вам будет полезно знать, что целью использования ASP является динамическое построение HTML-кода с помощью сценария сервера и небольшого набора классических COM-объектов. Например, вы можете иметь серверный блок VBScript (или JavaScript), который читает таблицу из некоторого источника данных, используя классическую технологию ADO, и возвращает строки в виде HTML-таблицы общего вида.
В нашем примере ASP-страница использует внутренний COM-объект Request, чтобы прочитать введенные в форму данные (присоединенные к строке запроса) и возвратить их обратно вызывающей стороне в виде эхо (не слишком впечатляет, но поставленная задача будет выполнена). Для сценария сервера мы используем VBScript (что обозначено директивой language).
С этой целью создайте новый HTML-файл и сохраните его с именем ClassicAspPage.asp в той папке, куда проецируется ваш виртуальный каталог (например, в папке C:\CodeTests\CarsWebSite). Реализуйте эту страницу так, как предлагается ниже.
‹%@ language="VBScript" %›
‹html›
‹head›
‹titlе›Страница Cars‹/title›
‹body›
‹h1 align="center"›Вот что вы нам прислали:‹/h1›
‹P align="center"›‹b›Имя пользователя: ‹/b›
‹%= Request.QueryString("txtUserName") %›‹br›
‹b›Пароль: ‹/b›
‹%= Request.QueryString("txtPassword") %›‹br›
‹/body›