Июнь 2010

Самоучитель по креативному веб-дизайну. Книга 4, стр.41

HTML and Web Design Tips & Techniques





DIM tableStart, tableEnd, tdLeft, tdRight, tdEnd

DIM trStart, trEnd ‘ Для хранения строковых значений

DIM custName (1) ‘ Массив из двух элементов

DIM totalDue ‘ Для хранения числового значения



tableStart = »

align=fcenter’ width=’200′ border=’l'»

tableEnd = «

»

tdLeft = « tdRight = « tdEnd = «

»

trStart = «
»

trEnd = «

»

custName(0) = «Конрад»

custName(1) = «Кинг»

totalDue =234.25

v

With Response

.Write tableStart

.Write trStart

.Write tdLeft & «Имя» & tdEnd

.Write tdRight & custName(0) & tdEnd & trEnd

.Write trStart

.Write tdLeft & «Фамилия» & tdEnd

.Write tdRight & custName(1) & tdEnd & trEnd

.Write trStart

.Write tdLeft & «Итого» & tdEnd

.Write tdRight & totalDue & tdEnd & trEnd

.Write tableEnd

End With

%>

Самоучитель по креативному веб-дизайну. Книга 4, стр.42

выходного потока HTML браузеру.

Обычно лучше дождаться окончания всей обработки перед тем как отправ —

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

страницы или хотя бы сообщение о состоянии, дабы тем самым уведомить посе-»

тителя, что сценарий обрабатывает его запрос. В противном случае посети — тель может подумать, что страница (или, может быть, сервер) «недоступна», поскольку сервер не прислал запрошенную страницу. Если не указано обрат — ное, Web-сервер пересылает содержимое выходного буфера только после завер — шения всей работы обработчиком сценариев. У объекта Response есть одно

СВОЙСТВО (Response. Buffer) И Три метода (Response. Flush, Response. Clear И

Response. End), которые можно использовать для управления буферизацией вы — ходного потока HTML обработчиком сценариев.



ПРАКТИКУМ

Используйте свойство Response. Buffег для указания, должен ли Web-сервер бу — феризовать информацию, созданную ASP-страницей. Установка значения этого свойства равным True сообщает серверу, что всю выходную информацию нужно сохранять до тех пор, пока обработчик сценариев не обработает все сценарии,

или пока обработчик сценариев не вызовет либо метод Response. Flush, либо

метод Response. End (о нем пойдет речь чуть ниже). Если же свойство

Response. Buffer установить равным False, то сервер будет сам управлять пото —

Глава 11. Активные серверные страницы (ASP) * 56 5





ком выходных данных, отправляемых браузеру. Тогда он не будет ожидать, когда обработчик сценариев завершит обработку, а будет периодически проверять вы — ходной буфер и отправлять те данные, которые обработчик сценариев поместил

Самоучитель по креативному веб-дизайну. Книга 4, стр.43

,

а за НИМИ текст «Пожалуйста, подождите. Выполняется обработка запроса. ..». Но Web-сервер ничего не отправит браузеру, пока обработчик сценариев не завершит выполнение запроса во второй половине сценария. В результате посетитель

УВИДИТ Сообщение «Пожалуйста, подождите. Выполняется обработка запроса…» лишь тогда, когда он получит результаты запроса. Если на обработку запроса требуется 30 секунд, посетитель может покинуть страницу, поскольку после щел — чка на гиперссылке, который должен вызвать ASP-страницу с данными об объе — ме продаж, «ничего не произошло».

Чтобы Web-броузер Сразу же ОТПравИЛ Сообщение «Пожалуйста, подождите.

Выполняется обработк а запроса…» , нужн о установит ь СВОЙСТВО Respons e. Buffe r



равным False, как показано ниже:





CONST oConnection =

«DRIVER={MySQL};SERVER=NVBizNet;UID=root;PWD=;DATABASE=hwdtt»

DIM connObj, totalSales

Response. Buffer = false

Response. Write _

