Я получил в браузере ошибку 500 - Внутренняя ошибка сервера... Error). <STRONG>Ответ:</STRONG> Это описание генерирует Internet Explorer, тем самым

advertisement
Я получил в браузере ошибку 500 - Внутренняя ошибка сервера (500 Internal Server
Error).
<STRONG>Ответ:</STRONG> Это описание генерирует Internet Explorer, тем самым
скрывая истинную ошибку и показывая "дружественное" описание с некоторыми
советами. Для того, чтобы отключить данную функцию и увидеть реальный ответ
сервера (описание ошибки), нужно на вкладке Advanced в диалоге Internet Options
(Tools -> Internet Options) снять флажок "Show friendly HTTP errors".
Тем кто использует для разработки IIS под русской версией Windows может получать в
тексте ошибки нечитаемые символы вместо русских букв. Чтобы это исправить
измените кодировку внутри файла %windir%HelpiisHelpcommon500-100.asp c windows1252 на windows-1251.
Ниже приведен код для работы с базой данных access. Для начала необходимо подключить библиотеку
Microsoft DAO 3.51
В модуле объявляю глобальные переменные
Public rs1 As Recordset
Public db As Database
Создание базы данных фыглядит следующим образом:
On Error Resume Next
Dim ws As Workspace
Set ws = DBEngine.Workspaces(0)
‘Default Workspace
Set db = ws.CreateDatabase(“work_baza”, dbLangCyrillic)
CreateTable db, “fio”
CreateTable_sobitiya db, “sobitiya”
CreateTable db, “operacii”
Private Sub CreateTable_sobitiya(ByRef pDB As Database, ByVal pTableName As String)
Dim tbl As TableDef
Dim fld As Field
Dim col As Field
Dim i As Integer
On Error GoTo Routine_Error
Set tbl = pDB.CreateTableDef(pTableName)
Set fld = tbl.CreateField(“ID”, dbLong):
fld.Attributes = fld.Attributes Or dbAutoIncrField:
tbl.Fields.Append fld
With tbl
Set fld = .CreateField(“Field1″, dbText, 0)
fld.AllowZeroLength = True
.Fields.Append fld
Set fld = .CreateField(“Field2″, dbText, 0)
fld.AllowZeroLength = True
.Fields.Append fld
For i = 3 To 30
Set fld = .CreateField(“Field” + LTrim(Str(i)), dbMemo, 0)
fld.AllowZeroLength = True
.Fields.Append fld
Next i
End With
pDB.TableDefs.Append tbl
Routine_Error:
Set fld = Nothing
Set tbl = Nothing
If Err.Number <> 0 Then Err.Raise Err.Number, Err.Source, Err.Description
End Sub
Private Sub CreateTable(ByRef pDB As Database, ByVal pTableName As String)
Dim tbl As TableDef
Dim fld As Field
Dim col As Field
Dim i As Integer
On Error GoTo Routine_Error
Set tbl = pDB.CreateTableDef(pTableName)
Set fld = tbl.CreateField(“ID”, dbLong):
fld.Attributes = fld.Attributes Or dbAutoIncrField:
tbl.Fields.Append fld
With tbl
For i = 1 To 30
Set fld = .CreateField(“Field” + LTrim(Str(i)), dbMemo, 0)
fld.AllowZeroLength = True
.Fields.Append fld
Next i
End With
pDB.TableDefs.Append tbl
Routine_Error:
Set fld = Nothing
Set tbl = Nothing
If Err.Number <> 0 Then Err.Raise Err.Number, Err.Source, Err.Description
End Sub
Выше был приведен код для создания самой базы и таблиц в ней. Далее идет код по различным
операциям.
Добавление значений
Set db = OpenDatabase(“work_baza.mdb”)
Set rs1 = db.OpenRecordset(“fio”, dbOpenTable)
rs1.AddNew
rs1(“Field1″) = LTrim(LCase(sotrudnik(1).Text))
rs1(“Field2″) = LTrim(LCase(sotrudnik(2).Text))
rs1(“Field3″) = LTrim(LCase(sotrudnik(3).Text))
rs1.Update
rs1.Close
db.Close
Изменение значений
Set db = OpenDatabase(“work_baza.mdb”)
Set rs1 = db.OpenRecordset(“Select * from fio WHERE ID = ” + sotrudnik(0).Text)
rs1.Edit
rs1(“Field1″) = LTrim(LCase(sotrudnik(1).Text))
rs1(“Field2″) = LTrim(LCase(sotrudnik(2).Text))
rs1(“Field3″) = LTrim(LCase(sotrudnik(3).Text))
rs1.Update
rs1.Close
db.Close
Удаление значений
Set db = OpenDatabase(“work_baza.mdb”)
Set rs1 = db.OpenRecordset(“Select * from fio WHERE ID = ” + sotrudnik(0).Text)
rs1.Delete
rs1.Update
rs1.Close
db.Close
Data1.Refresh
Вывод значений
Set db = OpenDatabase(“work_baza.mdb”)
Dim FIELDSTR As String
Set rs1 = db.OpenRecordset(“Select * from operacii”)
Set Form1.Data2.Recordset = rs1
For i = 0 To 30
Form1.MSFlexGrid3.ColWidth(i) = 0
Next i
Form1.MSFlexGrid3.ColWidth(1) = 8000
Form1.MSFlexGrid3.ColWidth(2) = 1000
Да кстати, для работы с БД необходимо подключить компонент DATA и компомент Microsoft Flex Grid и в
его свойствах указать DataSource Data1 (например)
--------------------Работа с файлами в VBScript и ASP:
В этой статье мы рассмотрим возможности VBScript в работе с файлами.
Сам по себе VBScript ограничен документом, в котором содержится сценарий, разве, что может
немного командовать броузером, но не более. Работа с файлами для обычных сценариев не
особо важна(если Вы не планируете создать E-mail червь, или ещё что-нибудь подобное). Но в
ASP-страницах файловые операции намного актуальнее.
Итак, раз VBScript сам не может работать с файловой системой, ему нужен помошник(или
исполнитель, кому, как нравится). Именно для этого создан FileSystemObject.
Создан, то он создан, но как его использовать? Раз это объект, его нужно создать.
Dim FSO " Объявим переменную
"Создаем
Set FSO=CreateObject("Scripting.FileSystemObject")
"Если в ASP, то лучше так.
Set FSO=Server.CreateObject("Scripting.FileSystemObject")
FileSystemObject способен работать с файловой системой на уровне файлов и каталогов, то есть
он может проводить над ними оперции, не меняя содержащуюся в них информацию. Для работы с
ней, он может создавать собственные объекты.
Dim File "Куда же без заготовки
"Если хотите создать файл
Set File=FSO.CreateTextFile(полный_путь)
"Если добавить в файл
Set File=FSO.OpenTextFile(полный_путь,8)
"А если открыть
Set File=FSO.OpenTextFile(полный_путь)
этот код, в свою очередь создаёт объект TextStream. Именно этот объект и проводит все операции
ввода вывода с файлами.
Объект TextStream поддерживает несколько методов и функций.
AtEndOfLine - Определяет достигнут ли конец строки(Boolean).
AtEndOfStream - Определяет достигнут ли конец файла(Boolean).
Column - номер текущего символа в строке.
Line - номер текущей строки.
Close - закрывает файл.
Read(число) - читает указанное количество символов из файла.
ReadLine - читает строку из файла.
Skip(число) - пропускает нужное число символов в строке.
SkipLine - пропускает строку.
Write - записывает символы в файл.
WriteLine - записывает строку в файл.
WriteBlankLines(число) - записывает пустые строки в файл.
Выражение 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.
Выражение 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
5y=0
6 select Case x
7 case <4000
8y=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
Форматирование числовых значений
Очень часто при написании активных страниц нам бывает необходимо производить вывод в HTML числовых значений.
Вывод последних зачастую требует их выравнивания (по количеству знаков после запятой, по обозначению и
выделению триады цифр в больших числах). Данный пример показывает, как можно использовать встроенную функцию
языка VisualBasic для проведения форматирования чисел.
Функция FormatNumber имеет следующий синтаксис:
FormatNumber(выражение, десятичныеЗнаки, лидирующиеНули, округлениеОтрицательныхДробных,выделятьТриаду)
выражение
Числовое значение для форматирования
десятичныеЗнаки
Количество знаков после запятой для отображения числа
лидирующиеНули
Выводить или нет лидирующие нули перед отформатированным числом
1 - выдодить нули
0 - не выводить нули
округлениеОтрицатель Нужно ли округлять отрицательные дробные числа
ныхДробных
1 - округлять
0 - не округлять
выделятьТриаду
Нужно ли выделять триады цифр в отформатированном числе (в соответствии с установками в
контрольной панели вашего компьютера)
1 - нужно выделять триады
0 - не нужно выделять
Совместимость броузера
Скрипт ниже демонстрирует наиболее общей подход к наиболее общим свойствам Броузера (и понятиям
совместимости).
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>
Формы и их обработка
Формы - это основной метод передачи информации от пользователя к серверу информации через 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. Он будет выбран при выводе формы в браузер.
За полным описанием форм языка HTML - обратитесь сюда.
Базы данных ASP



Ссылки на наши примеры:
Вывод содержимого базы клиенту используя запросы SQL
Пример создания спадающего меню (ListBox) с данными из базы
Пример №2 выпадающего меню
Базы данных это один из самых современнейших подходов к созданию 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:
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 (ниспадающее
меню - или по простому список).
Пример 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 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>
Данная страница демонстрирует пример создания выпадающего меню и программы для использования этого меню в
выборке данных из базы.
Файл DropMenu.asp, выводит список клиентов в виде выпадающего меню
<%Set Connection=Server.CreateObject("ADODB.Connection")
Connection.Open "DSN=MyODBCdatabaseonServer"
'Хотим получить только Id (идентификатор клиента) и его имя
SQL="SELECT id,name FROM Client ORDER BY name"
Set rs = Connection.Execute (SQL)%>
'Строим форму, полученную из поля name базы данных
<FORM ACTION="/test/getfrombase.asp" METHOD = "POST">
Клиент:
<select name="client" size="1">
<option value="none" selected>Ничего не выбрано...
<%Do Until rs.eof %>
<option value="<%=rs("id")%>"><%=rs("name")%></option>
<% rs.MoveNext
Loop
rs.Close%>
</select>
Файл GetFromBase.asp, выводит данные выбранного клиента
<%Set Connection=Server.CreateObject("ADODB.Connection")
Connection.Open "DSN=MyODBCdatabaseonServer"
'Хотим получить все данные по клиенту, выбранному в выпадающем меню клиенту
SQL="SELECT * FROM Client WHERE id=" & request("client")
Set rs = Connection.Execute (SQL)%>
'Выводим карточку данных этого клиента
Имя: <%=rs("name")<br>
Фамилия: <%=rs("lastname")%><br>
Адрес: <%=rs("address")%><br>
.........
<%rs.Close%>
Функции языка Visual Basic Script
Функции обычно используются для того, чтобы заменить часто повторяющиеся фрагменты текста программы на один
раз описываемый модуль - функцию. Ниже приведен пример для того, чтобы проверить правильность данных, перед их
занесением в базу.
1 <%
2 Function CheckField(sName,sPhone,sComment)
3 error=false
4 if sName="" then error=true
5 if sPhone="" then error=true
6 if InStr(sComment,"'")<>0 then error=true
7 CheckField=error
8 End Function
9 'Подсоединяемся к базе данных (DSN) GuestBook, таблица Asp
10 Set objConn = Server.CreateObject("ADODB.Connection")
11 ' Открываем ее
12 objConn.Open "guestbook"
13 'Проверяем собственно данные
14 sName=Request.Form("name")
15 sPhone=Request.Form("phone")
16 sComment=Request.Form("comment")
17 if CheckField(sName,sPhone,sComment) then
18 response.write("<h3>При вводе данных выдопустили ошибку! Поля Имя " &_
19 "и Телефон должны быть заполнены! А поле Коментарии не должно " &_
20 "содержать знака ' (апостроф)</h3>")
21 Response.End
22 objConn.Close
23 end if
24 sValues="'" & sName & "', " & "'" & sPhone & "', " & "'" & sComment & "'"
25 SQL = "INSERT INTO asp ( Name, Phone, Comment ) VALUES("&_ sValues & ")"
27 ' Добавляем строку к базе данных
28 Set ExecRes = objConn.Execute(SQL)
29 ' Закрываем подсоединение
30 objConn.Close %>
Подпрограммы языка Visual Basic Script
Подпрограммы, подобно функциям обычно используются для того, чтобы заменить часто повторяющиеся фрагменты
текста программы на один раз описываемый модуль. Но в отличие от функций подпрограммы (процедуры) не могут
возвращать значение через свое названние. Ниже приведен пример для того, чтобы проверить правильность данных,
перед их занесением в базу.
1 <%
2 Sub InsertRecord(SQL)
3 Set ExecRes = objConn.Execute(SQL)
4 End Sub
9 'Подсоединяемся к базе данных (DSN) GuestBook, таблица Asp
10 Set objConn = Server.CreateObject("ADODB.Connection")
11 ' Открываем ее
12 objConn.Open "guestbook"
14 sValues="'" & Request.Form("name") "'," &_
15 "'" & Request.Form("phone") "', " &_
16 "'" & Request.Form("comment") & "'"
17 SQL = "INSERT INTO asp (Name, Phone, Comment ) VALUES("&_ sValues & ")"
18 ' Добавляем строку к базе данных
19 call InsertRecord(SQL)
20 ' Закрываем подсоединение
21 objConn.Close %>
Данная страница демонстрирует компонент "Content Rotator"
1 <HTML>
2 <HEAD>
3 <TITLE>www.mftcomp.ru/asp/samples/ContentRot.htm</TITLE>
4 </HEAD>
5 <body bgcolor="#FFFFFF">
6 <%
7 Set Tip = Server.CreateObject("IISSample.ContentRotator")
8 response.write "Here's my advice:<P>"
9 response.write Tip.ChooseContent("/learn/test/sample.txt")
10 %>
11 </BODY>
12 </HTML>
The file sample.txt looks like this:
1 %%#3
2 Don't run with scissors.
3 %%#3
4 <font size="2" face="ARIAL,HELVETICA">Plant your crops early this year</font>
5 %%#3
6 <font size="4" face="ARIAL,HELVETICA">get 8 hours of sleep!</font>
Строковые функции языка Visual Basic Script

















