| Active Server Pages |
ВведениеПри создании web-страниц можно использовать VBScript. Но у него есть некоторые недостатки. Во-первых, VBScript поддерживает не все браузеры. Во-вторых, VBScript совершенно не умеет работать с файлами и базами данных, что существенно ограничивает его сферу применения.Технология Active Server Pages была разработана Microsoft сравнительно недавно. Она поддерживает как синтаксис JScript, так и VBScript, причём по умолчанию используется VBScript. Принцип технологии простой: скрипт исполняется на сервере, а пользователю передаётся готовый HTML-файл. Для работы с ASP требуется сервер на основе Internet Information Server для Windows NT/2k/XP или Personal Web Server для Windows 95/98/ME. Эти продукты можно совершенно бесплатно скачать с сайта Microsoft. Весит оно около 30 мегабайт. В комплекте с сервером поставляется огромная справочная система и примеры. Как правило, скрипты хранятся в файлах .asp, хотя могут храниться и в файлах с другими расширениями. Как правило, главной страницей сайта делается default.asp. Весь код, который должен исполняться на стороне сервера заключается между <% и %>. В самом начале файла указывается, какой синтаксис будет использоваться. Для того, чтобы указать, что будет использоваться VBScript нужно вставить такую строку: <%@Language=VBScript%> Объектная структураВ ASP имеются несколько встроенных объектов. Ниже перечислены эти объекты, их свойства и методы.
Вывод данныхСгенерированный HTML код передаётся пользователю через объект Response. Для вывода используется метод Write.Response.Write "<font size=7 color=red>Test</font>" Если внутри выводимой строки нужно использовать кавычку ["], то она удваивается. Response.Write "Вот это "" кавычка" Microsoft предусмотрела сокращённую форму записи: ="<font size=7 color=red>Test</font>" Кроме метода Write у объекта Response есть другие свойства и методы. Свойство Buffer устанавливает, как будут передаваться данные: клиент будет получать их по мере поступления в объект Response или же получит сразу весь код после окончания работы скрипта. Метод Redirect перенаправляет браузер на другую страницу. В качестве параметра передаётся url, на который нужно перейти. Этот метод работает, только если на момент его вызова объект Response пуст! Ввод данныхASP-приложение имеет возможность принимать данные, передаваемые ему из других страниц или через url. Передаваемые странице переменные помещаются в объект Request. Параметры могут передаваться через url, например:Mypage.asp?id=25&name=vbnet Странице mypage.asp передаются переменные id и name. Они указываются после имени файла и знака вопроса [?]. Параметры разделяются между собой знаком амперсанда [&]. Для того, чтобы получить значения передаваемых переменных используется свойство QueryString объекта Request. Dim id, name id = Request.QueryString ("id") name = Request.QueryString ("name") Response.Write "ID=" & id & ", а Name=" & name Заметьте, что в VBScript не нужно при объявлении указывать тип переменных, поскольку существует только один типа данных - Variant. Так как свойство QueryString является свойством по умолчанию объекта Request, можно использовать более короткую форму записи: Dim id, name id = Request ("id") name = Request ("name") Response.Write "ID=" & id & ", а Name=" & name Для передачи данных ASP приложению можно также пользоваться HTML формами. Возможны 2 метода передачи данных из форм: Get и Post. При использовании метода Get, значения переменных передаются через url. При использовании метода Post этого не происходит. <form action="mypage.asp" method="post"> <input type=hidden name="id" value="25"> <input type=text name=name value="Введите имя"> <input type=submit value="Отправить" </form> ASP скрипту, которому передаются данные абсолютно без разницы, какой метод передачи вы используете. Так что лучше, когда вы передаёте данные из HTML формы, используйте метод Post. Переменные уровня сессии и приложенияЧасто бывает необходимо, чтобы хранимые в приложении переменные были доступны в течение всей сессии. Для этого можно использовать так называемые cookies, но у клиента может быть отключена поддержка cookies и в этом случае ваша затея потерпит неудачу.В ASP существует объект Session. Сессия начинается при первом обращении пользователя к страницам приложения и заканчивается при отсутствии активности пользователя в течении времени, установленного в настройках сервера. В объекте Session можно хранить переменные, которые будут доступны всем страницам вашего приложения на время сессии. Запись данных производится просто: Session ("email") = " Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript " А считываются данные ещё проще: Dim email email = Session ("email") Response.Write email Объект Application существует в единственном экземпляре и используется для хранения данных на уровне всего приложения. Application ("url") = "http://vbnet.ru" Dim url url = Application ("url") Response.Write "Это <a href=" & url & ">" & url & "</a>" Работа с базами данныхРабота с базами данных на ASP осуществляется с помощью технологий ADO и ODBC. Для соединения с базой данных нужно обязательно указывать источник данных. Источник данных - информация о базе данных, главным образом о её типе и местонахождении.ADO (ActiveX Data Objects) - библиотека, содержащая объекты, с помощью которых можно работать с БД. Чаще всего используются объекты Connection и Recordset. Экземпляры объектов создаются с помощью метода CreateObject объекта Server. Сначала нужно создать соединение (объект Connection), открыть его с помощью метода Open, затем создаём рекордсет (объект Recordset) и открываем его методом Open. Например: <% Dim curdir, Conn, RS, sSQL 'объявляем переменные curdir = Server.MapPath ("authors.mdb") 'Получаем полный путь к базе данных authors.mdb, лежащей в папке с этим скриптом Set Conn = Server.CreateObject ("ADODB.Connection") 'создаём соединение Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & curdir 'открываем соединение Set RS = Server.CreateObject ("ADODB.Recordset") 'создаём рекордсет sSQL = "Select * From Authors Order By name;" 'формируем SQL запрос RS.Open sSQL, Conn 'открываем рекордсет If RS.BOF = False Or RS.EOF = False Then 'если в рекордсете есть записи, то RS.MoveFirst 'перемещаемся к первой записи %> <!--Рисуем таблицу--> <Table border=1 width=100%> <tr> <td>ID</td> <td>Имя</td> <td>E-mail</td> <td>URL</td> </tr> <% Do While Not RS.EOF 'перебираем все записи 'Выводим в таблицу информацию %> <tr> <td><%=RS.Fields ("ID")%></td> <td><%=RS.Fields ("name")%></td> <td><%=RS.Fields ("email")%></td> <td><%=RS.Fields ("url")%></td> </tr> <% Loop %> </table> <% RS.Close 'Закрываем рекордсет Conn.Close 'Закрываем соединение Set RS = Nothing 'Уничтожаем объект RS Set Conn = Nothing 'Уничтожаем объект Conn %> Рекордсет следует использовать только если нужно получить данные из БД. Если же нужно только выполнить SQL команду действия, то рекордсет не нужен. Для выполнения SQL запроса действия используется метод Execute объекта Connection. <% Dim sSQL, Conn, ID, curdir curdir = Server.MapPath ("authors.mdb") 'Получаем путь к базе Set Conn = Server.CreateObject ("ADODB.Connection") 'создаём соединение Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & curdir 'открываем соединение ID = Request ("id") 'Получаем значение переменной id sSQL = "Update articles Set hits=hits+1 Where id=" & ID 'SQL запрос, который увеличивает значение поля hits на 1 у записи, поле id которой равно переменной id объекта Request Conn.Execute sSQL 'Выполняем запрос Conn.Close 'закрываем соединение Set Conn = Nothing 'уничтожаем соединение %> Включение файловВы можете включать в ASP страницу код из других файлов. Для этого используется команда #include. Рассмотрим её работу на примере включения меню сайта, расположенного в файле menu.inc в ASP страницу.menu.inc: <a href=articles.asp>Статьи</a><BR> <a href=samples.asp>Примеры</a><BR> <a href=about.asp>Об авторе</a><BR> Теперь в ASP странице там, где нужно поместить меню, вставляем эту строку: <!--#include file=menu.inc--> Плюсы использования этой возможности ASP очевидны. В примере, расположенном выше, для изменения меню сайта не нужно править все ASP страницы, а нужно исправить только один файл menu.inc. Все команды include обрабатываются сервером до выполнения кода. Например, следующий скрипт не сможет открыть файл Header1.inc, так как в ASP попытка выполнить команду #include будет предпринята раньше, чем имя файла будет назначено переменной name. <!-- Этот скрипт не будет выполнен --> <% name=(header1 & ".inc") %> <!-- #include file="<%= name %>" --> Возможно использование вложенных include файлов. Например в файле menu.inc имеется команда включения файла copyright.inc. Недопустимы так называемые "перекрёстные" include файлы. Например в файле menu.inc имеется команда включения файла include.inc, а в include.inc расположена команда включения menu.inc. Такие включения не будут обработаны сервером и будет сгенерирована ошибка. Команды и процедуры скриптов полностью должны быть заключены в ограничители сценариев <% и %>, теги HTML <SCRIPT> и </SCRIPT> или теги HTML <OBJECT> и </OBJECT>. То есть, нельзя открыть ограничитель скрипта во включающем файле .asp и закрыть его во включаемом файле; скрипт или команда скрипта должны присутствовать в виде отдельных законченных модулей. Например, следующий скрипт не будет работать: <!-- Этот скрипт не будет выполнен --> <% For i = 1 To n инструкции основного файла <!-- #include file="header1.inc" --> Next %> Следующий скрипт будет работать: <% For i = 1 to n инструкции основного файла %> <!-- #include file="header1.inc" --> <% Next %> Обработка событий приложенияВ ASP имеется четыре события, которые может обрабатывать разработчик. Это старт/стоп сессии и старт/стоп приложения. Обработчики этих событий размещаются в файле global.asa в корневом каталоге приложения. Макет этого файла:<Script language=VBScript Runat=Server> Sub Application_OnStart 'код при старте приложения End Sub Sub Application_OnEnd 'код при остановке приложения End Sub Sub Session_OnStart 'код при старте сессии End Sub Sub Session_OnEnd 'код при окончании сессии End Sub </Script> HTTP переменныеИспользуя объект Request можно получить некоторые переменные, полученные от браузера. Ниже перечислены некоторые из них:
Значения HTTP заголовков получаются так же, как и другие переменные, хранящиеся в объекте Request. Dim IP IP = Request ("REMOTE_ADDR") Response.Write IP Так как все HTTP заголовки входят в коллекцию ServerVariables, можно использовать для получения их значений цикл For Each ... Next. <% Dim name %> <TABLE> <TR> <TD><B>Переменные сервера</B></TD> <TD><B>Value</B></TD> </TR> <% For Each name In Request.ServerVariables %> <TR> <TD> <%= name %> </TD> <TD> <%= Request.ServerVariables(name) %> </TD> </TR> <% Next %> </TABLE> Работа с почтойРано или поздно у разработчика ASP-приложения появляется необходимость работы с электронной почтой. Например, нужно отправить пользователю забытый пароль или направить автору вопроса на форуме ответ на него и т.д. Для этого можно воспользоваться стандартной библиотекой CDO (Collaboration Data Objects). Эта библиотека имеет очень разветвлённую объектную структуру. В этой статье мы рассмотрим только отправку сообщений с помощью CDO. Для этого используется объект Message. Мы воспользуемся такими свойствами, как From, To, Subject, BodyPar, Body, HTMLBody и одним методом Send.Сначала, как всегда, создаём ссылку на объект. Dim mailMessage, sBody Set mailMessage = Server.CreateObject ("CDO.Message") Затем заполняем поля сообщения, текст сообщения и указываем его кодировку. mailMessage.From = " Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript @ mailMessage.To = " Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript " mailMessage.BodyPart.Charset = "koi8-r" mailMessage.Subject = "Тема собщения" sBody = "Уважаемый Василий Пупкин!" & vbCrLf & "Вы приглашены на открытие раздела сайта VBNet.ru Справочник Visual Basic" & vbCrLf & "С наилучшими пожеланиями, Администрация VBNet.ru" mailMessage.Body = sBody Если Вы хотите отправить сообщение не в текстовом, а HTML формате, то нужно использовать свойство htmlBody вместо Body: sBody = "Уважаемый Василий Пупкин!<BR>Вы приглашены на открытие раздела сайта VBNet.ru Справочник Visual Basic<BR>С наилучшими пожеланиями, Администрация VBNet.ru" mailMessage.htmlBodyBody = sBody Теперь отправляем сообщение, используя метод Send. mailMessage.Send После того, как письмо отправлено, уничтожаем объект mailMessage для освобождения памяти. Set mailMessage = Nothing ЗаключениеВ этой статье были рассмотрены основные инструменты технологии Active Server Pages.Павел Сурменок Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript vbnet.ru |