« HTML PUBLIC «»-//W3C//DTD HTML 4.0//EN»">»

Response. Write «Controlling the HTML Output Stream

»

Response. Write _

«Пожалуйста, подождите. Выполняется обработка запроса…»

Set connObj = server, createobject («adodb. connection»)

566 Глава 11. Активные серверные страницы (ASP)





connObj. ConnectionString = oConnection

connObj. Open

Set totalSales = connObj. execute I

(«SELECT SUM(InvoiceTotal) AS TotalSold FROM invoices»)

Response. Write «Общая сумма продаж: » & totalSales(«TotalSold»)







Обратите внимание, что значение свойства Response. Buffer можно изменять

лишь тогда, когда выходной буфер пуст. Поэтому оператор, устанавливающий

Значение Response. Buffer равным False (ИЛИ True) ДОЛЖеН наХОДИТЬСЯ В ASP —

странице перед любым статическим HTML-кодом (включая и дескрипторы

и ) и операторами, помещающими данные в выходной буфер.

В предыдущем примере обработчик сценариев опять помещает сообщение

«Пожалуйста, подождите. Выполняется обработка запроса… » В ВЫХОДНОЙ бу — фер. Но на этот раз Web-сервер посылает HTML-дескрипторы и текст этого со —

общения сразу же, как только сервер обнаруживает их в выходном потоке HTML. После того, как обработчик сценариев выполнит запрос и выдаст сумму всех

продаж и дескрипторы и (в данном случае — через 30 секунд),

сервер отправит данные для отображения браузеру (см. рис. 11.3).







Метод Response. Flush сообщает Web-серверу, что содержимое выходного бу- фера нужно немедленно послать браузеру; в это время обработчик сценариев бу- дет продолжать обработку сценария. Содержимое выходного потока можно сбро — сить клиенту (т. е. отправить его содержимое браузеру) в любой момент, когда вы

захотите показать частичные результаты или сообщения о состоянии, в процессе завершения обработки сценария. Вывод промежуточных результатов может успо — коить посетителя и удержать его от перехода, чтобы он дождался результатов

сложного запроса. Для использования метода Response. Flush необходимо про — сто вставить в ASP-сценарий следующую строку:







Пусть, например, ваш сценарий должен выполнить три запроса, каждый из которых выполняется 20 секунд. Чтобы за ту минуту, когда генерируется оконча —

тельный результат, посетитель не подумал, что система зависла, ему можно выда — вать промежуточные итоги с помощью кода наподобие следующего:

Глава 11. Активные серверные страницы (ASP) 56 7







CONST oConnectio n = _

11DRIVER= {MySQL } ; SERVER=NVBizNet; UID=root ; PWD=; DATABASE=hwdtt» DIM connObj

DIM officelSales, office2Sales, office3Sales

Response. Buffer = true

Response. Write

«PUBLIC «»-//W3C//DTD HTML 4.0//EN»">» ‘.

Response. Write «yправление выходным потоком HTML

»

Response. Write

«Пожалуйста, подождите. Выполняется обработка запроса…»

1

Response. Write «Выполнен запрос 1 из 3. Продажи по офису 1 = » & _

officelSales & «

»

Response. Flush

‘ «Эператоры подготовки и выполнения запроса 2>

Response. Write «Выполнен запрос 2 из 3. Продажи по офису 2 = » & _

office2Sales & «

»

Response. Flush »

‘ «Эператоры подготовки и выполнения запроса 3>

Response. Write «Выполнен запрос 3 из 3. Продажи по офису 3 = » & _

office3Sales & «

»

Response. Flush

Response. Write «Общая сумма продаж: » & _

(officelSales + office2Sales + office3Sales)

%>

Самоучитель по креативному веб-дизайну. Книга 4, стр.44

Метод Response. clea r стирает из выходного буфера всю информацию, кроме HTTP-заголовков ответа. Таким образом, если в вашей ASP-странице содержится статический HTML-код, и/или обработчик сценариев что-то вывел в выходной