Строковые функции позволяют вам совершать различные действия на строковыми переменными (константами или их
значениями). Ниже мы приводим краткий обзор большинства функция Visual Basic для работы со строками.
Asc, AscB, AscW
Chr, ChrB, ChrW
Filter
InStr, InStrB, InStrRev
Join
Len, LenB
LCase, UCase
Left, LeftB
Mid, MidB
Right, RightB
Replace
Space
Split
StrComp
String
StrReverse
LTrim, RTrim, Trim
Функции Asc, AscB, AscW
Функция возвращает код ANSI указанного символа.
Синтаксис:
ASC(строка)
Если строка не содержит ни одного символа, то функция вернет вам ошибку выполнения.
Замечания:
Функция AscB отличается от Asc в том, что AscB используется в случае, когда в строке содержится данные типа Byte.
Также отличается AscW тем, что применима к типу данных Word (32 бита).
Функции Chr, ChrB, ChrW
Функция возвращает символ, соответствующий указанному коду ANSI.
Синтаксис:
CHR(число)
Число - аргумент численного типа (character).
Замечания:
Функция ChrB отличается от Chr в том, что ChrB используется в случае, когда необходимо вернуть значение типа Byte.
Также отличается ChrW тем, что возвращает тип данных Word (32 бита).
Функция Filter
Функция возвращает массив значений содержащих подмножество строкового массива, основывающегося на указанных
критериях фильтрования.
Синтаксис:
FILTER(входная_строка, значение [, включая [, сравнивая]])
входная_строка - одноразмерный массив строк для фильтрации;
значение - Искомая строка поиска
включая - (необязательный параметр) логическое значение указывающее на необходимость вернуть подстроки которые
включают или исключают значение.
сравнивая - Численное значение, указывающее на тип используемого сравнения.
Значения данного параметра могут быть следующие: 0 - использовать двоичное сравнение, 1 - использовать текстовое
сравнение.
Функция InStr, InStrB, InStrRev
Функция возвращает позицию первого вхождения искомой строки в другой строке.
Синтаксис:
INSTR(начало, строка, искомая_строка, сравнение)
начало - необязательный параметр, указывающий на то, с какой позиции необходимо начать поиск.
строка - исходная строка в которой осуществляется поиск.
искомая_строка - строка, вхождение которой мы ищем.
сравнение - необязательный параметр, указывающий на тип сравнения - 0 - двоичное сравнение, 1 - текстовое сравнение.
Замечания:
Функция InStrB отличается от InStr тем, что InStrB используется в качестве исходных строк строки, содержащие данные
типа байт. И возвращает вместо позиции символа позицию байта. InStrRev отличается от InStr тем, что осуществляет
поиск не с начала, а с конца строки и не имеет параметра начало.
Функция Join
Функция возвращает строку, созданную путем соединения нескольких подстрок, содержащихся в массиве.
Синтаксис:
JOIN(массив_строк [, разделитель])
массив_строк - одномерный массив, содержащий строки.
разделитель - необязательный параметр, указывающий символ, который будет использоваться для разделения
элементов списка.
Функция Len
Функция возвращает длину указанной строки.
Синтаксис:
LEN(строка | имя_переменной)
строка - любая строка, если она содержит null, то возвращается null..
имя_переменной - Любое корректное имя переменной, если содержит null, то будет возвращен null.
Замечания:
Функция LenB отличается от Len тем, что LenB используется в качестве исходных строк строки, содержащие данные
типа байт. И возвращает число байт, из которых состоит такая строка.
Функция LCase, UCase
Функция LCase возвращает строку, преобразованную в нижний регистр (строчные буквы).
Функция UCase возвращает строку, поднятую в верхний регистр (заглавные буквы).
Синтаксис:
LCASE(строка)
или UCASE(строка)
строка - любая строка, если она содержит null, то возвращается null..
Замечания:
Для функции LCase только строчные буквы будут преобразованы в заглавные, а остальные, включая не печатные (<32)
символы остануться неизменными. Тоже правило, только с точностью наоборот применимо к функции UCase.
Функция Left, LeftB
Функция Left возвращает строку, длинной в указанное количество символов, из исходной строки (причем строка
образуется начиная слева исходной).
Синтаксис:
LEFT(строка, длина)
строка - любая строка, из которой получается новая, причем если она содержит null, то возвращается null.
длина - числовое значение, указывающее на то, как много символов надо вернуть. Если значение 0, то возвращается
строка нулевой длины ("").
Замечания:
Функция LeftB отличается от Left тем, что LeftB с данными, содержащими байты в качестве значения. Вместо
возвращаемого количество символов возвращается указанное количество байт.
Функция Mid, MidB
Функция Mid очень напоминает функцию Left, но только возвращает строку, длинной в указанное количество символов,
из исходной строки, начиная с указанной позиции.
Синтаксис:
MID(строка, начало [, длина])
строка - любая строка, из которой получается новая.
начало - числовое значение, указывающее на то, с какого символа начать копировать символы.
длина - необязательный параметр, указывающее на то, как много символов надо вернуть. По умолчанию - до конца
исходной строки.
Замечания:
См. отличия функций LeftB и Left.
Функция Right, RightB
Функция Right очень напоминает функцию Left, но только возвращает строку, длинной в указанное количество
символов, из исходной строки, начиная крайней правой позиции исходной строки.
Синтаксис:
RIGHT(строка, длина)
строка - любая строка, из которой получается новая.
длина - параметр, указывающее на то, как много символов надо вернуть.
Замечания:
См. отличия функций LeftB и Left.
Функция Replace
Функция Replace возвращает строку, в которой указанная подстрока заменена другой подстрокой указанное количество
раз.
Синтаксис:
REPLACE(строка, подстрока, новая_подстрока, начало, число_раз, сравнение)
строка - любая строка, в которой часть ее будет заменена.
подстрока - строка, которая будет искаться в первой (строка).
новая_подстрока - строка, которая будет вставлена в строку вместо подстроки, найденной в основной строке.
начало - позиция, с которой начнется поиск подстроки в строке.
число_раз - сколько раз нужно искать подстроку в строке.
сравнение - необязательный параметр, указывающий на тип сравнения - 0 - двоичное сравнение, 1 - текстовое сравнение.
Замечания:
Функция вернет строковое значение.
Функция Space
Функция Space возвращает строку, состоящую из указанного количества пробелов.
Синтаксис:
SPACE(число_раз)
число_раз - сколько пробелов должно содержаться в результирующей строке.
Функция Split
Функция Split одномерный массив, содержащий указанное количество подстрок, задаваемых в исходной строке.
Синтаксис:
SPLIT(выражение [, разделитель [, счетчик [, сравнение]]])
выражение - любая строка, содержащая подстроки и разделители.
разделитель - необязательный параметр - символ, используемый для идентификации ограничителей подстрок. Если
параметр не указан, подразумевается " " (пробел). Если разделитель - пустая строка (""), тогда будет возвращен массив,
где единственный его элемент - исходное выражение.
счетчик - необязательный параметр - количество подстрок, которое должно быть возвращено. Если он равен -1, то все
выделенные подстроки будут переданы в массиве.
сравнение - необязательный параметр, указывающий на тип сравнения - 0 - двоичное сравнение, 1 - текстовое сравнение,
2 - выполнить сравнение основанное на информации, содержащейся в базе данных, где и будет происходить сравнение.
Функция StrComp
1.
2.
3.
4.
Функция StrComp производит сравнение строк и выдает результат такого сравнения.
Синтаксис:
STRCOMP(строка1, строка2 [, сравнение])
строка1 - одна из строк для сравнения.
строка2 - вторая строка для сравнения.
сравнение - необязательный параметр, указывающий на тип сравнения - 0 - двоичное сравнение, 1 - текстовое сравнение.
Замечание:
Результаты сравнения:
функция вернет -1 если строка1 меньше строки2;
функция вернет 0 если строки равны;
функция вернет 1 если строка1 больше строки2;
функция вернет Null если одна из строк пустая (Null).
Функция String
Функция String возвращает строку, состоящую из указанного количества указанных символов.
Синтаксис:
STRING(число_раз, символ)
число_раз - сколько указанных символов должно содержаться в результирующей строке.
символ - символ, которым будет заполняться результирующая строка.
Функция StrReverse
Функция StrReverse возвращает строку, состоящую указанной, только расположенных в обратном порядке.
Синтаксис:
STRREVERSE(строка)
строка - строка, которая подлежит преобразованию.
Функция LTrim, RTrim, Trim
Функция LTrim возвращает строку у которой удалены все лидирующие пробелы (слева). Функция RTrim возвращает
строку у которой удалены все конечные пробелы (справа). Функция Trim возвращает строку у которой удалены все
лидирующие и конечные пробелы (слева и справа).
Синтаксис:
LTrim(строка)
RTrim(строка)
Trim(строка)
строка - строка, которая подлежит преобразованию.
Данная страница демонстрирует как добавить запись в базу данных используя ADO вместо
SQL.
1 <TITLE>http://www.activeserverpages.com/learn/test/dbnewADO.asp</TITLE>
2 <body bgcolor="#FFFFFF">
3 <HTML>
4 <%
5 on error resume next
6 auname=request.querystring("name")
7 auyear=request.querystring("year")
8 auID=request.querystring("ID")
9 Set Conn = Server.CreateObject("ADODB.Connection")
10 conn.open "Student","student","magic"
11 ' DSN user password
12 Set RS = Server.CreateObject("ADODB.Recordset")
13 RS.Open "authors",Conn,3,3
14 RS.AddNew
15 RS("AU_ID")=auid
16 RS("Author") = auname
17 RS("Year_Born")= int(auyear)
18 RS.Update
19 RS.Close
20 Conn.Close
21 If err.number>0 then
22 response.write "VBScript Errors Occured:" & "<P>"
23 response.write "Error Number=" & err.number & "<P>"
24 response.write "Error Descr.=" & err.description & "<P>"
25 response.write "Help Context=" & err.helpcontext & "<P>"
26 response.write "Help Path=" & err.helppath & "<P>"
27 response.write "Native Error=" & err.nativeerror & "<P>"
28 response.write "Source=" & err.source & "<P>"
29 response.write "SQLState=" & err.sqlstate & "<P>"
30 else
31 response.write "No VBScript Errors Occured" & "<P>"
32 end if
33 IF conn.errors.count> 0 then
34 response.write "Database Errors Occured" & "<P>"
35 for counter= 0 to conn.errors.count
36 response.write "Error #" & conn.errors(counter).number & "<P>"
37 response.write "Error desc. -> " & conn.errors(counter).description & "<P>"
38 next
39 else
40 response.write "No Database Errors Occured!" & "<P>"
41 end if
42 %>
43 </BODY>
44 </HTML>
Данная страница демонстрирует как добавить запись в базу данных используя SQLвыражения.
1 <TITLE>http://www.mftcomp.ru/asp/samples/dbnewSQL.htm</TITLE>
2 <body bgcolor="#FFFFFF">
3 <HTML>
4 <%
5 on error resume next
6 auname=request.querystring("name")
7 auyear=request.querystring("year")
8 auID=request.querystring("ID")
9 Set Conn = Server.CreateObject("ADODB.Connection")
10 conn.open "Student","student","magic"
11 ' DSN user password
12 SQLStmt = "INSERT INTO authors (AU_ID,author,year_born) "
13 SQLStmt = SQLStmt & "VALUES (" & auid
14 SQLStmt = SQLStmt & ",'" & auname & "'"
15 SQLStmt = SQLStmt & "," & int(auyear) & ")"
16 Set RS = Conn.Execute(SQLStmt)
17 If err.number>0 then
18 response.write "VBScript Errors Occured:" & "<P>"
19 response.write "Error Number=" & err.number & "<P>"
20 response.write "Error Descr.=" & err.description & "<P>"
21 response.write "Help Context=" & err.helpcontext & "<P>"
22 response.write "Help Path=" & err.helppath & "<P>"
23 response.write "Native Error=" & err.nativeerror & "<P>"
24 response.write "Source=" & err.source & "<P>"
25 response.write "SQLState=" & err.sqlstate & "<P>"
26 else
27 response.write "No VBScript Errors Occured" & "<P>"
28 end if
29 IF conn.errors.count> 0 then
30 response.write "Database Errors Occured" & "<P>"
31 for counter= 0 to conn.errors.count
32 response.write "Error #" & conn.errors(counter).number & "<P>"
33 response.write "Error desc. -> " & conn.errors(counter).description & "<P>"
34 next
35 else
36 response.write "No Database Errors Occured!" & "<P>"
37 end if
38 Conn.Close
39 %>
40 </BODY>
41 </HTML>
Вывод содержимого таблицы по пользовательскому запросу
Эта страница демонстрирует как вывести на экран содержимое таблицы через запрос SQL используя для запроса
пользовательский ввод:
1 <TITLE>www.mftcomp.ru/asp/samples/dbParam.htm</TITLE>
2 <body bgcolor="#FFFFFF">
3 <%
4 ' My ASP program that talks to a database
5 set conntemp=server.createobject("adodb.connection")
6 conntemp.open "Student","student","magic"
7 ' DSN user password
8 p1=request.querystring("ID")
9 temp="select * from authors where AU_ID=" & p1
10 set rstemp=conntemp.execute(temp)
11 howmanyfields=rstemp.fields.count -1
12 %>
13 <table border=1>
14 <tr>
15 <% 'Put Headings On The Table of Field Names
16 for i=0 to howmanyfields %>
17 <td><b><%=rstemp(i).name %></B></TD>
18 <% next %>
19 </tr>
20 <% ' Now lets grab all the records
21 do while not rstemp.eof %>
22 <tr>
23 <% for i = 0 to howmanyfields%>
24 <td valign=top><% = rstemp.fields(i).value %></td>
25 <% next %>
26 </tr>
27 <% rstemp.movenext
28 loop
29 conntemp.close%>
30 </table>
31 </BODY>
32 </HTML>
Эта страница демонстрирует метод вывода на экран списка (list box) используя SQL выражение.
1 <html>
2 <head>
3 <TITLE>http://www.mftcomp.ru/asp/samples/dbList.htm</TITLE>
4 </head>
5 <body bgcolor="#FFFFFF">
6 <%
7 ' My ASP program that talks to a database
8 set conntemp=server.createobject("adodb.connection")
9 conntemp.open "Student","student","magic"
10 ' DSN user password
11 set rstemp=conntemp.execute("select author from authors where AU_ID<100")
12 %>
13 <Form>
14 <Select>
15 <% ' Now lets grab all the names
16 do while not rstemp.eof %>
17 <option> <%=RStemp(0)%> </option>
18 <% rstemp.movenext
19 loop
20 conntemp.close%>
21 </Select>
22 </form>
23 </BODY>
24 </HTML>
Данная страница демонстрирует пример создания выпадающего меню и программы для использования этого меню в
выборке данных из базы.
Файл DropMenu.asp, выводит список клиентов в виде выпадающего меню
<%Set Connection=Server.CreateObject("ADODB.Connection")
Connection.Open "DSN=MyODBCdatabaseonServer"
'Хотим получить только Id (идентификатор клиента) и его имя
SQL="SELECT id,name FROM Client ORDER BY name"
Set rs = Connection.Execute (SQL)%>
'Строим форму, полученную из поля name базы данных
<FORM ACTION="/test/getfrombase.asp" METHOD = "POST">
Клиент:
<select name="client" size="1">
<option value="none" selected>Ничего не выбрано...
<%Do Until rs.eof %>
<option value="<%=rs("id")%>"><%=rs("name")%></option>
<% rs.MoveNext
Loop
rs.Close%>
</select>
Файл GetFromBase.asp, выводит данные выбранного клиента
<%Set Connection=Server.CreateObject("ADODB.Connection")
Connection.Open "DSN=MyODBCdatabaseonServer"
'Хотим получить все данные по клиенту, выбранному в выпадающем меню клиенту
SQL="SELECT * FROM Client WHERE id=" & request("client")
Set rs = Connection.Execute (SQL)%>
'Выводим карточку данных этого клиента
Имя: <%=rs("name")<br>
Фамилия: <%=rs("lastname")%><br>
Адрес: <%=rs("address")%><br>
.........
<%rs.Close%>
Пример отладки скрипта
Статьи по отладке вы также можете найти на сервере www.activeserverpages.com по следующим ссылкам:
http://www.activeserverpages.com/questions и http://www.activeserverpages.com/articles/debug.asp. Далле вашему вниманию
представлен скрипт, позволяющий вам произвести отладку и найти вашу проблему:
1 <TITLE>Пример скрипта отладки</TITLE>
2 <body bgcolor="#FFFFFF">
3 <HTML>
4 <%
5 Response.Write("<P>Переменные формы:<br>")
6 For Each Key in Request.Form
7 Response.Write( "Поле формы " & Key & " = " & Request.Form(Key) & "<br>")
8 Next
9 Response.Write("<P>Переменные из URL (QUERY STRINGS):<br>")
10 For Each Key in Request.QueryString
11 Response.Write("Поле формы" & Key & " = " & Request.QueryString(Key) & "<br>")
12 Next
13 Response.Write("<P>Переменные COOKIES:<br>")
14 For Each Key in Request.Cookies
15 Response.Write("Параметр из COOKIES " & Key & " = " & Request.Cookies(Key) & "<br>")
16 Next
17 Response.Write("<P>Серверные переменные:<br>")
18 For Each Key in Request.ServerVariables
19 Response.Write("Переменная " & Key & " = " & Request.ServerVariables(Key) & "<br>")
20 Next
28 %>
29 </BODY>
30 </HTML>
Получив на экран все указанные переменные вы таким образом сможете вероятно определить, в чем ваша проблема, и
чего вы делаете не так!
Связывание содержимого между собой
Данный скрипт позволит вам связать между собой ваши страницы для перехода по ним вперед и назад:
1 <TITLE>Как связать между собой страницы?</TITLE>
2 <body bgcolor="#FFFFFF">
3 <% Set NL = Server.CreateObject ("MSWC.NextLink")
4 If (NL.GetListIndex ("/learn/learn.txt")>1) Then
5 nextref=NL.GetNextURL("/learn/learn.txt")
6 prevref=NL.GetPreviousURL("/learn/learn.txt")
7 %>
8 <a href="<%=prevref%>">Previous Page</a><P>
9 <% End If %>
10 <a href="<%=nextref%>">Next Page</a>
11 </BODY>
12 </HTML>
Обзор встроенных объектов ASP
Application Object
Collections:
Contents
StaticObjects
Methods:
Lock
Unlock
Events:
Application_OnEnd
Application_OnStart
ObjectContext Object
Methods:
SetAbort
SetComplete
Events:
OnTransactionAbort
OnTransactionCommit
Request Object
Collections:
ClientCertificate
Cookies
Form
QueryString
ServerVariables
Properties:
Response Object
Collections:
Cookies
Properties:
Buffer
CacheControl
Charset
ContentType
Expires
ExpiresAsolute
IsClientConnected
PICS
Status
Methods:
AddHeader
AppendToLog
BinaryWrite
Clear
End
Flush
Redirect
Write
Server Object
Properties:
ScriptTimeout
TotalBytes
Methods:
BinaryRead
Methods:
CreateObject
HTMLEncode
MapPath
URLEncode
Session Object
Collections:
Contents
StaticObjects
Properties:
CodePage
LCID
SessionID
Timeout
Methods:
Abandon
Events:
Session_OnEnd
Session_OnStart
Описание объекта Application






