Что такое Активные Страницы (Active Server
Pages - ASP)?
Смесь средств программирования с использованием
HTML(гипертекст), чтение и запись в базу данных посредством ODBC (Открытое
подключение к базе данных), масса других возможностей не требующих применения,
но похожих на такие средства программирования как CGI, JavaScript, Perl, ActiveX
и ISAPI.
Активные страницы не требуют специфичных броузеров (browser).
Все скрипты (программы) (далее примеры выделены красным текстом) запускаются и
выполняются на сервере, причем броузер получает только результирующие HTML-файлы
и не требует от броузера чего-то особенного.
Прекрасная идея Microsoft
состоит в отсутствии необходимости применения разобщенных инструментов
программирования для Web.
Пример 1: Команда IF в HTML
<% if now()=1/1/98 %>
Это новый, 1998 год.<p>
<% else %>
Это просто обычный день<p>
<% end if %>
Пример 2: HTML-текст, зависящий от типа броузера
<%Set bc=Server.CreateObject("MSWC.BrowserType")%>
<table border=1>
<tr><td>Броузер:r</td><td> <%= bc.browser %>
<tr><td>Его версия:</td><td> <%= bc.version %> </td></TR>
<tr><td>Поддерживает фреймы?</td><td>
<% if (bc.frames = TRUE) then %>
Да, можно использовать фреймы!</p>
<% else %>
Нельзя использовать фреймы!</p>
<% end if %> </td></TR>
<tr><td>Таблицы:</td><td>
<% if (bc.tables = TRUE) then %>
таблицы разрешены</p>
<% else %>
Таблицы использовать нельзя</p>
<% end if %> </td></TR>
Пример 3: базы данных с HTML
<%Set Connection=Server.CreateObject("ADODB.Connection")
Connection.Open "DSN=MyODBCdatabaseonServer"
S="SELECT DISTINCT city,zipcode FROM Client ORDER BY zipcode"
Set rs = Connection.Execute (S)%>
<FORM ACTION="/scripts/dropdown1.asp" METHOD = "POST" name="listall">
<select name="Выберите город:" size="1">
<option value="" selected>Ничего не выбрано...
<%Do Until rs.eof %>
<option value="<%=rs("City")%>"><%=rs("city")%></option>
<% rs.MoveNext
CurrentRecord = CurrentRecord + 1
Loop
rs.Close%>
</select>
Что такое серьезная совместимость?
Какой сервер мне нужен для работы ASP?
Internet Information Server версии 3 для Windows NT является бесплатным продуктом и управляет страницами ASP. Перейдите на секцию download чтобы получить ссылку на страницу download компании Microsoft. Откуда вы сможете получить данный продукт.
ASP для других серверов от компании
Chilisoft
ASP это бесплатное приложение из пакета IIS 3.0 или
версией выше, но если вы используете другой сервер то Chili!ASP для вас будет
полнофункциональным аналогом Microsoft's ASP - сервера, позволяющего работать на
серверах отличных от IIS. К примеру это Netscape Enterprise сервер, Netscape
FastTrack сервер, ISAPI-совместимый сервер, IBM ICSS 4.2 сервер и конечно же
сервер по UNIX-платформу. Chili!ASP полностью поддерживает ActiveX-компоненты
построенные на Java, C++, VB, Delphi и языках скрипта, таких как VBScript,
J-Script, и HTML.
Данный сервер доступен на http://www.chilisoft.com/
Microsoft's
Personal Web Server (персональный web-сервер), когда он комбинирован с IIS 3.0,
то может обслуживать страницы ASP. Перейдите в раздел download для получения
прямых ссылок на раздел получения бесплатного програмного обеспечения компании
Microsoft.
Формы (Forms) позволяют запросить у пользователя информацию требуемую для дальнейшие работы сервера, например, "права доступа" для регистрации или комментарии о работе сервера. Формы составляются из одного (или нескольких) запросов к пользователю, ответом на которые должен быть ввод текста или выбор условий.
Передаваемая на сервер информация активизирует специальную программу для ее обработки (CGI Script). Активные программы помимо обработки запросов от пользователя, могут выполнять множество различных функций таких как: формирование активных WWW страниц, обращение к базам данных, поиск информации на сервере, запуск вычислительных программ и выполнения разрешенных, в зависимости от ответа пользователя, действий по дальнейшему предоставлению информации.
Взаимодействие активных программ с протоколом передачи гипертекста (HTTP) организовано через спецификацию интерфейса между сервером http и внешними, вызываемыми программами ( CGI - Common Gateway Interface, ASP и т.д).
Для создания формы используется команда (TAG) FORM, внутри которой содержатся как минимум одна команда INPUT.
Команда FORM задает тип запроса информации от пользователя.
Команда INPUT определяет способ и адрес для запрашиваемой от пользователя информации.
Пример задания формы:
<FORM ACTION="http://intranet/local" METHOD=POST> <P>Имя пользователя <BR> <INPUT NAME="CONTROL1" TYPE=TEXTBOX VALUE="Введите Ваше имя"> <P>Пароль <BR><INPUT TYPE="PASSWORD" NAME="CONTROL2"> <P>Выберете цвет <BR><INPUT TYPE="RADIO" NAME="CONTROL3" VALUE="0" CHECKED>Красный <INPUT TYPE="RADIO" NAME="CONTROL3" VALUE="1">Зеленый <INPUT TYPE="RADIO" NAME="CONTROL3" VALUE="2">Голубой <P>Ваши комментарии <BR><INPUT TYPE="TEXTAREA" NAME="CONTROL4" SIZE="20,5 MAXLENGTH="250"> <P><INPUT NAME="CONTROL5" TYPE=CHECKBOX CHECKED>Подтвердить получение <P><INPUT TYPE="SUBMIT" VALUE="Готово"><INPUT TYPE="RESET" VALUE="Отменить"> </FORM> |
Что даст:
Базы данных ASP
Базы данных это один из самых современнейших подходов к созданию web-серверов. Сложно даже перечислить примеры приложений, которые могли-бы использовать базы данных. Способность ASP использовать базы данных - одна из самых сильных ее сторон. Далле хотим представить вам небольшой путефодитель по написанию своих собственных скриптов с использованием баз данных.
Перед использованием баз данных в своем скрипте вам необходимо понять
некоторые основы взаимодействия вашего скрипта с самой базой данных.
В своих
разработках я использую обычно базу данных MS Access 2.0, но вы можете
использовать и другие (такие как Dbase, Paradox, SQL, и т.д.). В своих, не очень
объемных, приложениях для связи скрипта с базой данных мною используется ODBC
(Open DataBase Connectivity). Данный механизм позволяет вам использовать одну и
туже базу данных для доступа к ней через web и одновременно, к примеру, на
других рабочих станциях вашей локальной сети. Чтобы открыть доступ к базе вашему
скрипту, вы должны сначала настроить свой ODBC. (В дальнейшем все сказанное
приложено к MS Windows 95 или NT). Для этого (если ODBC уже инсталирован на
вашей машине) необходимо загрузить "Панель управления" (Control Panel) и
кликнуть на иконке с надписью ODBC.
Затем, выберите закладку System DSN и
нажмите кнопку Add (добавить). В появившемся окне выберите тип используемой вами
базы данных (к примеру Microsoft Access driver или Microsoft DBase driver).
Нажмите кнопку Done (готово). Появилось новое окно, которое будет описывать
подключение и его параметры к вашей базе данных. В строке Data Source (Источник
данных) напишите имя, через которое вы будете в дальнейшем обращаться к своей
базе, к примеру, GuestBook (Имя не должно содержать пробелов). В строке
Description вы можете ввести пояснения. Они ни на что не влияют. Теперь вам
предстоит выбрать путь к самой базе данных. Для этого нажмите на кнопку Select.
В открывшемся окне укажите путь и файл самой базы. Нажмите Ok. Если вам
необходимо, то вы можете указать имя и пароль к базе данных, в случае если для
доступа к последней применен ограниченный доступ.
Нажмите OK в окне Advanced
и OK в окне, в котором вы указывали путь к базе.
Теперь вы можете закрыть
ODBC и использовать вновь созданный DSN (источник данных).
Так как в одной базе данных MS Access 2.0 может содержаться несколько таблиц, то при обращении к любой таблице базы данных вы все равно должны будете устанавливать соединение через ваш DSN.
Далее приведем пример того, как вам можно вывести клиенту данные из таблицы My базы данных GuestBook созданной в MS Access 2.
1 <html>
2 <head>
3
<TITLE>Пример чтения базы данных</TITLE>
4 </head>
5
<body bgcolor="#FFFFFF">
6 <%
7 ' Нам необходимо сначала создать
соединение (MyConnection) с базой данных
8 ' Следущая строка выполняет данное
действие
9 set MyConnection=server.createobject("adodb.connection")
10 '
Теперь мы откроем это соединение для работы
11 MyConnection.open
"GuestBook","petr","mypassword"
12 ' Значение "GuestBook" - имя источника
DSN
13 ' Значение - petr - имя пользователя для доступа к базе, mypassword -
пароль.
14 set RecSet=MyConnection.Execute("select guest from My")
15
response.write("Наши гости: <br><hr>")
16 ' Создаем цикл и
выводим всех гостей
17 do while not RecSet.eof
18
response.write(RecSet("guest"))
19 RecSet.MoveNext
20 loop
21 '
Закрытие соединений
22 MyConnection.close%>
23 </BODY>
24
</HTML>
Во втором примере мы, используя запросы к базе данных создадим форму HTML с элементом ListBox (ниспадающее меню - или по простому список).
1 <html>
2 <head>
3
<TITLE>Пример чтения базы данных</TITLE>
4 </head>
5
<body bgcolor="#FFFFFF">
6 <%
7 ' Нам необходимо сначала создать
соединение (MyConnection) с базой данных
8 ' Следущая строка выполняет данное
действие
9 set MyConnection=server.createobject("adodb.connection")
10 '
Теперь мы откроем это соединение для работы
11 MyConnection.open
"GuestBook","petr","mypassword"
12 ' Значение "GuestBook" - имя источника
DSN
13 ' Значение - petr - имя пользователя для доступа к базе, mypassword -
пароль.
14 set RecSet=MyConnection.Execute("select guest from My")
15
response.write("Наши гости: <br><hr>")
16
response.write("<form><select>")
17 ' Создаем цикл и выводим всех
гостей в HTML-форму!
18 do while not RecSet.eof
19
response.write("<option> " & RecSet("guest") & "
</option>")
20 RecSet.MoveNext
21 loop
22
%></select>
23 </form>
24 <% ' Закрытие соединений
25
MyConnection.close%>
26 </BODY>
27
</HTML>
Подключение (include) файлов
Данная функция позволяет создавать цепочки фалов, которые могут использоваться в разных контекстах. В любом месте своего .ASP-файла можно включить команду include и подключить к текущему скрипту текст другого. Примеры:
<!--#include virtual="myScript.asp"-->
<!--#include file="myScript.asp"-->
Многие, кстати, используют расширение .inc для подключаемых файлов. Любое расширение подойдет в данном случае.
Замечание: Включеаемые файлоы всегда выполняются и включаются перед! ASP скриптом на текущей страничке. И та страница, которая имеет IF'ы или CASE'ы для выборного подключения файлов всегда включают файл ПЕРЕД выполнением скрипта!!!
Форматирование числовых значений
Очень часто при написании активных страниц нам бывает необходимо производить вывод в HTML числовых значений. Вывод последних зачастую требует их выравнивания (по количеству знаков после запятой, по обозначению и выделению триады цифр в больших числах). Данный пример показывает, как можно использовать встроенную функцию языка VisualBasic для проведения форматирования чисел.
Функция FormatNumber имеет следующий синтаксис:
FormatNumber(выражение, десятичныеЗнаки, лидирующиеНули, округлениеОтрицательныхДробных,выделятьТриаду)
выражение | Числовое значение для форматирования |
десятичныеЗнаки | Количество знаков после запятой для отображения числа |
лидирующиеНули | Выводить или нет лидирующие нули перед отформатированным числом 1 - выдодить нули 0 - не выводить нули |
округлениеОтрицательныхДробных | Нужно ли округлять отрицательные дробные числа 1 - округлять 0 - не округлять |
выделятьТриаду | Нужно ли выделять триады цифр в отформатированном числе (в
соответствии с установками в контрольной панели вашего компьютера) 1 - нужно выделять триады 0 - не нужно выделять |
Формы и их обработка
Формы - это основной метод передачи информации от пользователя к серверу информации через ASP. Формы на web содержат таги которые передаются к браузеру, который в свою очередь показывает эти поля на экране и позволяет их заполнять. Большинство элементов страницы (к примеру header, table, text и т.д.) передаются самим сервером. Поля ввода передаются сервером браузеру в виде структуры, и затем уже браузер принимает пользовательский ввод и заполняет поля. Теперь страницы, содержащие формы могут иметь расширение .ASP и тогда браузер сможет возвратить серверу информацию, которая будет обработана сервером как ASP и ваш код будет иметь доступ к информации, введеной пользователем.
HTML формы используют теперь ASP (или же любой другой язык, поддерживаемый web). ASP позволит вам использовать объекты, такие как таги описания формы, фиксированные объекты, объекты пользовательского ввода и объекты пользовательского выбора.
Таги описания формы создают форму и устанавливают условия того, как сервер
должен будет управлять информаицей, которую вводит
пользователь.
Фиксированные объекты это HTML-компоненты страницы, такие как,
например title, graphics и т.д. Эти данные никогда не меняются. Также
пользователь ничего не делает с этими элементами и они возращаются неизмененными
на сервер.
Объекты пользовательского ввода это объекты типа строки ввода
текста, радио-кнопок,
или же кнопок
выбора. Эти объекты являются наиболее основными компонентами форм. Они
обычно также называются полями.
Для правильной обработки форм вам необходимо разобраться с двумя основными
методами передачи данных из формы к серверу. Итак существует два метода -
GET и POST.
Метод GET передает данные из полей формы в
URL запроса. То есть при нажатии кнопки Submit формируется URL со значениями
полей формы:
К примеру russia.activeserverpages.com/SomeMyScript.asp?name=Marat&surname=Prazdnikow.
Данный пример показывает, как передаются параметры из формы - из строки ввода
name и строки surname. Из примера видно, что параметры и значения формы
передаются парами - параметр=значение и разделены символом &.
Для доступа
к этим параметрам вам необходимо воспользоваться методом
Request.Querystring("параметр").
Метод POST передает параметры и их
значения из формы в заголовке запроса, а не через URL. Для доступа к таким
параметрам необходимо воспользоваться методом Request.Form("параметр").
Поле ввода текста |
Далее следует описание тагов для использования в формах.
В данном разделе
мы попробуем создать форму, как часть HTML-файла.
Форма всегда имеет следующий вид:
<FORM
Action="MyResponse.asp">
..... здесь описываются все поля формы (ввод
текста, выбор, кнопи и т.д.)
</FORM>
В окне браузера
имеет вид:
Первая и последняя строки данного примера содержат таги для создания формы -
<FORM> и </FORM>. Открывающий таг также содержит один или несколько
допонительных параметров, причем слева стоит название параметра а справа через
знак равенства присвоено значение данному параметру. Параметр Action показывает
имя кода (в нашем случае MyResponse.asp), который будет запущен, когда
пользователь нажмет на кнопку Submit. Когда пользователь нажмет указанную кнопку
произойдет 2 различных события. Во-первых браузер передает данные из полей ввода
серверу, а во-вторых сервер запустит код, указанный вами в параметре
Action.
Последний элемент создания формы - это создание кнопок типа Submit и
Reset, что и будет продемонстрированно ниже:
<FORM Action="MyResponse.asp">
...здесь
описываются поля формы....
<p><Input type="submit"> <input
type="reset">
</FORM>
Теперь мы создали скелет формы, которая будет работать правильно. Вам
остается только добавить описание полей внутри формы.
Хочу обратить внимание
на таги <input> . В данном таге существуют параметры, такие как type,
value. Таг type описывает тип элемента формы.
Строка ввода. Описание далее представляет создание объекта пользовательского ввода, строка ввода текста.
Текстовое поле создается достаточно просто:
<INPUT NAME="field1">
Данный таг
создаст строку ввода размером заданным по умолчанию и браузер передает данные,
введенные пользователем серверу, причем значение передается под меткой
field1.
Вы можете также управлять размером области ввода текста как показывает пример
ниже:
<INPUT NAME="field1"
SIZE="5">
Число приравненное к параметру size показывает,
какое количество символов будет выведено в область ввода. Это значение не
является ограничением на количество вводимых символов. Поэтому этот параметр
нельзя использовать в качестве ограничителя ввода пользователя.
Вы можете управлять ограничением вводимых символов следующим
образом:
<INPUT NAME="field1"
MAXLENGHT="40">
Вы также можете вывести в форму значение по умолчанию, которое пользователь
сможет либо принять либо изменить на собственное.
<INPUT NAME="feild1"
VALUE="г.Москва">
Название города быдет выведено как
только форма отобразиться в окне браузера. Некоторые программисты любят выводить
в текстовые поля по умолчанию значения-подсказки типа "Введите название вашего
города".
Ниже приведеи пример создания простой формы:
1 <html>
2 <head>
3 <body
bgcolor="#FFFFFF">
4 <FORM action="MyResponse.asp">
5 Это пример
по использованию форм!
6 <p>Введите сюда ваше имя:
7 <input
type="text" name="name">
8 <input type="submit">
9
</form>
1 <hr>
2 <FORM
action="MyResponse.asp">
3 Это пример на ту же тему №2
4
<p>Введите ваше имя:
5 <input name="name" size=40>
6 <input
type="submit">
7 </FORM>
8 <hr>
1 <FORM action="MyResponse.asp">
2 Это
пример №3
3 Пожалуйста введите ваш почтовый индекс:
4 <input
name="Index" MaxLength="6">
5 <input type="submit">
6
</FORM>
1 <FORM action="MyResponse.asp">
2 Это
пример формы №4
3 Введите название вашего города:
4 <input name="name"
value="Москва">
5 <input type="submit">
6
</FORM>
1 <FORM action="MyResponse.asp">
2 Это
пример №5
3 Введите сюда ваш индекс
4 <input name="Index" MaxLenght="6"
value="Ваш индекс">
5 <input type="submit">
6 </FORM>
7
<hr>
8
9 </body>
10 </html>
Поле CheckBox |
Вы можете использовать в своих формах такой элемент, как CheckBox -
независимый элемент выбора с двумя состояниями (выбран-не выбран).
Данный
элемент имеет следующий вид на странице:
Параметры из данного элемента передаются на сервер отделно для
каждой CheckBox, и соответственно каждый этот элемент имеет свое уникальное имя.
Также для данного элемента устанавливается значение в параметре value которое
указывает на его "выбранность".
Далее мы приводим текст, использующий данный
элемент:
<FORM action="MyResponse.asp">
<p>Каким образом вы хотите
получить информацию от нас?</p>
<p>
<input type="checkbox"
name="post">По почте<br>
<input type="checkbox"
name="email">E-mail'ом<br>
<input type="checkbox"
name="dhl">Воспользуюсь услугами DHL<br>
<input type="checkbox"
name="fax">По факсу<br>
Пример текста с использованием форм:
1 <html>
2 <head>
3
<body>
4
5 <FORM action="MyResponse.asp" method="post">
6
Пример №1<br>
7 Как вы будете получать от нас
информацию?<br>
8 <p>
9 <input type="checkbox"
name="post">По почте<br>
10 <input type="checkbox"
name="email">E-mail'ом<br>
11 <input type="checkbox"
name="dhl">Воспользуюсь услугами DHL<br>
12 <input
type="checkbox" name="fax">По факсу<br>
13 <input
type="submit"><input type="reset">
14 </FORM>
15
<hr>
16 </body>
17 </html>
Поле Радио Кнопки |
Все ваши объекты для пользовательского ввода в форме должны иметь свои собственные имена (уникальные) которые могли-бы быть опознаны браузером и затем переданы из этих компонент к серверу (ASP). Для группы кнопок определяется одно только имя, причем результатом выбора одного из значения является присвоение имени группы кнопок значения, которое имеет выбранный элемент группы. Элемент - радио-кнопки очень похож на настоящий радио кнопки. Нажимаешь одну - отжимается другая.
Язык HTML требует, что-бы один из вариантов выбора в данном элементе (поле) был изначально выбран. Достигается это параметром CHECKED. Он будет выбран при выводе формы в браузер.
Совместимость броузера
Скрипт ниже демонстрирует наиболее общей подход к наиболее общим свойствам
Броузера (и понятиям совместимости).
1
<TITLE>www.mftcomp.ru/asp/samples/browsercap.htm</TITLE>
2
<body bgcolor="#FFFFFF">
3 <% Set bc =
Server.CreateObject("MSWC.BrowserType") %>
4 Browser Name: <%=
bc.browser %><p>
5 Browser Version: <%= bc.version
%><p>
6
7 <% if (bc.frames = TRUE) then %>
8 I noticed
you do frames<p>
9 <% else %>
10 I noticed you are frame
challenged<p>
11 <% end if %>
12 <% if (bc.tables = TRUE)
then %>
13 I noticed you do tables<p>
14 <% else %>
15
I noticed you can't do tables<p>
16 <% end if %>
17 <% if
(bc.BackgroundSounds = TRUE)then %>
18 I noticed you allow me to play
music<p>
19 <% else %>
20 I noticed you aren't a music
listener<p>
21 <% end if %>
22
23 <% if (bc.vbscript =
TRUE) then %>
24 I noticed you are VBscript capable<p>
25 <%
else %>
26 I noticed you can't understand VB Script<p>
27 <%
end if %>
28
29 <% if (bc.javascript = TRUE) then %>
30 I
noticed you understand JScript<p>
31 <% else %>
32 I noticed
you don't understand JScript<p>
33 <% end if %>
34
</BODY>
35 </HTML>
Выражение CASE
Если оператор IF позволяет нам делать двоякий выбор, то CASE как раз позволяет выполнять по условию множество действий.
Первый пример использования CASE:
1 <TITLE>case</TITLE>
2 <%
3
dim name
4 name = "Петров"
5 Select Case
name
6 case
"Петров", "Сидоров", "Иванов"
7 response.write "Это наши друзья! "
8
case
"Васильев"
9 response.write "А это не наш
сотрудник "
10 case
"Брежнев"
11 response.write "А это бывший
секретарь ЦК "
12 End
Select
13 %>
В данном примере мы видим, что оператор CASE (в 5 строке) проверяет по условию переменную name. В зависимости от ее значения будет выполнен лишь один из случаев (case в строках 6,8,10) при котором действием будет являться вывод в HTML одной из строк. В нашем случае это строка "ЭТО НАШИ ДРУЗЬЯ!".
1 <%
2 dim x
3 dim y
4 x = 100
5 y
= 0
6 select Case
x
7 case <4000
8
y = 1
9 End Select
10 response.write("Значение x= " & x)
11
response.write(", значение y= " & y)
12 %>
13 </BODY>
14
</HTML>
Второй пример показывает следующие:
В строках 2-5 происходит определение и присваивание значений переменным x и y. В строке 6 происходит проверка условия, а именно значения переменной x. Если его значение меньше 4000 (что и есть в нашем случае) то в строке 8 переменной y будет присвоено значение 1. В противном случае (если x будет больне 4000) то переменной y значение присваиваться не будет, и ее значение останется равным 0 (см. строку 5).
В результате выполнения скрипта в HTML будет выведено
сделующие:
Значение x=100, значение y=1
Выражение IF
Два примера выражения If Then приведены ниже:
1 <TITLE>Выражение IF</TITLE>
2
<%
3 'пример, где только один вариант действия
4 dim name
5 name =
"Петров"
6 if name
= "Петров" then
response.write "Да, это Петров тут!"
1 ' Второй пример
2 'Определяем переменные x и
y
3 dim x
4 dim y
5 x = 100
6 if x > 100 then y = 0
7
else y=1
8
response.write(y)
9 end if%>
10 </BODY>
11 </HTML>
Первый пример показывает следующие:
Если значение переменной NAME (строка 7) будет равно строке "Петров", тогда будет выполнена функция response.write, которая в свою очередь "выведет" в HTML строчку "Да, это Петров".
Второй пример показывает следующее:
В строке 3 и 4 определяем переменные x и y. В 5 строке присваиваем переменной x значение 100. В строке 6 проверяем - если x больше 100, тогда переменной y присваиваем 0, если в противном случае присваиваем y 1. А в строке 8 мы выводим на HTML значение нашей переменной y.