поток HTML, можно вызвать метод Response. clear и начать заново с пустой

Web-страницы. Как и в случае метода Response. Flush, перед этим свойство

Response. Buffe r ДОЛЖНО быть установлено раВНЫМ True, Иначе ВЫЗОВ

Response. clea r вызовет ошибку времени выполнения.

Метод Response. clear можно использовать и после вывода промежуточных результатов, чтобы посетитель сайта увидел окончательный результат на страни — це, не содержащей сообщений о состоянии и промежуточных итогов. Например,

В Предыдуще м Пример е МОЖНО Заменит ь Два ПОСЛеДНИХ ВЫЗОВа Response. Writ e

на следующий код:

568 Глава 11. Активные серверные страницы (ASP)





Response. Clear

Response. Write «»

Response. Write «»

Response. Write «Суммы продаж: по офисам и Bcero»

Response. Write «Продажи по офису 1: » & officelSales & «

»

Response. Write «Продажи по офису 2: » & office2Sales & «

»

Response. Write «Продажи по офису 3: » & office3Sales & «

»

Response. Write «Общая сумма продаж: » &

(officelSales + office2Sales + office3Sales)



Если нужно прекратить выполнение сценария и отправить браузеру всю накопленную выходную информацию, можно воспользоваться методом

Response. End. После вызова Response. End обработчик сценариев больше не об- рабатывает операторы сценария и не посылает оставшийся статический HTML-код, который может встретиться далее в тексте ASP-страницы. Метод

Response. End можно задействовать для прекращения выполнения сценария, если обнаружится, что невозможно выполнить какую-либо часть сложной процедуры. Например, предположим, что недоступна база данных второго офиса, и поэтому не — возможно вычислить общую сумму продаж. После проверки кода ошибки, который вернет оператор открытия базы данных, выполнение сценария можно прекратить, вставив в него следующий код:



rf errorOnConnect

Response. Write «Запрос не выполнен! Данные по офису 2 недоступны.»

Response. Write «»

Response. End \

End If



Обратите внимание, что сценарий выводит дескрипторы и в

выходной поток HTML до вызова метода Response. End. Запомните, что вызов

Response. End прекращает дальнейшую обработку сценария. Более того, обработ — чик сценариев не будет копировать в выходной буфер оставшийся на ASP-стра —

нице статический HTML-код (наподобие дескрипторов и, сле —

дующих за сценарием).



Предотвращение вывода браузером устаревших

ASP-страниц

Возможно, вы заметили, что при первом заходе на какую-либо Web-страницу браузеру на ее получение и отображение требуется больше времени, чем при

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

который находится на (локальном) жестком диске. Например, на Windows-маши —

не Internet Explorer кэширует посещаемые вами Web-страницы — вместе с рисун — ками, звуком и другими мультимедийными файлами, используемыми на них —

На жесТКОМ ДИСКе В папке C:\Windows\Temporary Interne t Files. ЕСЛИ рабо —

тать только со статическими страницами, то кэширование и выборка Web-стра —

Глава 11. Активные серверные страницы (ASP) 56 9





ниц с локальногоч жесткого диска (или с жесткого диска proxy-сервера, если дос —

туп в Internet осуществляется через него) не вызывает проблем. Однако ASP — страницы динамичны по самой своей природе. К сожалению, с точки зрения браузера Web-страница, сгенерированная обработчиком сценариев, представляет

собой обычный статический Web-документ с расширением .asp. Поскольку. asp

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

Самоучитель по креативному веб-дизайну. Книга 4, стр.45

Свойства Response. Expires И Response. ExpiresAbsolute ПОЗВОЛЯЮТ запре — тить браузеру отображать устаревшее содержимое, устанавливая для кэшируемых файлов дату и/или время окончания их годности. До истечения этого срока бра — узер не запрашивает Web-страницу с сервера, а отображает ее из кэша. Но после