Вы можете использовать данный метод для того, чтобы сделать доступной информацию между всеми пользователями
данного приложения. Основанное на ASP приложение определено как все .asp-файлы в виртуальной директории и всех
ее поддиректориях. Из-за того, что объект Application может быть доступен ("зашарен") более чем одному
пользователю, то в нем предусотренно два метода - Lock и Unlock (заблокировать и разблокировать) для того, чтобы
быть уверенным, что сразу несколько пользователей не смогут попытаться изменять свойства одновременно.
Синтаксис:
Application . метод
Коллекции:
Application.Contents
Application.StaticObjects
Методы:
Lock
Unlock
События:
Application_OnEnd
Application_OnStart
Скрипты, которым могут предшествовать события должны быть описаны в файле global.asa. Для получения более
полной информации по этому файлу смотрите описание Global.asa
Замечания:
Вы можете хранить свои значения в коллекциях данного объекта: Application.Contents и Application.staticObjects.
Информация, сохраненная в коллекции Application доступны через приложение. Следующий скрипт демонстрирует
запись двух типов переменных.
<%
Application("greeting") = "Добро пожаловать на наш вэб-сервер!"
Application("num") = 25
%>
Для каждой из этих переменных предполагается их членство в коллекции Application Contents.
Вы можете также связать компонент с переменной. Если вы связываете сомпонент к переменной с помощью объекта
Server.CreateObject, то переменная будет членом коллекции Application.Contents. Если переменная связана с тэгом
<OBJECT>, то переменная будет членом коллекции Application StaticObjects.
Если вы связываете конкретный компонент с переменной в коллекцией Application Contents Collection и используете
Visual Basic Scripting Edition как основной язык написания скриптов, вы должны использовать ключевое слово Set. Это
иллюстрированно следующим примером.
<% Set Application("Obj1") = Server.CreateObject("MyComponent") %>
Вы можете также определить методы и свойства компонента MyComponent следующим скриптом
<% Application("Obj1").MyObjMethod %>
или путем создания локальной копии объекта и использования его следующим образом:
<%
Set MyLocalObj1 = Application("Obj1")
MyLocalObj1.MyObjMethod
%>
Другой способ, чтобы создать объект с использованием тэга <OBJECT> в файле Global.asa. Для более полной
информации смотрите описание Global.asa.
Вы не можете хранить встроенные объекты в объекте Application. Для примера, каждый из следующих строк будет
вызывать ошибку:
<%
Set Application("var1") = Session
Set Application("var2") = Request
Set Application("var3") = Response
Set Application("var4") = Server
Set Application("var5") = Application
Set Application("var6") = ObjectContext
%>
Если вы храните массив в объекте Application то вы не должны пытаться обращаться к элементам, хранящимся в
массиве напрямую. К примеру, следующий скрипт не работает
<% Application("StoredArray") (3) = "new value" %>
Настоятельно рекомендуется чтобы, если вы храните массив в объекте Application, вы получили копию массива прежде
чем считывать или изменять любые его элементы. Кода вы сделали такую копию вы можете изменить или считать
любые его элементы и измененную локальную копию сохранить обратно в Application. Данный прием мы
продемонстрируем в следующем примере:
---file1.asp--<%
'Создаем и инициируем массив
dim MyArray()
Redim MyArray(5)
MyArray(0) = "привет!"
MyArray(1) = "какая-либо другая строка"
'Запоминание массива в объекте Application
Application.Lock
Application("StoredArray") = MyArray
Application.Unlock
Response.Redirect("file2.asp")
%>
---file2.asp--<%
'Получение массива из объекта Application
'и модицикация второго элемента
LocalArray = Application("StoredArray")
LocalArray(1) = " Люди!"
'вывод строки "привет! Люди!"
Response.Write(LocalArray(0)&LocalArray(1))
'Перезапись массива в объект Application
'Данное действие перепишет значения в StoredArray на новые
Application.Lock
Application("StoredArray") = LocalArray
Application.Unlock
%>
Следующий пример использует переменную NumVisits для хранения числа посещений, когда страница была получена
клиентом. Метод Lock вызывается тогда, когда есть возможность того, что к переменной NumVisits может возникнуть
паралелльное обращение. Вызывая метод Unlock вы разрешаете обращаться к данной переменной (объекту Application)
другим пользователям.
<%
Application.Lock
Application("NumVisits") = Application("NumVisits") + 1
Application.Unlock
%>
Вы <%= Application("NumVisits") %> посетитель этой страницы!
Коллекция Application.Contents
Коллекция Contents группирует все элементы, которые были добавлены приложением через команды скрипта. Вы
можете использовать коллекцию Contents чтобы получить список элементов, которые были получены приложением или
чтобы указать какой из элементов будет использован в данной операции.
Синтакс:
Application.Contents( ключ )
Параметры:
ключ
Указанное имя элемента для его получения.
Замечание:
Коллекция Application.Contents содержит те элементы которые были определены на уровне приложения без
использования тэга <OBJECTS>. Это касается обеих объектов - созданных с использованием Server.CreateObject и с
использованием скалярных переменных установленных через определение Application. В следующем скрипте, к
примеру, оба и MyVar и MyObj будут членами коллекции Application.Contents.
<%
Application("MyVar") = "Привет!"
Set Application("MyObj") = Server.CreateObject("MyComponent")
%>
Коллекция Application.Contents поддерживает циклы типа For...Each и For...Next.
Следующие два примера иллюстрируют каждый из вышеуказанных методов циклов использования
Application.Contents.
<%
For Each Key in Application.Contents
response.write ("key")
Next Key
%>
<%
For i = 1 to Application.Contents.Count
response.write("key")
Next Key
%>
Коллекция Application.StaticObjects
Коллекция StaticObjects содержит все объекты, созданные с использованием тэга <OBJECT> и объекта Application. Вы
можете использовать коллекцию для того, чтобы определить значения указанных свойств для объекта или создать цикл
по коллекции и получить все свойства для всех статических объектов.
Синтакс:
Application.StaticObject( ключ )
Параметры:
ключ
Указанное имя элемент для обращения к нему.
Замечание:
Вы можете использовать управление циклом чтобы перебирать ключи в коллекции StaticObjects. Это
продемонстрированно следующим примером:
<%
Dim ObjProp
For Each ObjProp in Application.StaticObjects
response.write(ObjProperty & " : " & Application.StaticObjects(ObjProp) & "<br>")
Метод Application.Lock
Метод Lock блокирует для других клиентов переменные, хранимые в объекте Application от изменеия. Потому, как
только один клиент может в данный момент времени получить доступ к переменным объекта. Если вы не вызываете
метод Unlock после обработики переменных, то сервер сам разблокирует данный объект, когда истечет время (timeout)
работы скрипта .asp.
Синтакс:
Application.Lock
Пример:
<%
Application.Lock
Application("NumVisits") = Application("NumVisits") + 1
Application.Unlock
%>
Вы <% = Application("NumVisits") %> посетитель данной страницы.
В предыдущем примере метод Lock предохраняет переменную NumVisits объекта Application от доступа к нему
одновременно нескольких клиентов. Если бы приложение не было бы заблокированно, то два клиента попробывали-бы
одновременно увеличить значение переменной NumVisits.
Метод Application.Unlock
Метод Unlock разблокирует заблокированные ранее переменные c помощью метода Lock.
Синтакс:
Application.Unlock
Пример:
<%
Application.Lock
Application("NumVisits") = Application("NumVisits") + 1
Application.Unlock
%>
Вы <% = Application("NumVisits") %> посетитель данной страницы.
В предыдущем примере метод Unlock разблокирует переменную NumVisits объекта Application, заблокированную ранее
объектом Lock от доступа к нему одновременно нескольких клиентов.
Событие Application_OnEnd
Данное событие активизируется, когда приложение закрывается, а точнее после события Session_OnEnd. Только
встроеные объекты Application и Server доступны.
Синтакс:
<SCRIPT LANGUAGE=язык_программирования RUNAT=Server>
Sub Application_OnEnd
...
End Sub
</SCRIPT>
Параметры
язык_программирования
параметр, который указывает на то, каким языком будет написан скрипт. Например JavaScript или VisualBasic.
Замечания
Вы не можете вызывать метод MapPath (объект Server) в подпрограмме Application_OnEnd.
Событие Application_OnStart
Данное событие активизируется, когда активируется новая сессия, такая, как, к примеру, Session_OnStart. Только
встроенные объекты Application и Server доступны. Обращение к объектам Session, Request или Response в
подпрограмме Application_OnStart вызовет ошибку.
Синтакс:
<SCRIPT LANGUAGE=язык_программирования RUNAT=Server>
Sub Application_OnStart
...
End Sub
</SCRIPT>
Параметры
язык_программирования
параметр, который указывает на то, каким языком будет написан скрипт. Например JavaScript или VisualBasic.
Описание офайла Global.asa




