|
Работа с языками сценариев
|
Языки программирования, например Visual Basic, C++ и Java, обеспечивают доступ на нижнем уровне к ресурсам компьютера. Они используются для создания больших и сложных программных комплексов. Языки написания сценариев, в свою очередь, используются для создания программ ограниченных возможностей, называемых сценариями, которые выполняют функции веб-узла на веб-сервере или в обозревателе. В отличие от сложных языков программирования, языки написания сценариев интерпретируются: инструкции последовательно выполняются промежуточной программой, называемой интерпретатором команд. Хотя интерпретация уменьшает эффективность выполнения, языки написания сценариев просты для изучения и обеспечивают большие возможности. Сценарии могут быть встроены в HTML-страницы для форматирования содержимого или могут реализовывать компоненты COM, заключающие в себе бизнес-логику.
Active Server Pages предоставляют веб-разработчикам возможность написания сценариев, выполняемых на сервере, на различных языках сценариев. Фактически, внутри одного файла .asp могут быть использованы несколько языков написания сценариев. Кроме того, поскольку сценарии выполняются на сервере, обозреватель, запрашивающий файл .asp, может не иметь средства поддержки сценариев.
Можно использовать любой язык написания сценариев, соответствующий обработчик сценариев для которого установлен на веб-сервере. Обработчик сценариев — это программа, которая обрабатывает команды, записанные на определенном языке. В комплект поставки ASP входит два обработчика сценариев: Microsoft Visual Basic Scripting Edition (VBScript) и Microsoft JScript (JScript). Можно установить и использовать обработчики для других языков написания сценариев, например REXX, PERL и Python.
Те, кто знаком с программированием на Visual Basic, могут сразу же начать использовать VBScript, который является подмножеством Visual Basic. Программисты, знающие Java, C или C++, обнаружат, что синтаксис JScript знаком им, хотя JScript непосредственно не связан с Java или C.
Те, кто знаком с другими языками написания сценариев, например REXX, Perl или Python, могут получить и установить соответствующий обработчик сценариев, чтобы использовать уже известный язык. Active Server Pages представляет собой сервер сценариев COM; чтобы использовать язык, необходимо установить обработчик сценариев, который следует стандартам написания сценариев COM и находится на веб-сервере в качестве объекта COM (Component Object Model — компонентная модель объектов).
Задание основного языка сценариев
Основной язык сценариев ASP представляет собой языке, используемый для обработки команд между ограничителями <% и %>. По умолчанию основным языком сценариев является VBScript. В качестве основного языка сценариев можно использовать любой язык написания сценариев, для которого имеется обработчик сценариев. Основной язык сценариев может быть установлен для отдельных страниц или для всех страниц ASP-приложения.
Чтобы установить основной язык сценариев для всех страниц приложения, установите свойство Язык ASP по умолчанию на вкладке Параметры приложений в оснастке IIS. Дополнительные сведения см. в разделе Настройка приложений ASP.
Чтобы установить основной язык сценариев для одной страницы, добавьте директиву <%@ LANGUAGE %> в начало файла .asp. Синтаксис директивы:
<%@ LANGUAGE=ЯзыкСценария %>
где ЯзыкСценария — основной язык сценария, который должен быть установлен для определенной страницы. Настройка для определенной страницы перекрывает общие настройки для всех страниц приложения.
Следуйте рекомендациям по использованию директив ASP; дополнительные сведения см. в разделе Создание страницы ASP.
Примечание. Чтобы использовать в качестве основного язык, который не поддерживает синтаксис Объект.Метод, необходимо сначала создать раздел реестра LanguageEngines. Дополнительные сведения см. в разделеОбщие сведения о системном реестре.
При использовании VBScript на сервере с ASP, две возможности VBScript запрещены. Поскольку сценарии, написанные для Active Server Pages исполняются на сервере, не поддерживаются операторы VBScript, в которых присутствуют элементы интерфейса пользователя InputBox и MsgBox. Кроме того, в сценариях на стороне сервера нельзя использовать функции VBScript CreateObject и GetObject. Вместо этого используйте Server.CreateObject, чтобы ASP мог отследить экземпляр объекта. Объекты, созданные с помощью CreateObject или GetObject, не могут обращаться к встроенным объектам ASP и не могут участвовать в тракзакциях. Исключениями из этого правила является использование объектов IIS Admin и использование Java monikers. Дополнительные сведения см. в разделах Использование объектов IIS Admin и Создание объекта на основе класса Java.
Списки и описания всех операторов, функций, команд, объектов, свойств и методов VBScript и JScript приведены в справочниках по соответствующим языкам. Эти ссылки могут быть найдены на веб-узле Microsoft Windows Script Technologies, расположенном по адресу http://msdn.microsoft.com/scripting/.
Поскольку обработка всех сценариев в ASP производится на сервере, нет необходимости включать теги комментариев HTML, скрывающие сценарии от обозревателей, не поддерживающих сценарии, как это часто делается в сценариях на стороне клиента. Все команды ASP обрабатываются до пересылки содержимого в обозреватель. Можно использовать комментарии HTML для добавления примечаний к HTML-странице; комментарии передаются в обозреватель и видны пользователю при просмотре исходного текста в формате HTML.
В VBScript поддерживаются комментарии, начинающиеся с апострофа. В отличие от комментариев HTML, они удаляются при обработке сценария и не передаются в обозреватель.
<%
'Эта строка и две следующих являются комментариями.
'Функция PrintTable печатает все
'элементы в массиве.
PrintTable MyArray()
%>
Нельзя включать комментарий в выходное выражение. Например, первая из приведенных ниже строк будет работать, а вторая — нет, поскольку она начинается с <%= .
<% i = i +1 'Эта команда увеличивает i на 1. (Этот сценарий будет работать.) %>
<%= name 'Эта команда печатает имя переменной. (Этот сценарий не будет выполнен.) %>
В JScript поддерживаются символы комментариев // . Эти символы следует использовать на каждой строке комментария.
<%
var x
x = new Date()
// Эта строка передает в обозреватель текущую дату,
// преобразованную в строку.
Response.Write(x.toString())
%>
VBScript не учитывает регистр вводимых данных. Например, можно использовать Request или request для указания объекта ASP Request. Единственным последствием этого является невозможность различения переменных по использованному регистру. Например, нельзя создать две отдельных переменных с именами Color и color.
JScript учитывает регистр. Когда в сценарии используются ключевые слова JScript, они должны быть введены именно так, как указано в справочной странице по этому ключевому слову. Например, использование date вместо Date вызовет ошибку. Регистр, показанный в документации по встроенным объектам ASP, будет действовать и в командах JScript.
Переменная — это именованная область памяти компьютера, содержащая данные, например числа или текстовые строки. Данные, содержащиеся в переменной, называются значением переменной. Переменные предлагают способ хранения, извлечения и манипулирования данными с помощью имен, что помогает понять работу сценария.
Следуйте правилам и рекомендациям языка написания сценариев по именованию и объявлению переменных. Даже если не требуется объявить переменную перед использованием, явное объявление переменных является хорошей привычкой, поскольку это позволяет предотвращать ошибки. Объявление переменной означает уведомление обработчика сценариев о том, что переменная с определенным именем существует. После этого можно использовать ссылки на переменную в сценарии.
VBScript не требует объявления переменных, но считается хорошим стилем написания сценариев объявлять все переменные перед их использованием. Чтобы объявить переменную в VBScript, используйте операторы Dim, Public или Private. Например:
<% Dim UserName %>
Можно использовать оператор VBScript Option Explicit в файле .asp, чтобы требовать явного объявления переменных операторами Dim, Private, Public и ReDim. Оператор Option Explicit должен появиться после любой директивы ASP, но перед текстами HTML и командами сценария. Этот оператор влияет на команды ASP, написанные на VBScript; но не оказывает влияния на команды JScript.
<% Option Explicit %>
<HTML>
<%
Dim strUserName
Public lngAccountNumber
%>
.
.
.
Дополнительные сведения об этих командах см. в справочнике по языку VBScript, который может быть найден на веб-узле Microsoft Windows Script Technologies, расположенном по адресу http://msdn.microsoft.com/scripting/.
Хотя JScript обычно не требует объявления переменных, но считается хорошим стилем написания сценариев объявлять все переменные перед их использованием. Чтобы объявить переменную, используйте оператор var. Например:
<% var UserName %>
Обычно необходимо объявлять переменную в JScript, когда необходимо отличить переменную внутри функции от глобальной переменной, используемой вне функции. В этом случае если не отличать эти две переменные, JScript будет предполагать, что ссылаются исключительно на глобальную переменную. Дополнительные сведения об операторе var см. в справочнике по языку JScript. Эти ссылки могут быть найдены на веб-узле Microsoft Windows Script Technologies, расположенном по адресу http://msdn.microsoft.com/scripting/.
Область определения, или время жизни, переменной определяет команды сценария, которые могут обращаться к переменной. Переменная, объявленная внутри процедуры, имеет локальную область определения; переменная создается и уничтожается при каждом выполнении процедуры. Извне процедуры доступ к переменной невозможен. Переменная, объявленная вне процедуры, имеет глобальную область определения; ее значение доступно и может быть изменено любой командой сценария на странице ASP.
Примечание. Ограничение области определения переменной рамками процедуры повышает быстродействие.
Если переменные объявлены, глобальная и локальная переменные могут иметь одно и то же имя. Изменение значения одной не вызовет изменения значения другой. Если переменные не объявлены, можно непреднамеренно изменить значение глобальной переменной. Например, приведенные ниже команды сценария возвращают значение 1, даже если имеется две переменных с именем Y:
<%
Option Explicit
Dim Y
Y = 1
SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Dim Y
Y = 2
End Sub
%>
Приведенные ниже команды сценария, напротив, возвращают значение 2, поскольку переменные не объявлены явным образом. Когда вызов процедуры устанавливает Y в значение 2, обработчик сценариев предполагает, что процедура изменяет глобальную переменную.
<%
Option Explicit
Dim Y = 1
SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Y = 2
End Sub
%>
Чтобы избежать подобных проблем, выработайте привычку явно объявлять все переменные. Это особенно важно при использовании оператора #include для вставки файлов в файл .asp. Включенный сценарий содержит отдельный файл, но рассматривается как часть включающего файла. Если не объявлять переменные, можно забыть о необходимости использования различных имен переменных в главном сценарии и вставленном сценарии.
Глобальные переменные доступны только в отдельном файле .asp. Чтобы сделать переменную доступной вне отдельной страницы, в качестве ее области определения должны быть указаны сеанс или приложение. Переменные сеанса доступны для всех страниц приложения ASP, которое запрошено одним пользователем. Переменные приложения доступны для всех страниц приложения ASP, которое запрошено любым пользователем. Переменные сеанса являются удачным способом хранения сведений об отдельных пользователях, например параметры, имя пользователя или идентификационный код. Переменные приложения позволяют хранить сведения обо всех пользователях определенного приложения, например приветствие приложения или общие значения, необходимые приложению.
ASP предлагает два встроенных объекта, которые могут хранить переменные: объект Session и объект Application.
Можно также создать экземпляры объектов, имеющие в качестве области определения сеанс или приложение. Для получения дополнительных сведений см. раздел Задание области определения объектов.
Чтобы указать сеанс в качестве области определения переменной, сохраните ее в объекте Session, назначив значение поименованной записи в объекте. Ниже приводится пример команды сохранения двух новых переменных в объекте Session.
<%
Session("FirstName") = "Михаил"
Session("LastName") = "Петров"
%>
Чтобы извлечь информацию из объекта Session, получите доступ к поименованной записи с помощью директивы вывода (<%= ) или Response.Write. Приведенный ниже пример использует директиву вывода для отображения текущего значения Session("FirstName"):
Welcome <%= Session("FirstName") %>
Объект Session позволяет также сохранить сведения о предпочтениях пользователя, на основании которых впоследствии можно будет определить, какую страницу следует ему отправить. Так, если на первой странице приложения пользователем выбирается текстовое представление сведений, та же форма представления может использоваться применительно к остальным страницам приложения, которые он посетит.
<%
strScreenResolution = Session("ScreenResolution")
If strScreenResolution = "Low" Then
%>
Текстовая версия страницы.
<% Else %>
Мультимедийная версия страницы.
<% End If %>
Примечание. Если на переменную сеанса в сценарии ссылаются несколько раз, для увеличения быстродействия предусмотрите, как в предыдущем примере, присвоение ее значения локальной переменной.
Чтобы указать приложение в качестве области определения переменной, сохраните ее в объекте Application, назначив значение поименованной записи в объекте. Ниже приводится пример команды приветствия приложения в объекте Application.
<% Application("Greeting") = "Вас приветствует отдел продаж!" %>
Чтобы извлечь информацию из объекта Application, используйте директиву вывода (<%= ) или Response.Write для получения доступа к поименованной записи с любой последующей страницы приложения. приведенный ниже пример использует директиву вывода для отображения значения Application("Greeting"):
<%= Application("Greeting") %>
Если сценарий часто использует переменную приложения, для повышения быстродействия следует присвоить ее значение локальной переменной.
Константа — это имя, которое используется вместо числа или строки. Некоторые основные компоненты, поставляемые с ASP, например ActiveX Data Objects (ADO), определяют константы, которые можно использовать в сценарии. Компонент может объявить константы в библиотеке типов компонента — файле, содержащем сведения об объектах и типах, поддерживаемых компонентом COM. Объявив библиотеку типов в файле .asp, можно использовать константы в любом сценарии в том же файле .asp. Аналогично можно объявить библиотеку типов в файле Global.asa, чтобы использовать константы в любом файле .asp в приложении.
Чтобы объявить библиотеку типов, используйте тег <METADATA> в файле .asp или файле Global.asa. Например, чтобы объявить библиотеку типов ADO, используйте приведенные ниже операторы:
<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
Можно также указать не универсальный уникальный идентификатор (UUID) библиотеки типов, а путь к этой библиотеке типов:
<!-- METADATA TYPE="typelib" FILE="c:\program files\common files\system\ado\msado15.dll"-->
Затем можно использовать константы ADO в файле .asp, в котором объявлена библиотека типов, или в файле .asp, относящемся к приложению, содержащему файл Global.asa с объявлением библиотеки типов ADO. В приведенном ниже примере adOpenKeyset и adLockOptimistic являются константами ADO:
<%
'Создание и открытие объекта Recordset.
Set rstCustomerList = Server.CreateObject("ADODB.Recordset")
rstCustomerList.ActiveConnection = cnnPubs
rstCustomerList.CursorType = adOpenKeyset
rstCustomerList.LockType = adLockOptimistic
%>
В приведенной ниже таблице перечислены часто используемые библиотеки типов и универсальные уникальные идентификаторы (UUID):
Библиотека типов |
UUID |
Библиотека Microsoft ActiveX Data Objects 2.5 | {00000205-0000-0010-8000-00AA006D2EA4} |
Библиотека Microsoft CDO 1.2 для Windows 2000 Server | {0E064ADD-9D99-11D0-ABE5-00AA0064D470} |
Библиотека MSWC Advertisement Rotator Object | {090ACFA1-1580-11D1-8AC0-00C0F00910F9} |
Библиотека объектов журнала MSWC IIS | {B758F2F9-A3D6-11D1-8B9C-080009DCC2FA} |
Справочные сведения о теге <METADATA> см. в разделе Объявления библиотек типов.
В предыдущих версиях ASP некоторые компоненты обеспечивали определения констант в файлах, которые должны были быть включены в каждый файл ASP, использующий константы. Использование директивы #include для включения определения констант все еще поддерживается, но библиотеки типов проще использовать, а сценарии с их помощью проще обновлять. В будущих выпусках ASP компоненты могут не формировать файлы определения констант.
Примечание. Использование тега <METADATA>, а не директивы #include может повысить быстродействие веб-приложения.
Можно определить собственный набор констант. В VBScript используйте оператор Const. В JScript можно использовать оператор var для присвоения постоянного значения переменной. Если необходимо использовать константы в нескольких файлах .asp, поместите объявления в отдельный файл и включайте его в каждый файл .asp, использующий эти константы.
|
|
|
|