истечения срока годности копии браузер при посещении этой страницы должен

выгрузить из Web-сервера ее «свежую» копию.



ПРАКТИКУМ

Пусть, например, существует ASP-страница, содержимое которой меняется раз в месяц/Если вы вносите изменения 1 января 2003 года, необходимо вставить в сце- нарий, генерирующий содержимое ASP-страницы, следующий оператор:







Установив в сценарии дату (и время) окончания годности страницы на тот момент, когда встроенные в страницу сценарии изменят ее содержимое, можно предотвратить получение посетителем устаревшей кэшированной информации.

СиНТаКСИС Оператора установки СВОЙСТВа Response. ExpiresAbsolut e ВЫГЛЯ — ДИТ так:

Response. ExpiresAbsolute = # конца> []#



Таким образом, в предыдущем примере срок действия всех кэшированных ко — пий ASP-страницы, измененных 01/01/2003, заканчивается в полночь 31/01/

2003 . (ЕСЛИ При установк е СВОЙСТВа Response. ExpiresAbsolut e ОПуСТИТЬ Время,

то оно считается полночью даты окончания срока годности.) Если нужно, чтобы

кэшированная страница была годна до 15:15 01/02/2003, потребуется написать





Установка конкретной даты и/или времени окончания годности требует руч —

ного редактирования сценария (для изменения срока годности) в начале каждого нового периода. Поэтому, видимо, более удобно задавать срок годности кэширо —

ванной страницы в виде количества минут, а не конкретной даты (и времени). Пусть, например, есть ASP-страница, показывающая курс акций, и ваш Web-сер — вер получает новые котировки каждые 15 минут. Чтобы кэшированное содержи —

мое было актуальным, Можно с помощью метода Response. Expires задать коли — чество минут до истечения срока годности страницы, используя следующий синтаксис:

Response. Expires =

57 0 Глава 11. Активные серверные страницы (ASP)





Таким образом, чтобы браузер запрашивал ASP-страницу с Web-сервера, если кэшированные данные загружены более 15 минут назад, нужно в сценарий, гене — рирующий содержимое ASP-страницы, добавить следующий оператор:







И, наконец, чтобы Web-браузеры не отображали устаревшие страницы, необ — ходимо еще помнить о тех proxy-серверах, которые не поддерживают дату (и вре- мя) конца срока годности. Если посетитель входит в Internet через proxy-сервер,

то proxy-сервер (как и Web-браузер) сохраняет в кэше на своем локальном жест — ком диске копии полученных Web-страниц. Когда браузер запрашивает страницу, уже находящуюся в кэше proxy-сервера, тот не выбирает заново эту страницу с сервера, а посылает браузеру страницу из кэша. Таким образом, после истечения срока годности страницы в кэше браузера он отправляет запрос Web-серверу на получение новой страницы. Но если proxy-сервер игнорирует срок годности кэ — шированной страницы, то он пошлет браузеру страницу с устаревшим содержи — мым из своего кэша.

Самоучитель по креативному веб-дизайну. Книга 4, стр.46

Чтобы исключить получение устаревших ASP-страниц от proxy-сервера, следу —

ет установить СВОЙСТВО Response. CashControl равным «Private» . ЕСЛИ оставить

значение свойства Response. CashControl установленным по умолчанию, то есть

«Public», proxy-сервер сохранит страницу в папке кэша на своем жестком диске.

Но еСЛИ установить Значение СВОЙСТВа Response. CashControl раВНЫМ «Private»,

то он не будет так поступать. Значит, для обеспечения выборки Web-страницы с

Web-сервера при каждом обращении к ней нужно до или после оператора уста — новки даты и/или времени годности страницы вставить следующий оператор:







Перенаправление Web-браузера на другую страницу

Когда пользователи работают в Internet, они часто ставят закладки (т. е. добав — ляют их в список избранных сайтов) на страницы, к которым они хотят еще воз — вращаться. И хотя повторный вход по URL-адресу обычно не вызывает проблем, иногда нужно запретить посетителям входить напрямую в некоторые страницы

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