Файл Global.asa это необязательный файл, в котором вы можете указывать специфические процедуры, реагирующие на
определенные события и декларирующий объекты, которые относятся к сессии или приложению. Содержимое этого
файла не выводится пользователям. Данный файл должен иметь только данное, предопределенное имя. Он должен
храниться в корневой директории вашего приложения (сервера). Один виртуальный сервер (одно приложение) не может
иметь более одного такого файла.
Файл Global.asa может содержать только следующее:
События приложения
События сессии
Описание <OBJECT>
Описание typeLibrary
Если вы включили скрипт, который не заключен в тэги <SCRIPT> или вы определите объект не относящийся ни к
приложению, ни к сессии, сервер вернет ошибку.
Скрипт, написанный в данном файле может быть написан на любом поддерживаемом языке. А также возможна
комбинация языков, но только написанная в различных <SCRIPTS> - тэгах.
Когда вы сохраняете изменения в файл Global.asa то сервер заканчивает обрабатывать все текущие запросы приложений
перед рекомпиляцией данного файла. В то время, когда сервер отказывает в запросах и возвращает ошибки, запрос не
может быть обработан, пока приложение в режиме рестарта.
После того, когда все текущие запросы пользователя были обработаны сервер удаляет все активные сессии, вызывая при
этом событие Session_OnEnd для каждой удаляемой сессии и вызывает событие Application_OnEnd. Файл Global.asa
затем рекомпилируется. Следующие запросы пользователя будут порождать создание новой сессии и триггер
Application_OnStart и Session_OnStart будут инициированны.
Однако, изменения, которые вы произвели в файле, подключенном к файлу Global.asa не породят перекомпиляции
второго. Для того, чтобы произвести ее необходимо пересохранить сам файл Global.asa.
Процедуры задекларированные в файле Global.asa могут быть вызваны только одним или же многими скриптами,
ассоциированными с событиями Application_OnStart, Application_OnEnd, Session_OnStart и Session_OnEnd. Они не
доступны из ASP-страниц в ASP-базированных приложениях.
Описание объекта ObjectContext




Вы можете использовать объект ObjectContext чтобы ввести или снять транзакцию, управляемую Microsoft Transaction
Server (MTS), который был инициирован скриптом, содержащимся в ASP-файле.
Когда ASP содержит директиву @TRANSACTION, то страница запускается в транзакции и не заканчивает выполнения
до тех пор, пока транзакция не будет успешно или не успешно завершена.
Методы:
ObjectContext.SetComplete
ObjectContext.SetAbort
События:
OnTransactionCommit
OnTransactionAbort
Метод ObjectContext.SetComplete
Метод SetComplete переопределяет действия любого предыдущего метода SetAbort, вызванной из скрипта.
Синтакс:
ObjectContext.SetComplete
Метод ObjectContext.SetAbort
Метод SetAbort прекращает транзакцию, инициированную ASP-скриптом.
Синтакс:
ObjectContext.SetAbort
Событие OnTransactionCommit
Данное событие активизируется, когда ASP-скрипт его инициирует. Когда возникает OnTransactionCommit то IIS
будет обрабатывать скрипт процедуры OnTransactionCommit если таковая существует.
Событие OnTransactionAbort
Данное событие активизируется, когда транзакция прерывается. Когда возникает OnTransactionAbort то IIS будет
обрабатывать скрипт процедуры OnTransactionAbort если таковая существует.
Описание объекта Request