Метод Response. Redirect дает, возможность перенаправить посетителя сайта с запрошенной Web-страницы на другую.



ПРАКТИКУМ

Кроме перенаправления посетителя на другую страницу для того, чтобы он ввел пароль, этим приемом можно пользоваться и для распределения нагрузки между несколькими Web-серверами или если ваш сайт сменил адрес. Предположим, на —

Самоучитель по креативному веб-дизайну. Книга 4, стр.47

пример, ЧТО у вас работают Два* сервера: NVBizNet. com И NVBizNet. com, И ВЫ ХО —

Глава 11. Активные серверные страницы (ASP) 57 1





тите равномерно распределить нагрузку между ними для увеличения общей про — изводительности. Поэтому вы переместили часть сайтов с сервера NVBizNet. com

на NVBizNet. com. Но посетители могли ранее установить закладки на домашние страницы сайтов на первоначальном сервере (NVBizNet. com). Для перенаправле- ния посетителей, которые пытаются на сервере NVBizNet. com найти сайты, кото —

рые находятся уже на Nv^izNet. com, нужно в начале ASP-страниц, расположен — ных на NVBizNet. com, вставить следующий код:





При ВЫПОЛНеНИИ ИНТерпретаТОрОМ Сценариев Метода Response. Redirect ОН

действует немедленно. Обработчик сценариев больше не обрабатывает никаких операторов на текущей ASP-странице. Вместо этого сервер посылает браузеру со — общение с указанием запросить другую Web-страницу. Значит, в нашем примере браузер сначала посылает сообщение на NVBizNet. com с запросом некоторой ASP-страницы. Но вместо того, чтобы послать браузеру страницу (находящуюся

теперь на другом сервере), сервер NVBizNet. com посылает сообщение о перенап —

равлении, согласно которому браузер должен запросить файл default. as p с сер- вера NVBizNet. com. После чего браузер запрашивает и отображает домашнюю

страницу default. as p уже с нового сервера.

Кроме отсылки посетителя на сайт, находящийся на другом Web-сервере, или

на другой сайт на том же сервере, метод Response. Redirect можно использо —

вать и для отсылки посетителя с одной страницы на другую в пределах одного и

того же сайта. Если новая страница, которую должен получить браузер, нахо — дится на том же сайте, то из URL-адреса, указываемого в методе

Response. Redirect, потребуется убрать «http:// » и доменное имя сервера, тог —

да адрес новой страницы получится относительным. Пусть, например, вы хотите запретить посетителям сразу заходить на ASP-страницы, предназначенные толь —

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



DIM referer, wwwReferer

wwwReferer = Left(Request. ServerVariables(«HTTP_REFERER»), 30)

referer = Left(Request. ServerVariables(«HTTP_REFERER»), 26)

If ucase(wwwReferer) <> «HTTP://WWW. NVBIZNET. COM/HWDTT/» And _

ucase(referer) <> «HTTP://NVBIZNET. COM/HWDTT» Then

Response. Redirect «/loginScreen. asp» End If

%>

Если посетитель вводит URL-адрес Web-страницы в адресной строке брау —

зера или выбирает страницу из списка «Избранное» (или закладок), то «HTTP_REFERER» в посылаемом браузером HTTP-запросе содержит пустое зна — чение. Если же посетитель щелкнул на гиперссылке, браузер посылает серверу

HTTP-запрос, в котором значение «HTTP_REFERERM равно URL-адресу Web —

странйцы, содержащей эту гиперссылку. Таким образом, если в предыдущем примере посетитель обращается к Web-странице после ввода пароля (в форме

57 2 Глава 11. Активные серверные страницы (ASP)





авторизации) или в результате щелчка на гиперссылке на любой другой

странице, находящейся в папке /hwdtt сервера NVBizNet. com, то вызов мето —

да Request. ServerVariables вернет СТрОКу, начинающуюся С http:/ /

www. NVBizNet. com/hwdtt/ ИЛИ http://NVBizNet. com/hwdtt/:



Request. ServerVariables(«HTTP_REFERER»)



Этот оператор возвращает значение MHTTP_REFERER», которое браузер вставля —

ет в HTTP-запрос, отправляемый Web-серверу.

Чтобы использовать приведенный выше сценарий на своих Web-страницах,

подставьте в оператор i f адрес и путь к папке, содержащей информацию для за- регистрированных пользователей. Кроме того, в предпоследней строке сценария

URL-адрес, передаваемый методу Response. Redirect, необходимо заменить

URL-адресом страницы авторизации вашего сайта.

ПОСКОЛЬКУ метод Response. Redirec t ДЛЯ указания, ЧТО браузер ДОЛЖен Обра — титься к другой Web-странице, использует заголовок HTTP-сообщения, то этот метод может быть вызван сценарием только если выходной буфер HTML пуст (или содержит лишь HTTP-заголовок). Если требуется перенаправить браузер на

Самоучитель по креативному веб-дизайну. Книга 4, стр.48

другую страницу после того, как сценарий уже сгенерировал часть HTML-кода

страницы, нужно сначала очистить выходной буфер с помощью метода

Response. Clear. Затем МОЖНО ВЫЗВаТЬ меТОД Response. Redirect, перенаправля —

ющий браузер на другую страницу.



Хранение значений переменных между

HTTP-запросами в cookie-наборах

Как уже упоминалось ранее, отношение клиент-сервер между Web-браузером

и Web-клиентом «не имеет состояния». Сервер не сохраняет информацию о кли — енте в промежутках между его запросами. Обычно сервер ждет, когда (любой)

браузер отправит ему HTTP-запрос. После получения запроса сервер отвечает на него, ничего не помня о предыдущих соединениях (если они были) с браузером,

приславшим запрос. Но если ваш сайт предназначен только для зарегистриро — ванных пользователей или для онлайновой торговли, то нужно как-то отслеживать посетителя, когда он переходит со страницы на страницу. В противном случае посе — титель должен будет постоянно регистрироваться, поскольку запрос на Web-страни —

цу не дает возможности серверу узнать, зарегистрирован ли уже посетитель.

Cookie-набор — это небольшой текст, который браузер по просьбе сервера за — писывает в cookie-файле Web-сайта на компьютере пользователя. Многие пользо — ватели считают это посягательством на права личности и отключают в браузере возможность сохранять cookie-наборы или, по крайней мере, заставляют браузер запрашивать разрешение перед их записью. Однако cookie-набор может содер- жать лишь данные, добровольно предоставленные пользователем, или общую ин — формацию о его соединении (взятую из HTTP-заголовка запроса Web-страницы). Более того, браузер посылает серверу лишь те cookie-наборы, которые сервер ранее послал браузеру для записи. Так что если вы посетите сайты

www. NVBizNet. com и www. yahoo. com, ваш браузер не пошлет серверу сайта

Глава 11. Активные серверные страницы (ASP) 57 3





Yahoo. com информацию, сохраненную браузером при посещении сайта

NVBizNet. com, И наоборот.



ПРАКТИКУМ



Используйт е для установк и значени й cookie-переменны х коллекци ю

Response. Cookies, а ДЛЯ ИХ выборки — КОЛЛекцИЮ Request. Cookies. Напри — мер, чтобы создать cookie-набор на один сеанс — т. е. cookie-набор, который хра — нится в системе пользователя лишь до тех пор, пока он не выйдет из Web-брау — зера — ваш сценарий должен задать только имя cookie-переменной и ее

Самоучитель по креативному веб-дизайну. Книга 4, стр.49

значение, используя следующий синтаксис:



Response. Cookies («») =

«»



Таким образом, чтобы установить значения односеансовых cookie-переменных

firstName И lastName соответственно В «Конрад» И «Кинг», В ASP-СЦенариЙ ПО —