Описываемый объект является, также как и объект Response, очень полезным и мощным встроенным инструментом.
Данный объект ряд методов, коллекций и свойств. Их описание приводится ниже:
Коллекции:
Request.ClientCertificate
Request.Cookies
Request.Form
Request.QueryString
Request.ServerVariables
Методы:
Request.BinaryRead
Свойства:
Request.TotalBytes
Коллекция Request.ClientCertificate
Коллекция ClientCertificate (Клиентский сертификат - элемент авторизации) позволяет получать поля сертификации
(определенные стандартом X.509) из запроса браузера.
Если браузер использует протокол SSL3.0/PCT1 (другими словами используется URL, начинающийся с https:// вместо
http://) для подключения к серверу то сервер затребует сертификацию, на что браузер должен будет вернуть поля
сертификации.
Если сертификат не был передан, то коллекция ClientCertificate вернет EMPTY (пусто).
Перед тем, как вы сможете использовать ClientCertificate-коллекцию вы должны сконфигурировать свой сервер так,
чтобы он требовал клиентский сертификат.
Синтакс:
Request.ClientCertificate( ключ [подполе] )
Параметры:
ключ
Указанное имя поля сертификата, которое вы хотите получить. Клиентский сертификат содержит следующие поля:
Значени
Описание
е
Certificat
Строка, содержащая двоичный поток всего содержимого сертификата в формате ASN.1
e
Множество флажков, которые предоставляют дополнительныю информацию о клиентском сертификате.
Следующее количество флажков определено:
ceCertPresent - клиентский сертификат предоставлен (имеется).
ceUnrecognizedIssuer - последняя сертификация в данной цепи получена от неизвестного издателя. Т.е. не ясно,
Flag
кто издал (подписал) сертификат.
Замечание: Для того, чтобы получить данные флажки, вы должны включить включаемый файл сертификата
клиента в ваш ASP-файл. Если вы используете VBScript, подключите файл cervbs.inc, в случае с JavaScript подключите файл cerjavas.inc. Эти файлы инсталируются в папку \InetPub\ASPSamp\Samples.
Строка, содержащая список подполей, содержащих информацию о издателе сертификата. Если это значение
Issuer указано (задано вами при вызове) без подполей, то колекция ClientCertificate возвратит вам список подполей со
значениями, разделенный запятыми. К примеру: C=US, O=Verisign и так далее.
SerialNu Строка, содержащая серийный номер сертификата в виде ASCII строки, представленной в виде
mber
шестнадцатиричных байт, разделенных тире. К примеру 04-67-А3-С7
Строка, которая содержит список значений подполей, которые в свою очередь содержат информацию о объекте
Subject авторизации (о персоне). Если это значение указано без подполей, то ClientCertificate-коллекция вернет список
подполей, разделенный запятой, к примеру C=US, O=Msft и так далее.
ValidFro Дата, указывающая на то, когда сертификат прошел подписание. Эта дата соответствует VBScript - формату и
m
зависит от региональных установок. К примеру это (для USA) 9/26/96 11:59:59 pm
ValidUntДата, указывающая на то, когда истечет срок действия указанного сертификата.
il
подполе
не обязательный параметр, который вы можете использовать для получения индивидуальных полей в каждом из Subject
или Issuer ключах. Этот параметр добавляется к параметру ключ как суффикс. К примеру - IssuerO или SubjectCN. Далее
представлен список таких подполей.
Значение Описание
C
Указывает название страны происхождения
CN
Указывает общее имя пользователя. Данное подполе может быть использовано только с ключем Subject
GN
Указывает полученное имя
I
Указывает на инициалы
L
Указывает место расположения (локализацию)
O
Указывает название компании или организации
OU
Указывает название подразделения компании
S
Указывает штат или регион
T
Указывает на описание (заголовок) данной персоны или же организации
Значения подполей, не приведенных в данном списке могут быть идентифицированны по их определению в ASN.1.
Формат ASN.1 представляет из себя список чисел, разделенных точкой. К примеру 3.56.7886.34.
Замечание:
Вы можете использовать тспользовать цикл, для того, чтобы получить все названия и значения ключей коллекции:
<%
For each key in Request.ClientCertificate
response.write(key & ":" & Request.ClientCertificate(key) & "<br>")
Next
%>
Примеры:
Следующий пример показывает как можно узнать о том, есть ли у пользователя сертификат или нет.
<%
If len(Request.ClientCertificate("Subject")) = 0
Response.Write("Клиентский сертификат отсутствует!")
End if
%>
Следующий пример показывает как можно получить общее название компании, которая выпустила сертификат.
<% = Request.ClientCertificate("IssuerCN") %>
Следующий пример показывает пример проверки на название организации - субъекте клиентского сертификата.
<%
If (Request.ClientCertificate("Subject") = "Msft" )
Response.Write("Хороший выбор компании :))!!!")
End if
%>
Следующий пример выводит сообщение о дате прекращения действия настоящего сертификата.
Данный сертификат прекратит свое действие
<% = Request.ClientCertificate("ValidUntil") %>
Следующий пример демонстрирует использование Флажков, для того, чтобы узнать известен ли издатель настоящего
сертификата. Выражнение Include в первой строке скрипта позволяет последнему использовать обращение к названиям
именованных флажнов (констант). В-принципе - вы можете использовать числовые значения, которые вы можете
распечатать и использовать в дальнейшем.
<!--#include file="cervbs.inc# -->
<%
If Request.ClientCertificate("Flags") and ceUnrecognizedIssuer then
Response.Write "Неизвестный издатель сертификата!"
End if
%>
Коллекция Request.Cookies
Коллекция Cookies (информация, позволяющая хранить информацию о сессии) позволяет получать значения cookies,
переданных в запросе HTTP.
Синтакс:
Request.Cookies( cookie ) [ (ключ) | .атрибуты ]
Параметры:
cookie
Указанное имя cookie, значения которых вы хотите получить.
ключ
Необязательный параметр, используемый для получения значения подключа из коллекции данных cookie.
атрибуты
Специфическая информация о самих cookie. Данный параметр может иметь следующий вид:
Значение
Описание
HasKeys
Только для чтения. Указывает, содержит ли cookies указанные ключи
Замечание:
Вы можете получать доступ к подключам коллекции информации (cookie) включая значение для ключа. Если cookies
доступен с указанием ключа, то все ключи возвращаются в виде обычной строки запроса (как метод GET). К примеру,
если MyCookie имеет два ключа First и Second и вы не указываете к какому из этих ключей вы обращаетесь вызывая
Request.Cookies, то вам будет возвращена следующая строка:
First=значение_ключа_first&Second=значение_ключа_second
Если двое cookie под одинаковыми именами были переданы браузеру, то Request.Cookies возвратит одну из них, но ту, у
которой более глубокая структура (наибольшая глубина вложенности). К примеру если передаются двое cookie под
одинаковыми именами, но один имеет атрибут /www/ а другой /www/home/, то клиентский браузер передаст обе cookie в
директорию /www/home/, но Request.Cookies возвратит только вторую.
Для определения определения того, еслть ли cookie с таким названием в их наборе, вы можете использовать следующий
скрипт:
<% = Request.Cookies("MyCookie").HasKey %>
Если MyCookie имеются, то возвратится TRUE, иначе FALSE.
Вы можете использовать итератор в цикле с Cookie-коллекцией для перебора ключей. Смотрите пример ниже:
<%
'Печатаем всю коллекцию Cookie
For each cookie in Request.Cookies
if not cookie.HasKey then
'Печатаем строку cookie
%>
<% = cookie %> = <% = request.Cookies(cookie)%>
<%
Else
For each key in Request.Cookies(cookie)
%>
<% = cookie %> (<% = key %>) = <% = Request.Cookies(cookie) (key) %>
<%
Next
End if
Next
%>
Коллекция Request.Form
Коллекция Form позволяет получать значения из формы элементов, посланных HTTP запросом при использовании
метода POST.
Синтакс:
Request.Form( элемент ) [ ( индекс ) | .Count ]
Параметры:
элемент
Название элемента формы, значение которого предпологается получить
индекс
Не обязательный параметр, который позволяет вам получить доступ к одному из значений параметра (в том случае если
передано не одно значение). Это может быть любое значение (целочисленное) в диапазоне от 1 до
Request.Form(элемент).Count.
Замечание:
Коллекция Form индексируется по именам параметра в теле запроса. Значение Request.Form(элемент) является
массивом все значений этого элемента, встретившихся в теле запроса. Вы можете определить количество значений
переданных из формы путем вызова следующей конструкции: Request.Form(элемент).Count. Если параметр имеет
единственное значение связанное с ним и счетчик возвращается равным 1. Если же параметр (элемент) не найден
совсем, то счетчик вернет 0.
Для описания многозначного определения элемента формы вы должны указать значение индекса. Параметр индекс
может присутствовать любое число от 1 до Request.Form(элемент).Count. Если вы описываете один из множества
значений элементов без указания значения индекса, то возвращаемое значение примет вид строки, значения в которой
разделены запятыми.
Когда вы используете параметры с Request.Form ваш сервер преобразует (разбирает) тело HTTP запроса и возвращает
указанные данные. Если выше приложение требует использования не разобранных (не преобразованных) данных
запроса, то вам необходимо вызвать Request.Form но без параметров.
Вы можете использовать итератор цикла для вывода все данных запроса (из формы). Пример, следующий ниже,
показывает, что если пользователь заполнил форму указав два значения, Конфеты и Зефир в меню Любимые
Кондитерские Изделия (параметр с именем Sweets), то , вы сможете получить следующие значения используя пример:
<% For each item In Request.Form("Sweets")
response.write(item & "<br>")
next
%>
При выполнении данного примера вы увидите следующее:
Конфеты
Зефир
Такой же вывод может быть сделан с использованием цикла For...Next, что и демонстрирует следующий пример
<% For i=1 to Request.Form("Sweets").Count
response.write(Request.Form("Sweets") (i) & "<br>")
next
%>
Вы можете использовать итератор цикла для вывода имени параметра, как показано ниже:
<% For Each x In Request.Form("Sweets")%>
Request.Form( <%= x %> ) = <% request.from (x) %> <br>
<% next %>
Данный скрипт возвратит браузеру следующий текст:
Sweets = Конфеты
Sweets = Зефир
Примеры:
Используем следующую форму:
<FORM ACTION = "/scripts/submit.asp" METHOD = "post">
<P>Ваше имя: <INPUT NAME = "firstname" SIZE = 48>
<P>Какокие сладости вы предпочитаете: <SELECT NAME = "sweets">
<OPTION>Конфеты
<OPTION>Зефир
<OPTION>Шоколад
<OPTION>Леденцы</SELECT>
<p><INPUT TYPE = SUBMIT>
</FORM>
Вот такой запрос будет посылать наша форма на сервер:
firstname=Марат&sweets=Конфеты
Далее идет наш скрипт:
Добро пожаловать, <%= Request.Form("firstname") %>.
Ваши любимые сладости - <%= Request.Form("sweets") %>!
Наш скрипт породит следующий результат:
Добро пожаловать, Марат. Ваши любимые сладости - Конфеты!
Коллекция Request.QueryString
Коллекция QueryString получает значения переменных их HTTP-строки запроса. Строка запроса определяется
значениями, следующими за знаком вопроса (?). Некоторые различные процессы могут генерировать строку запроса.
Для примера, таг анкор
<a href="example?string=this is sample">Строка примера</a>
вырабатывает значение с имененм String и значением "this is sample". Строка запроса также генерируется при передачи
данных при обработке формы или прямым вводом строки пользователем прямо в браузер (строка адреса).
Синтакс:
Request.QueryString( переменная ) [ ( индекс ) | .Count ]
Параметры:
переменная
Имя переменной, через котурую будет передаваться значение.
индекс
Не обязательный параметр, который позволяет вам получить доступ к одному из значений параметра (в том случае если
передано не одно значение). Это может быть любое значение (целочисленное) в диапазоне от 1 до
Request.QueryString(элемент).Count.
Замечание:
Коллекция QueryString это разобранный вариант (преобразованный) из переменной QUERY_STRING в коллекции
ServerVariables. Это позволяет вам получать переменные из QUERY_STRING по имени. Значение
Request.QueryString(элемент) это массив всех значений элемента которые встречаются в пременной QUERY_STRING.
Вы можете определить число значений данного элемента вызовом Request.QueryString(элемент).Count.
Если элемент имеет всего одно значение, то этот вызов вернет 1, если же такого элемента нет вовсе, то результат будет
0.
Примеры:
Клиентский запрос:
/scripts/directory-lookup.asp?name=fred&age=22
Результат мы видим в следующей строке (QUERY_STRING):
name=fred&age=22
Коллекция QueryString содержит в данном случае 2 члена - это name и age. Вы можете воспользоваться следующим
скриптом:
Добро пожаловать, <%= Request.QueryString("name") %>.
Ваш возраст - <%= Request.Form("age") %>!
И получим:
Добро пожаловать, Fred. Ваш возраст - 22.
Коллекция Request.ServerVariables
Коллекция ServerVariables позволяет получать значения предопределенных переменных окружения.
Синтакс:
Request.ServerVariables( переменная )
Параметры:
переменная
Указывает имя переменной (а точнее константы) среды (окружения) сервера.
Она может быть одной из следующих значений:
Переменная Описание
ALL_HTTP Все HTTP-заголовки, переданные клиенту.
ALL_RAW Получает все заголовки в виде RAW. Различие между ALL_RAW и ALL_HTTP в том, что ALL_HTTP
размещается как HTTP_ префикс перед именем заголовка, а имя заголовка всегда строчное. В ALL_RAW
имя заголовка и значение присутствуют в том виде, в котром они получены клиентом.
APPL_MD_ Получает мета-путь (WAM) к приложению для ISAPI Dll.
PATH
APPL_PHYS Получает физический путь указывающий на расположение мета-путя. IIS конвертирует APPL_MD_PATH к
ICAL_PATH физическому (директории) пути и возвращает это значение.
AUTH_PAS Значение, введенное клиентом в диалоге авторизации. Эта переменная доступна только при основной
SWORD
(Basic) авторизации.
AUTH_TYP Метод авторизации, который сервер использует для проверки прав пользователей, когда применяется
E
попытка получить скрипт, защищенный паролем.
AUTH_USE Не обработанное имя пользователя (прошедшего авторизацию).
R
CERT_COO Уникальный ID (идентификатор) для клиентского сертификата, возвращается как строка. Может быть
KIE
использован как подпись сертифицированного клиента.
CERT_FLA бит0 - если установлен (1) - сертификат присутствует
GS
бит1 - если установлен - в случае, когда авторизация клиента прошла не успешно. Не удалось опознать
пользователя.
CERT_ISSU Издатель сертификата (O=MS,OU=IAS,CN=user name, C=USA).
ER
CERT_KEY Число бит, используемое в SSL, к примеру 128.
SIZE
CERT_SECR Размер (в битах) секретного ключа на сервере. (К примеру 1024).
ETKEYSIZE
CERT_SERI Поле серийного номера клиентского сертификата.
ALNUMBE
R
CERT_SER Издатель серверного сертификата.
VER_ISSUE
R
CERT_SER Субъект серверного сертификата.
VER_SUBJE
CT
CERT_SUBJ Субъект клиентского сертификата.
ECT
CONTENT_ Длина содержимого (в том виде, как взято клиентом).
LENGHT
CONTENT_ Тип данных в содержимом. Используется с запросами, которые прилагают информацию вместе с запросом,
TYPE
такие как GET, POST, PUT.
GATEWAY_ Версия спецификации CGI, используемая на сервере. В формате CGI/Версия.
INTERFACE
HTTP_<Hea Значение, запоминаемое в заголовке HeaderName. Любой заголовок, приведенный в данной таблице
derName> должен начинаться с HTTP_.
Замечание. Сервер интерпретирует любой символ подчеркивания в HeaderName как тире в в настоящем
заголовке. К примеру если вы укажете HTTP_MY_HEADER, то сервер пошлет заголовок, как MYHEADER.
Возвращает ON если запрос прошел через SSL-протокол или же возвращает OFF если пакет не был
HTTPS
защищен.
HTTPS_KE
Число бит (размер) SSL-ключа, к примеру 128.
YSIZE
HTTPS_SEC
RETKEYSIZ Число бит (размер) SSL секретного ключа на сервере, к примеру 1024.
E
HTTPS_SER
VER_ISSUE Издатель серверного сертификата.
R
HTTP_SERV
ER_SUBJEC Владелец серверного сертификата.
T
INSTANCE_ Текущий идентификатор для IIS в текстовом формате. Если он равен 1, то это представляется в виде
ID
строки.
INSTANCE_
Мета-путь к тому приложению, которое будет отвечать на запрос.
META_PAT
H
LOCAL_AD Возвращает адрес сервера (IP), который связан с ним в IIS. Это важно на машинах, которые отзываются на
DR
многое количество IP адресов.
LOGON_US
Windows NT учетная запись пользователя, который зарегистрирован на нем.
ER
Иныормация о пути, в том виде, как ее получает клиент. Вы можете использовать скрипт, который
PATH_INFO использует виртуальный путь и PATH_INFO сервера. Если это информация, пришедшая из URL, то она
декодируется сервером, прежде, чем ее получит CGI скрипт.
PATH_TRA Преобразованный вариант PATH_INFO, который берет путь и, по необходимости, производится
NSLATED преобразование виртуальный -> физический.
QUERY_ST
Строка с параметрами, передаваемая в запросе после знака вопроса (?).
RING
REMOTE_A
Адрес удаленного хоста, произведшего запрос.
DDR
REMOTE_H Имя удаленног хоста, сделавшего запрос. Если сервер не имеет этой информации, то точно установит
OST
REMOTE_ADDR, а данную константу оставит пустой.
REMOTE_U
Непреобразованное имя, переданное пользователем.
SER
REQUEST_
Метод, который использовался, чтобы сделать запрос. Для протокола HTTP это GET, POST, HEAD.
METHOD
SCRIPT_NA
Виртуальный путь к скрипту, который запускается. Используется URL.
ME
SERVER_N
Имя сервера, как хоста, DNS alias или IP адрес.
AME
SERVER_R
Номер порта, по которому был получен запрос.
OOT
SERVER_P
Строка, содержащая 0 или 1. Если запрос обрабатывается защищенным портом, то значение 1, в противном
ORT_SECU
случае 0.
RE
SERVER_PR
Имя и версия протокола запроса. Формат - протокол/версия
OTOCOL
SERVER_S Название и версия програмного обсеспечения, под которым стоит сервер. Формат следующий:
OFTWARE название/версия
URL
Хранит основную порцию URL.
Замечание:
Если клиент передает заголовок подругому, нежели указано в таблице, то вы можете получить его значение, используя
префикс HTTP_ в вызове Request.ServerVariables. Для примера рассмотрим вариант, если клиент отсылает такой
заголовок:
SomeNewHeader: SomeNewValue
Вы сможете получить данный заголовок, используя следующий скрипт:
<% Request.ServerVariables("HTTP_SomeNewHeader") %>
а также вы можете воспользоватся изощренным скриптом, чтобы напечатать все серверные переменные в таблицу.
<table>
<tr><td><b>Переменная</b></td><td><b>Значение></b></td></tr>
<% For each name In Request.ServerVariables %>
<tr><td> <% = name %> </td><td> <% = request.ServerVariables(name) %> </td></tr>
</table>
<% Next %>
Примеры:
Следующий пример демонстрирует использование объекта Request чтобы показать различные серверные переменные.
<HTML>
<!-- This example displays the content of several ServerVariables. -->
ALL_HTTP server variable =
<%= Request.ServerVariables("ALL_HTTP") %> <BR>
CONTENT_LENGTH server variable =
<%= Request.ServerVariables("CONTENT_LENGTH") %> <BR>
CONTENT_TYPE server variable =
<%= Request.ServerVariables("CONTENT_TYPE") %> <BR>
QUERY_STRING server variable =
<%= Request.ServerVariables("QUERY_STRING") %> <BR>
SERVER_SOFTWARE server variable =
<%= Request.ServerVariables("SERVER_SOFTWARE") %> <BR>
</HTML>
Следующий пример использует коллекцию ServerVariables чтобы вставить имя сервера в гиперссылку:
<A HREF = "http://<%= Request.ServerVariables("SERVER_NAME") %>
/scripts/MyPage.asp">Link to MyPage.asp</A>
Метод Request.BinaryRead
Синтакс:
численное_значение = Request.BinaryRead (счетчик)
Параметры:
численное_значение
массив беззнаковых байт, возвращенный данным мотодом. Этот параметр будет иметь тип VT_ARRAY | VT_UI1.
счетчик
перед запуском, указывается как много байт нужно прочитать от клиента. После этого метод будет выполнен, то
счетчик будет содержать количество байт, удачно считанных от клиента. Общее число байт, которое будет в
действительности прочитано меньше или равно Request.TotalBytes.
Замечание:
Метод Request.BinaryRead используется для чтения потока данных, переданных от клиента, как часть POST-запроса.
Данный метод использует низкоуровненный доступ к этим данным. А, к примеру, Request.Form предоставляет вам теже
данные, но предварительно преобразованные и рассортированные. Если вы вызвали в скрипте Request.BinaryRead вы
никак не можете использовать в последующем метод Request.Form для получения данных из формы, в противном
случае это приведет к ошибке.
Аналогично, используя в скрипте описание, присваивание и т.д. элементам формы через Request.Form вы уже не
сможете воспользоваться методом Request.BinaryRead так как это приведет к ошибке.
Пример:
Следующий пример демонстрирует использования метода Request.BinaryRead для того, чтобы записать содержимое
запроса в ваш массив.
<%
Dim binread
Dim bytecount
bytecount = Request.TotalBytes
binread = Request.BinaryRead(bytecount)
%>
Свойство Request.TotalBytes
Данное свойство позволяет определить количество байт, которые клиент посылает серверу в теле запроса. Данное
свойство является доступным только для чтения.
Синтакс:
счетчик = Request.TotalBytes
Параметры
счетчик
параметр которому будет присвоено значение, возвращенное данным свойством.
Пример:
Следующий пример показывает как можно получить размер клиентского запроса (в байтах), посланных серверу.
<%
Dim bytecount
bytecount = Request.TotalBytes
%>
Описание объекта Response








Описываемый объект является очень полезным и мощным инструментом. Данный объект имеет несколько методов, их
описание приводится ниже:
Коллекции:
Response.Cookies
Методы:
Response.Write
Response.Redirect
Response.End
Response.AddHeader
Response.AppendToLog
Response.BinaryWrite
Response.Clear
Response.Flush
Свойства:
Response.Buffer
Response.CacheControl
Response.Charset
Response.ContentType
Response.Expires
Response.ExpiresAbsolute
Response.IsClientConnected
Response.Pics

Response.Status









Коллекция Response.Cookies
Коллекция Cookies устанавливает значения для cookies. Если указанные cookies не существуют, то создает их. Если
cookie существует, то принимает новое значение, а старое уничтожается.
Синтакс:
Response.Cookies( cookie ) [( ключ ) | . аттрибуты ] = значение
Параметры:
cookie
Имя cookie
ключ
Необязательный параметр. Если он указан, то cookie - это справочник (вложенный) и ключ - это множество значений.
аттрибуты
Указанная информация о самих cookie. Данный параметр может быть один из следующих:
Назва Описание
ние
Domai Только запись. Если указан, то cookie передаются только по запросу из этого домена.
n
Expire Только запись. Дата, когда у cookie истекает срок действия. Эта дата должна быть установлена для того, чтобы
s
cookie записались на клиентский жесткий диск после окончания сессии. Если этот атрибут не установлен, то дата
окончания срока действия cookie принимается текущей датой. Cookie прекратят срок действия сразу же по
окончании сессии.
HasKe Только чтение. Указывает на то, содержит ли cookie данный ключ.
y
Path Только запись. Если указан, то cookie передаются только по запросу с этого пути. Если параметр не установлен,
то используется путь к приложению.
Secure Только запись. Указывает на то, защищены ли будут cookie или нет.
значение
Указывает значение, которое необходимо присвоить данному ключу или атрибуту.
Замечание:
Если cookie с ключем созданы так, как показано в следующем скрипте,
<%
Response.Cookies("mycookie")("type1") = "сахар"
Response.Cookies("mycookie")("type2") = "печенье"
%>
то следующий заголовок будет послан:
Set-Cookie:MYCOOKIE=TYPE1=сахар&TYPE2=печенье
Если же присвоить mycookie значение без использования ключей, то это действие разрушит type1 и type2 - ключи. К
примеру:
<% Response.Cookies("myCookie") = "шоколадный зефир" %>
В предыдущем примере ключи type1 и type2 будут разрушены и их значения потерены. Mycookie будет теперь
содержать в себе значение шоколадный зефир.
Вы также можете проверить существование конкретного ключа следующим способом:
<% = Response.Cookies("myCookie").HasKeys %>
Если будет выведено TRUE, значить такой ключ существует, в случае FALSE - нет.
Метод Response.Write
Синтакс:
Response.Write переменная_или_значение
Параметры:
переменная_или_значение
Данные для вывода на экран браузера через HTML. Этот параметр может быть любого типа, поддерживаемого
VisualBasic Scripting Edition. То есть данные могут быть типов: дата, строка, символ, числовые значения. Значение
данного параметра не может содержать комбинации %>. Вместо нее можно использовать равнозначную комбинацию
%\>. Web-сервер будет преобразовывать эту последовательность в требуемую, когда скрипт будет выполнен.
Примеры:
Следующий пример показывает как работает метод Response.write для вывода сообщения клиенту.
Я просто скажу вам: <%Response.write "Привет всем!!!"%>
А ваше имя <%Response.write(Request.Form("name"))%>
Следующий пример добавляет HTML-таг на web-страничку. Так как данный метод не может содержать комбинацию
%>, то мы используем последовательность %\>. Итак пример скрипта:
<% Response.write "<TABLE WIDTH=100%\>" %>
Результатом вывода будет строка: <TABLE WIDTH=100%>
Метод Response.Redirect
Синтакс:
Response.Redirect URL (URL - универсальный описатель ресурсов)
Параметры:
URL
Параметр является универсальным описателем ресурса. Он показывает , када необходимо переадресовать браузер.
Замечание:
Любое вхождение данного метода между тагами <BODY> и </BODY> web-страницы будет проигнорирован. Данный
метод может использоваться только в заголовке HTML-страницы. Данный метод передаст заголовок (header) браузеру,
если пропущен параметр URL данного объекта в следующем виде:
HTTP/1.0 302 Object Moved
Location URL
Метод Response.End
Синтакс:
Response.End
Замечание:
Если свойство Response.Buffer был установлен в TRUE (истина), то вызывая метод Response.End будет производить
очистку буфера, выталкивая данные из него клиенту. Если вы не хотите выводить данные пользователю, вы должны
вызвать следующий метод:
<%
Response.Clear
Response.End
%>
Метод Response.AddHeader
Метод AddHeader добавляет HTML-заголовок с определенными значениями. Этот метод всегда добавляет новый
заголовок к ответу клиентскому браузеру. Данный метод не заменяет существующий заголовок новым. Добавленный
заголовок не может быть удален.
Данный метод применяется только для "продвинутых" задач.
Синтакс:
Response.AddHeader имя_переменной, значение
Параметры:
имя_переменной
Название нового параметры HTML-заголовка.
значение
Устанавливаемое значение, которое будет запомнено в заголовке.
Замечания:
Для корректной работы метода, имя_переменной не должно содержать символа подчеркивания ( _ ). Набор
ServerVariables интерпретирует символ подчеркивания как тире в заголовке. Для примера следующий скрипт
принуждает сервер найти параметр из HTML-заголовака, называющийся MY-HEADER.
<% Requset.ServerVariables("HTTP_MY_HEADER") %>
Так как HTTP протокол требует, чтобы все параметры заголовка были переданы до начала тела HTML-страницы, то вы
должны вызывать метод AddHeader в вашем скрипте до того, как начнется описание <Body>...</Body>. Имеется одно
исключение. Если значение свойства Buffer установлено в истину (true), тогда вы можете писать AddHeader в любой
точке скрипта, но до первого вызова метода Flush. В противном случае вызод метода AddHeader вызовет ошибку.
Пример:
Следующие два .ASP-файла демонстрируют последнее замечание.
----------------------------Файл 1.ASP---------------------------<% Response.AddHeader "Внимание!", "Текст сообщения об ошибке"%>
<HTML>
ваш текст на страничке
</HTML>
В данном примере страница не буферируется. Скрипт работает однако AddHeader вызывается перед тем, как сервер
будет производить вывод в HTML клиенту.
-------------------------Файл 2.ASP-----------------------------<% Response.Buffer = true %>
<HTML>
здесь идет некоторая информация вашей странички...
<%Response.AddHeader "Внимание!", "сообщение об ошибке"%>
<%Response.Flush%>
<%Response.Write("некий текст")%>
<HTML>
Во втором примере страница буферируется и как ресультат сервер не выдает текст клиенту до тех пор, пока не кончится
сам скрипт или пока не встретится метод Flush. Вы можете использовать данный метод для того, чтобы отослать
несколько копий некоторого параметра заголовка с различными значениями, как с заголовком WWW-Authenticate.
Метод Response.AppendToLog
Метод AppendToLog добавляет строку в конец файла отчета (log-file) web-сервера. Вы можете вызывать этот метод
столько раз, сколько вам необходимо. Каждый раз при вызове метода в файл отчета сервера будет записана указанная
вами строка.
Синтакс:
Response.AppendToLog значение
Параметры:
значение
Текст, который будет добавлен к фалу отчета web-сервера. Данная строка не может содержать символ запятой (,).
Причем общая длина добавляемой строки не должна превышать 80 символов.
Замечания:
Для использования данной возможности вам необходимо, чтобы опция URI Query была разрешена на панели
"расширенных свойств ведения log-файла" для данного web-сервера в IIS.
Метод Response.BinaryWrite
Метод BinaryWrite позволяет записывать указанную информацию в текущий HTTP-вывод без какого-либо
преобразования символов. Этот метод удобен для вывода нестроковой информации, такой как двоичные данные,
требуемые каким-либо приложением.
Синтакс:
Response.BinaryWrite данные
Параметры:
данные
Данные, предназначенные для HTTP-вывода.
Пример:
Если у вас есть объект, порождающий байтовый массив, вы можете использовать следующий вызов данного метода для
передачи этого массива какому-либо приложению, запущенному на клиентской машине.
<% Set BinGen = Server.CreateObject(My.BinaryGenerator)
Pict = BinGen.MakePicture
Response.BinaryWrite Pict
%>
Метод Response.Clear
Метод Clear стирает всю забуферированный HTML-вывод. Однако данный метод не стирает информаицю из буфера,
связанную с заголовком. Вы можете использовать данный метод для управления ошибками. Однако выполнение
данного метода будет приводить к ошибке если свойство Response.Buffer не истина (true).
Синтакс:
Response.Clear
Метод Response.Flush
Метод Flush передает буферированный вывод незамедлительно. Этот метод приведет к ошибке если свойство
Response.Buffer не установлено в истину (true).
Синтакс:
Response.Flush
Замечание:
Если Flush-метод вызывается ASP страницой, то сервер не учитывает запросы "Keep-Alive" к этой странице.
Свойство Response.Buffer
Свойство Response.Buffer указывает на необходимость буферирования вывода. Когда вывод буферизован сервер не
передает вывод клиенту-браузеру сразу до тех пор, пока либо не закончится выполнение данного скрипта или не
встретится метод Flush или End.
Данное свойство не может быть установлено после того, как сервер уже передаст вывод клиенту. Поэтому данное
свойство должно инициироваться в первой строке скрипта.
Синтакс:
Response.Buffer [=flag]
Параметры:
flag
Указывает нужно ли буферизировать вывод или нет. Параметр может принимать одно из двух значений:
TRUE - необходимо буферизировать вывод.
FALSE - не нужно буферизировать.
Замечания:
Если текущий ASP-скрипт установил буферизацию вывода, и не вызвал метода Flush, то сервер не учитывает KeepAlive - запросы сделанные клиентом. Это сохраняет время, так как серверу не нужно создавать новое соединение на
клиентский запрос.
Однако, буферизация приводит к тому, что вывод происходит лишь после полного выполнения скрипта, а для больших
программ это может повлечь значительную задержку в выводе на клиентский браузер.
Вы можете использовать ASPBufferingOn - свойство для того, чтобы установить значение по умолчанию для всех
скриптов выполняемых на сервере.
Свойство Response.CacheControl
Данное свойство предъизменяет установленное по умолчанию значение. Когда вы устанавливаете свойство в значение
Public, то Proxy-сервер может кэшировать вывод, генерируемый ASP-ом.
Синтакс:
Response.CacheControl [= cache control header]
Параметры:
Cache control header
Этот параметр управления заголовком может быть либо Public либо Private.
Свойство Response.CharSet
Свойство CharSet позволяет добавлять название кодовой таблицы символов (к примеру, WINDOWS-1251) в HTML
заголовок, строку content-type (тип содержимого).
Синтакс:
Response.CharSet имя_кодовой_таблицы
Параметры:
имя_кодовой_таблицы
Строка, которая указывает кодовую таблицу для данной HTML-страницы. Наименование данной кодовой таблицы будет
добавлено в заголовок HTML-файла под параметром "content-type".
Пример:
Для ASP-страницы, для которой не использовано свойство Response.Charset параметр "content-type" в заголовке будет
следующим:
content-type:text/html
Если же ASP-файл содержит компанду
<%Response.Charset("Windows-1251")%>
то в заголовке поле content-type будет иметь вид
content-type:text/html; charset=Windows-1251
Замечание:
Данная функция вставляет любую строку в заголовок и не проверяет ее правильность.
Если страничка содержит несколько тагов Response.Charset, то каждый последующий будет заменять значение на свое
собственное.
Свойство Response.ContentType
Свойство ContentType позволяет указывать вид (тип) содержимого HTML-файла. Если данное свойство не
использовано, то по умолчанию принимается text/html.
Синтакс:
Response.ContentType [=тип_содержимого]
Параметры:
тип_содержимого
Строка, описывающая тип содержимого HTML. Эта строка обычно имеет вид "тип/подтип", где тип это основная
категория содержимого и подтип - указывает тип содержимого. Для получения полного списка поддерживаемых типов обратитесь к документации к браузеру или спецификации HHTP.
Пример:
Следующий пример илюстрирует установку типа содержимого как Формат Определения Каналов (Push-каналы).
<% Response.ContentType = "application/x-cdf" %>
Второй пример демонстрирует установку свойства в наиболее общеизвестные значения.
<% Response.ContentType = "text/HTML" %>
<% Response.ContentType = "image/GIF" %>
<% Response.ContentType = "image/JPEG" %>
Свойство Response.Expires
Свойство Expires указывает промежуток времени пока страница HTML закешированная браузером считается не
утратившей силу (срок хранения). Если пользователь запрашивает закешированную страницу у браузера, у которой не
вышел срок "хранения", то браузер возвращает ее прямо из своего кэша.
Синтакс:
Response.Expires [=число]
Параметры:
число
Количество времени в минутах перед тем, как страница будет считаться "просроченной". Установка этого значения в 0
заставляет данную страницу становится "просроченной" незамедлительно.
Замечание:
Если данное свойство установлено более чем один раз на странице, то используется самое маленькое значение.
Свойство Response.ExpiresAbsolute
Свойство ExpiresAbsolute указывает время и дату, после которого страница HTML закешированная браузером
считается утратившей силу (вышел срок хранения). Если пользователь запрашивает закешированную страницу у
браузера, у которой не вышел срок "хранения", то браузер возвращает ее прямо из своего кэша. Если время указано (а
дата указана), то "срок хранения" данной страницы истекает в полночь этого дня. Если ни время ни дата не указаны, то
значение присваивается в соответствии с днем и временем, когда был запущен скрипт.
Синтакс:
Response.ExpiresAbsolute [= [дата] [время]]
Параметры:
дата
Указывает на дату истечения "срока хранения". Формат даты должен соответствовать стандврту RFC-1123.
время
Указывает на время, когда у страницы истекает "срок хранения". Данное значение переводится в формат GMT (время по
Гринвичу) перед тем, как заголовок будет передан клиенту.
Замечание:
Если данное свойство определяется более одного раза на странице, то момент истечения "срока хранения" принимается
самым скорым из всех указанных значений.
Пример:
Следующий пример указывает что "срок хранения" страницы истечет в 13:30:15 31 мая 1998 года.
<% Response.ExpiresAbsolute = #May 31,1998 13:30:15# %>
Свойство Response.IsClientConnected
Данное свойство является значение только для чтения, то есть этому свойству нельзя присваивать никаких значений.
Это свойство указывает на то, подключен ли клиент или уже не подключен к серверу, определенное в последнем из
Response.Write.
Синтакс:
Response.IsClientConnected ( )
Замечание:
Это свойство позволяет вам определять моменты, когда пользователь подключен, и когда отключен от сервера. К
примеру, длина периода времени между тем когда сервер ответил и когда клиент сделал запрос дает уверенность в том,
что клиент еще подключен и есть смысл продолжить выполнение скрипта.
Пример:
<%
'посмотрим, подключен ли пользователь
If Not Response.IsClientConnected Then
'получаем номер сессии и закрываем сессию
Shutdownid = Session.SessionID
'подготовка к закрытию сессии
Shutdown(Shutdownid)
End If
%>
Свойство Response.Pics
Данное свойство позволяет добавить значение поля pics-label в заголовок ответа.
Синтакс:
Response.PICS (PICSLabel)
Параметры
PicsLabel
Строка, которая преобразована в формат PICS - метку. Значение указанное в этом параметре добавляется в заголовок
ответа в поле PICS.
Пример:
Для ASP-файла включающего:
<% Response.PICS("(PICS-1.1 <http://www.rsac.org/ratingv01.html> labels on " & chr(34) & "1997.01.05T08:15-0500"
until "1999.12.31T23:59-0000" ratings (v 0 s 010 n 0))%>
Следующий заголовок будет сформирован
PICS-label:(PICS-1.1 <http://www.rsac.org/ratingv01.html> labels on "1997.01.05T08:15-0500" until
"1999.12.31.T23:59-0000" rating (v 0 s 0 1 0 n 0))
Замечание:
Это свойство позволяет вам вставлять любые строки в заголовок, независимо от корректности строк.
Если страничка содержит множество тагов содержащих Response.PICS, то каждая последующая будет заменять
значение предыдущей.
Свойство Response.Status
Данное свойство позволяет указывать строку состояния, возвращаемую сервером. Значения статуса определены в
спецификации HTTP.
Синтакс:
Response.Status = описание_состояния
Параметры
описание_состояния
Строка, которая содержит и трех цифровой номер, который указывает код статуса и также краткое описание данного
кода. К примеру, 310 Move Permanently.
Пример:
Следующий пример показывает установку статуса:
<% Response.Status = "401 Unauthorized" %>
Замечание:
Используйте это свойство чтобы модифицировать строку, возвращаемую сервером.





Описание объекта Server
Описываемый объект позволяет получать доступ к серверу через меоды и свойства. Большинство из этих методов и
свойств используются как утилитные функции.
Методы:
Server.CreateObject
Server.HTMLEncode
Server.MapPath
Server.URLEncode
Свойства:
Server.ScriptTimeout
Метод Server.CreateObject
Данный объект создает экземпляр серверного компонента. Если компонент был описан в OnStartPage и OnEndPage
методах, то OnStartPage - метод вызовет его в этот момент.
Синтакс:
Server.CreateObject( идентификатор_программы )
Параметры:
идентификатор_программы
Указывает тип объекта, который будет создан. Формат идентификаотра_программы следующий:
[владелец]Компонент[.Версия].
Замечания:
По умолчанию, объекты создаются методом Server.CreateObject из вашей страницы. Это подразумевает, что объект
будет автоматически уничтожен как только сервер завершит обработку данной ASP-страницы.
Для создания объекта в виде сессии или приложения вы можете также использовать тэг <OBJECT> и установить
атрибут SCOPE в значение SESSION или APPLICATION или сохранить объект в переменной сессии или приложения.
К примеру, объект сохранен в переменной сессии, как показано в следующем скрипте, и будет удален, когда объект
Session будет утилизирован. А также тогда, когда истекло максимальное время сессии или же был вызван метод
Abandon.
<% Set Session("ad") = Server.CreateObject("MSWC.AdRotator") %>
Вы также можете уничтожить объект установив переменную копии объекта в значение Nothing или присвоить ей новое
значение, как показано выше. Первый пример удаляет объект Ad. Второй заменяет Ad строкой.
<% Session("Ad") = Nothing %>
<% Session("Ad") = "Какая-то строка текста" %>
Вы не можете создать экземпляр объекта с тем же именем, что и сам встроенный объект. К примеру, следующий скрипт
вызовет ошибку:
<% Set Response = Server.CreateObject("Response") %>
Примеры:
<% Set MyAd = server.CreateObject("MSWC.AdRotator") %>
Приведенный пример показывает создание серверного компонента MyAd, как экземпляр встроенного компонента
MSWC.AdRotator который может быть использован для автоматизации рекламной акции на web-страницах.
Метод Server.HTMLEncode
Данный метод позволяет установить HTML-кодировку указанной строке.
Синтакс:
Server.HTMLEncode ( строка)
Параметры:
строка
Указанная строка для преобразования.
Примеры:
Следующий скрипт
<% = Server.HTMLEncode("Тэг параграфа - <p>") %>
выведет следующий текст:
Тэг параграфа - <P>
Замечание:
Но на броузере предыдущий пример отобразит:
Тэг параграфа - <p>
Если вы смотрите источник или открываете страничку как текст, то вы будете иметь возможность видеть
преобразованный HTML.
Метод Server.MapPath
Данный метод позволяет установить указать относительный путь с соответствующей физической директории на
сервере.
Синтакс:
Server.MapPath ( путь)
Параметры:
путь
Указывается относительный или виртуальный путь к физической (реальной) директории. Если путь начинается с
прямого (/) или обратного (\) слэша, то метод MapPath возвратит путь, как если путь - полный виртуальный путь.
Примеры:
К примеру, мы имеем файл data.txt, расположенный в директории c:\Inetpub\wwwroot\scripts, как и файл test.asp,
содержащий наш пример. Директория c:\InetPub\wwwroot является корнем сервера (домашней директорией).
Следующий пример использует серверную переменную PATH_INFO для определения пути к данному файлу.
<% = server.mappath(request.ServerVariables("PATH_INFO"))%>
данный скрипт возвратит браузеру следующий текст:
c:\inetpub\wwwroot\scripts\test.asp
Потому, что параметр пути в следующем примере начинается со слэша он будет отнесен к относительному пути
текущей директории, т.е в данном случае c:\inetpub\wwwroot\script.
<% = server.mappath("data.txt")%><br>
<% = server.mappath("script/data.txt")%><br>
Данный пример возвратит:
c:\inetpub\wwwroot\script\data.txt
c:\inetpub\wwwroot\script\script\data.txt
Следующие два примера используют слэш чтобы указать, что возвращенный путь был в виде полного полного
виртуального пути на сервере.
<% = server.mappath("/script/data.txt")%><BR>
<% = server.mappath("\script")%><BR>
Данный пример возвратит:
c:\inetpub\script\data.txt
c:\inetpub\script
Замечание:
Данный метод не поддерживает относительного пути с использованием (.) или (..). К примеру, следующий
относительный путь ../MyDir/MyFile.txt возвратит ошибку.
Метод MapPath не проверяет того факта, что возвращаемый путь является правильным и существует на сервере.
Метод Server.URLEncode
Данный метод применяет методы кодирования URL, включая escape-последовательности к заданной строке.
Синтакс:
Server.URLEncode ( строка)
Параметры:
строка
Заданная строка для преобразования.
Примеры:
Следующий пример
<% response.write(server.URLEncode("http://www.microsoft.com")) %>
возвратит браузеру следующий текст:
http%3A%2Fwww%2Emicrosoft%2Ecom
Свойство Server.ScriptTimeout
Данное свойство указывает максимальное время, прежде чем выполнение скрипта должно будет прерваться.
Синтакс:
Server.ScriptTimeout = время_в_секундах
Параметры
время_в_секундах
Указанное время в секундах с момента начала выполнения скрипта до того момента, когда сервер прервет его
выполнение. По умолчанию это 90 секунд.
Пример:
Следующий пример устанавливает время выполнения скрипта в 100 секунд:
<% Server.ScriptTimeout = 100 %>
А также вы можете использовать данное свойство для того, чтобы получить данное значение:
<% TimeOut = Server.ScriptTimeout %>
Замечание:
По умолчанию ScriptTimeout может быть установлен для вэб сервера используя свойство AspScriptTimeout в метабазе.
Свойство ScriptTimeout не может быть установлено в значение, меньшее, чем указано в метабазе.
Описание объекта Session









Вы можете использовать данный объект для хранения информации о (и для) пользовательских сессий. Переменные,
хранящиеся в объекте Session не уничтожаются когда пользователь осуществляет переходы между страницами в
приложении, а хранятся на протяжении существования данной сессии.
Вэб сервер автоматически создает объект Session когда страница приложения востребуется пользователем, который до
сих пор не имел сессию. Сервер разрушает объект Session когда время "существования" сессии истекает или же ссесия
разрушается принудительно.
Основное использование данного объекта это хранение в нем пользовательских "персоналий". К примеру, если
пользователь указывает на то, что ему не надо показывать графические изображения вы можете запомнить эту
информацию в объекте Session. Для более подробной информации по данному объекту вы можете обратиться к разделу
Управление Сессиями в разделе APS-приложенийй.
Замечание: Данный объект может быть смонтирован только для браузеров, поддерживающих cookies.
Коллекции:
Session.Contents
Session.StaticObjects
Методы:
Session.Abandon
Свойства:
Session.CodePage
Session.LCID
Session.SessionID
Session.TimeOut
События:
Session.Session_OnStart
Session.Session_OnEnd
Коллекция Session.Contents
Коллекция Contents содержит все элементы, которые были установлены для сессии без использования тэгов <OBJECT>.
Коллекция может быть использована для определения значения специфичных элементов сессии.
Синтакс:
Session.Contents( ключ )
Параметры:
ключ
Имя свойства для получения его значения.
Замечание:
Вы можно использовать структуру управления циклом через ключи данной коллекции. Это демонстрируется в
следующем примере:
<%
Dim sessitem
For each sessitem in Session.Contents
response.write(sessitem & " : " & Session.Contents(sessitem) & "<br>")
Next
%>
Коллекция Session.StaticObjects
Коллекция StaticObjects содержит все объекты, созданные с помощью тэга <OBJECT>. Данная коллекция может
использоваться для того, чтобы определять значения указанных свойств объекта или же через цикл получать все
свойства для всех объектов.
Синтакс:
Session.StaticObjects( ключ )
Параметры:
ключ
Название свойства, служащее для получения через него его значения.
Замечание:
Вы можете использовать структуру цикла через ключ для доступа к свойствам данной коллекции. Это демонстрирует
следующий пример:
<%
Dim objprop
For each objprop in Session.StaticObjects
Response.write(objproperty & ":" & Session.StaticObjects(objprop) & "<br>")
Next
%>
Метод Session.Abandon
Метод Abandon разрушает все объекты запомненные в объекте Session и высвобождаются занятые этим ресурсы. Если
вы не вызываете данного метода, то сервер сам "разрушит" эти объекты когда истечет время "жизни" сессии, т.е. тайм
аут.
Синтакс:
Session.Abandon
Замечание:
Когда метод Abandon вызывается, текущий объект Session ставится в очередь на удаление, но реально будет уничтожен
только после того, как все команды данног скрипта будут обработаны.Это подразумевает, что можете еще
воспользоватся обращением к переменным, запомненным в объекте Session в любом месте данной, но никакой другой
страницы.
Пример:
Следующий пример демонстрирует вывод клиенту переменной Mary. Этот пример работает работает потому, что объект
Session будет уничтожен только после обработки всего текущего скрипта.
<%
Session.Abandon
Session("MyName") = "Mary"
Response.Write(Session("MyName"))
%>
Если вы обращаетесь к переменной MyName на другой странице, то она будет пуста.
Сервер создает новый объект Session когда вы открываете другую страницу вэб сервере (другой скрипт) после
прерывания (Abandon) сессии. Вы можете запоминать переменные и объекты в этом новом объекте Session.
Свойство Session.CodePage
Синтакс:
Session.CodePage ( =кодовая_страница )
Параметры
кодовая_страница
беззнаковое целое значение, представляющее корректный номер кодовой страницы для системы, в которой запущена
ASP-машина.
Замечания:
Кодовая страница это набор символов. Различные языки могут использовать различные кодовые страницы. К примеру
ANSI - кодовая страница 1252 используется для "Американского" английского языка и большинства европейских
языков. Страница - 1251 - кириллица для русского языва в среде Windows.
Свойство Session.LCID
Данное свойство определяет идентификатор расположения, который будет использован для вывода клиенту
динамического содержимого.
Синтакс:
Session.LCID ( = LCID )
Параметры
LCID
корректный идентификатор месторасположениея.
Замечания:
Данное свойство указывает идентификатор расположения, который является стандартной мендународной
аббривиатурой, которая уникальным образом идентифицирует одно предопределенное системой расположение.
Свойство Session.SessionID
Свойство SessionID возвращает идентификатор сессии для данного пользователя. Каждая сессия имеет уникальный
идентификатор, который создается сервером, когда сессия создается. Данный идентификатор возвращается как данные
типа Long.
Синтакс:
Session.SessionID
Замечания:
Вы не должны использовать свойство SessionID для того, чтобы создать значение основного ключа в приложениях баз
данных потому, что после рестарта Web-сервера, значения идентификатора сессии могут повторяться. Вместо этого вы
можете использовать автоинкриментирующийся счетчик записей, к примеру IDENTITY, поддерживаемый Microsoft®
SQL server или в Microsoft® Access - COUNTER.
Свойство Session.TimeOut
Свойство TimeOut указывает на период времени в минутах, связанный с объектом Session для приложения. Если
пользователь не обновить (refresh) или не запросить страницу у сервера в течение указанного периода времени - сессия
будет завершена.
Синтакс:
Session.Timeout [ = минут ]
Параметры:
минут
указанное время в минутах, по истечении которого сервер закончит сессию автоматически.
Событие Session.Session_OnEnd
Событие Session_OnEnd будет вызвано тогда, когда сессия будет прервана принудительно или по таймауту.
Синтакс:
<SCRIPT LANGUAGE=язык_скрипта RUNAT=Server>
Sub Session_OnEnd
...
End Sub
</SCRIPT>
Параметры:
язык_скрипта
Указывает на язык программирования, который будет использован для написания данной процедуры. Им может быть
любой из поддерживаемых языков программирования - таких как VBScript или JScript. Если более одного события
используют один и тотже язык программирования, то они могут быть объеденены между парой тэгов <SCRIPT>.
Замечания:
Вы не можете вызывать метод MapPath из процедуры Session_OnEnd script.
Событие Session.Session_OnStart
Событие Session_OnStart вызывается в тот момент, когда сервер создает новую сессию.
Сервер обрабатывает этот скрипт перед тем, как обработать запрашиваемую страницу. Событие Session_OnStart - самое
подходящее место для описания и присваивания значений переменным, которые должны существовать на протяжении
всей сессии, потому что они будут определены до того, как любая из страниц (данной сессии) будут обработаны. Все
встроенные объекты (Application, ObjectContext, Request, Response, Server, Session) могут быть доступны при описании
события Session_OnStart
Синтакс:
<SCRIPT LANGUAGE=язык_скрипта RUNAT=Server>
Sub Session_OnStart
...
End Sub
</SCRIPT>
Параметры:
язык_скрипта
Указывает на язык программирования, который будет использован для написания данной процедуры. Им может быть
любой из поддерживаемых языков программирования - таких как VBScript или JScript. Если более одного события
используют один и тотже язык программирования, то они могут быть объеденены между парой тэгов <SCRIPT>.
Пример:
В процессе создания объекта Session, если событие Session_OnStart содержит вызов методов Redirect или End, то
сервер остановит выполнение скрипта и в файле Global.asa и в файле, который породил вызов события Session_OnStart.
Вы можете вызвать метод Redirect в событии Session_OnStart, к примеру, чтобы пользователь всегда начинал сессию с
одной и той же Web-страницы. Когда пользователь запрашивает страницу приложения, сервер создает сессию для
данного пользователя и обрабатывает скрипт события Session_OnStart. Вы можете включить скрипт в это событие для
проверки того, какая страница открывается пользователем как стартовая и, если не та, которую вы предполагаете, то
направлять его на стартовую страницу путем вызова метода Response.Redirect. Эту процедуру демонстрирует
следующий пример:
<SCRIPT RUNAT=Server Language=VBScript>
Sub Session_OnStart
' Проверим, с какой страницы пользовател начал посещение страниц
' ASP - приложения.
' Заменяем значение, полученное в переменной startPage
' вместе с виртуальным путем
startPage = "/MyApp/StartHere.asp"
currentPage = Request.ServerVariables("SCRIPT_NAME")
' Делаем регистро-зависимое сравнение и если они не равны,
' то отправляем пользователя на стартовую страницу
if strcomp(currentPage,startPage,1) then
Response.Redirect(startPage)
end if
End Sub
</SCRIPT>
Приведенный пример работает только с браузером, который поддерживает cookies. Браузер, не поддерживающий cookie
не возвратит SessionID - идентификатор, сервер будет создавать новые сессии каждый раз, когда пользователь будет
запрашивать страницы. И для каждого такого запроса сервер будет обрабатывать скрипт события Session_OnStart и
перенаправлять пользователя на стартовую страницу. Если вы воспользуетесь примером ниже, то вам необходимо на
начальной странице вашего приложения оповестить посетителей о том, что для просмотра вашего сервера необходим
cookie-совместимый браузер.
Замечания:
Вы должны учитывать, что любой текст скрипта события Session_OnStart, следующий за методом Redirect
выполняться не будет! Для того, что бы учитывать эту особенность вы должны поставить вызов метода Redirect
последней командой вашего скрипта события. Это продемонстрировано в примере ниже:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnStart
' Скрипт инициализации сесии
' здесь.....
Response.Redirect "http:/server/app/StartHere.asp"
End sub
</SCRIPT>
В предыдущем примере метод Redirect вызывается последним в процедуре и следовательно все предшествующие ему
команды будут корректно выполнены.
Смотри также:
Session_OnEnd, Application_OnStart
Download