требуется поместить следующий код:





Response. Cookies(«firstName») = «Конрад»

Response. Cookies(«lastName») = «Кинг»

%>



Если cookie-значение требуется сделать постоянным (т. е. чтобы оно остава — лось и после завершения сеанса), нужно присвоить его свойству Expire s либо конкретную дату, либо промежуток времени. После окончания срока действия

cookie-переменной браузер при HTTP-запросе серверу больше не будет посылать пару имя/значение cookie-переменной. Например, чтобы установить срок годно — сти cookie-переменной userName до 5 декабря 2003 года, используйте следую — щий оператор:







Аналогично для установки срока годности переменной userName в 30 дней, начиная с сегодняшнего», можно использовать встроенную функцию Date() язы —

ка VBScript:



Response .Cookies («userName») .Expires = Date + 30 %>



Предположим, например, что ваш сайт содержит форму регистрации посети —

теля наподобие приведенной на рис. 11.4, в которой текстовые элементы называ —

ются firstName, lastName, streetAddressl, streetAddress2 , city, state,

zipCode И eMailAddress.

Вы можете сохранить до даты, заданной в параметре expDate, имя посетите — ля, его почтовый адрес и адрес электронной почты, воспользовавшись в сцена — рии регистрации на своем сайте вызовом следующей подпрограммы:



1 Подпрограмма «StoreCookie» сохраняет значение cookie-переменной

Sub StoreCookie(cookieName, cookieValue, expDate)

Response. Cookies(cookieName) = cookieValue

Response. Cookies(cookieName).Expires = expDate endsub





574 Глава 11. Активные серверные страницы (ASP)





Если посетитель до истечения срока годности cookie-переменных посещает

сайт еще раз, то с помощью метода Request. cookies можно загрузить значения

cookie-переменных в поля ввода регистрационной формы, как показано ниже:




method=»POSTM>



With Response

.Write «Имя:
Msize=’4O’ value=’ » & request. Cookies(«firstName») & «‘Xbr>»

.Write «Фамилия:
«size=’40f value=’ » & request. Cookies («lastName») & M ‘Xbr>»

.Write «Адрес 1:
. «name=’streetAddressl’ size=!40′ value= ‘ » & _ , •

request. Cookies(«streetAddressl») &»f Xbr>»

Глава 11. Активные серверные страницы (ASP) 575





.Write «Адрес 2:
«name=’streetAddress2′ size=’4O’ value=’» &

request. Cookies(TlstreetAddress2′T) &» ‘Xbr>»

.Write «Город:
«size=’4O’ value=’» & request .Cookies («city») &»‘Xbr>»

.Write «Штат:
«size=’4′ value=’ » & request. Cookies («state») &_

«‘> M

.Write «Почтовый код:
«size=’10′ value=’ » & request. Cookies («zipCode») &»‘Xbr>»

.Write «Адрес E-Mail:
Mname=’eMailAddress’ size=’4O’ value=’» &_

request. Cookies(«eMailAddress») & » ‘XbrXbr>»

End With

%>

 



*

Чтобы уничтожить cookie-переменную, достаточно присвоить ей пустую стро —

ку или установить ее свойство Expires равным какой-нибудь дате (или времени)

в прошлом. Например, любой из нижеследующих операторов уничтожает cookie — переменную с именем userName из cookie-файла Web-сайта:









Получение данных из формы с помощью коллекции Form

Получение данных, введенных в элементы HTML-формы, позволяет ASP-сце — нариям настраивать содержимое страницы в соответствие с требованиями и по- желаниями посетителей сайта. Конечно, сценарии на стороне сервера и без вве — денной пользователем информации могут вставлять динамическую информацию

Самоучитель по креативному веб-дизайну. Книга 4, стр.50

вроде текущих даты и времени, котировок акций, информации о погоде и т. д. Но текущее время и температура в Киеве вряд ли интересует жителя Бердичева. Аналогично, текущий курс акций фирм Microsoft и General Motors мало чем пригодится владельцам акций других компаний и вообще не интересен держате — лю облигаций. Чтобы быть полезными, сценарии на стороне сервера, генерирую — щие содержимое страницы, должны сначала выяснить, о чем бы хотел узнать по — сетитель, а потом предоставить ему запрошенную информацию. К счастью, Web-сервер может предоставить вашему сценарию данные, введенные в HTML — форму, в виде коллекции пар имя/значение в ASP-объекте Request.

После того как посетитель заполнит текстовые элементы формы, выберет зна — чения переключателей и списков выбора и щелкнет на кнопке отправки формы, браузер посылает данные, принятые из формы, серверу. Атрибуты action и method дескриптора

сообщают Web-серверу, куда отправить данные и как

они «упакованы» браузером. Если в атрибуте action дескриптора
указан URL-адрес ASP-страницы, то сервер передает страницу, заданную этим атрибу — том, обработчику ASP-сценариев. В зависимости от значения атрибута method

57 6 Глава 11. Активные серверные страницы (ASP)





(GET или POST), сервер заносит данные, принятые из формы, либо в коллек —

цию QueryString, либо В КОЛЛекЦИЮ Form объекта Request.

Если атрибут method дескриптора
равен GET, браузер добавляет дан — ные, принятые из формы, в конец URL-адреса, а сервер помещает их в коллек —

цию Request. QueryString. АнаЛОГИЧНО, еСЛИ method равен POST, браузер ПОСЫ — лает данные, принятые из формы, в теле HTTP-сообщения, а сервер передает их Сценарию В КОЛЛекЦИИ Request. Form.

Предположим, например, что ваша страница содержит следующее определе —

ние формы:


method=»POST»>

Имя: input type=»text» name=»firstName» size=»20″>



Фамилия:




E-mail: input type=»text» name=»eMailAddr» size=»30″>







После щелчка пользователя на кнопке «Отправить» браузер с помощью метода

POST посылает данные, принятые из формы, Web-серверу. После этого сервер выбирает из HTTP-сообщения, посланного браузером, данные, принятые из фор — мы, в виде пар имя/значение и заносит их в коллекцию ASP-страницы

Request. Form.



ПРАКТИКУМ

Коллекция ASP-страницы — это массив значений, которые сценарий может вы — бирать по числовому индексу или по ключевому слову. Удобно, что сценарий

для доступа к значению элемента коллекции Request. Form может в качестве ключевого слова использовать имя элемента формы. Поэтому для доступа к дан — ным, принятым из формы, которая определена в предыдущем примере, можно воспользоваться следующим сценарием:



Полезные ссылки
Случайные записи
  • 19.06.2012">Google: правительство США на 103% увеличило запросы на удаление контента
  • 09.05.2010">Самоучитель по креативному веб-дизайну. Книга 1, стр.137
  • 19.03.2011">Руководство по actionscript. часть 2, стр. 097
  • 06.04.2010">Инструменты и сервисы для оптимизации графики
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.106
  • 07.09.2012">В Facebook запущена компания по переименованию города Хатчинсон в Смолвиль, родину Супермена
  • 18.03.2011">Руководство по actionscript. часть 2, стр. 126
  • 17.03.2011">Руководство по actionscript. часть 2, стр. 149
  • 15.03.2011">Руководство по actionscript. часть 3, стр. 038
  • 08.03.2011">Руководство по actionscript. часть 4, стр. 093
  • 02.06.2010">Самоучитель по креативному веб-дизайну. Книга 3, стр.118
  • 03.02.2010">Создание графиков и диаграмм на JavaScript
  • 01.03.2011">Руководство по actionscript. часть 5, стр. 133
  • 03.03.2011">Руководство по actionscript. часть 5, стр. 073
  • 17.05.2010">Самоучитель по креативному веб-дизайну. Книга 2, стр.120
Опрос

Какие цвета вы предпочитаете?

View Results

Loading ... Loading ...