При разработке динамических web-сайтов в большинстве случаев целесообразно разделять бизнес-логику между клиентом и сервером, чтобы добиться оптимальной производительности в условиях низкоскоростных каналов Интернета и лимитированных ресурсов Web-серверов.
Например, предварительную обработку введенных данных, отправляемых серверу, имеет смысл выполнять на стороне клиента. Это позволит исключить повторные передачи неправильно заполненных форм. Графическое представление результатов запроса также стоит выполнять на стороне клиента, что существенно сократит объем данных, передаваемых по сети.
Для реализации клиентской активности возможно применение сценариев JavaScript, VB Script, аплетов Java и элементов управления ActiveX.
Клиентские сценарии JavaScript
Понятие языка JavaScript
Язык программирования JavaScript предназначен для создания интерактивных HTML-документов. Это объектно-ориентированный язык разработки встраиваемых приложений, выполняющихся как на стороне клиента, так и на стороне сервера. Синтаксис языка похож на синтаксис языка Java — поэтому его часто называют Java-подобным. Клиентские приложения выполняются браузером просмотра Web-документов на машине пользователя, серверные приложения выполняются на сервере.
При разработке обоих типов приложений используется общий компонент языка, называемый ядром и включающий определения стандартных объектов и конструкций (переменные, функции, основные объекты и средство LiveConnect взаимодействия с Java-аплетами), и соответствующие компоненты дополнений языка, содержащие специфические для каждого типа приложений определения объектов.
Конструкции языка сценариев JavaScript встраиваются в страницы HTML и исполняются (интерпретируются) под управлением браузера при загрузке страниц, а также при совершении пользователем определенных действий над объектами, расположенными в этих страницах.
Назначение клиентских сценариев JavaScript
Назначение клиентских сценариев JavaScript:
Оперативная проверка достоверности заполняемых пользователем полей форм HTML до передачи их на сервер. Сценарии JavaScript способны обрабатывать данные, введенные пользователями в полях форм, а также события, возникающие в процессе манипуляций пользователя с мышью, копировать в окно браузера другие страницы HTML или изменять содержимое уже загруженных страниц.
Создание динамических HTML-страниц совместно с каскадными таблицами стилей и объектной моделью документа.
Взаимодействие с пользователем при решении "локальных" задач, решаемых приложением JavaScript, встроенном в HTML-страницу. В частности, сценарии JavaScript широко применяются для создания различных визуальных эффектов. Например, изменение внешнего вида элементов управления, над которыми установлен курсор мыши, анимация графических изображений, создание звуковых эффектов и т. д. Механизм локальной памяти Cookie позволяет сценариям JavaScript сохранять на компьютере локальную информацию, введенную пользователем. Например, в Cookie может храниться список товаров из Интернет-магазина, отобранных для покупки.
Приложение JavaScript представляет набор операторов языка, последовательно обрабатываемых встроенным в браузер интерпретатором.
Способы включения сценариев JavaScript в HTML-страницу
Встроить сценарий JavaScript в HTML-страницу можно несколькими способами:
Задать операторы языка внутри тэга-контейнера <script>…</script> языка HTML. Браузеры, не поддерживающие какие-либо тэги HTML, их игнорируют, анализируя содержимое пропускаемых тэгов с точки зрения синтаксиса HTML. Это может приводить к ошибкам при отображении страницы. Поэтому операторы языка JavaScript помещаются в контейнер комментария <!-- … -->:<script type="text/javascript" language="javascript">
<!--
операторы JavaScript
//-->
</script>
Символы ( // ) перед закрывающим тэгом комментария --> являются оператором комментария JavaScript. Он необходим для правильной работы интерпретатора. Документ может содержать несколько тэгов <script>, расположенных в любом месте документа. Все они последовательно обрабатываются интерпретатором JavaScript по мере отображения частей документа в окне браузера. Поэтому рекомендуется размещать сценарии с глобальными функциями и переменными в разделе <head> документа. В этом случае все определения обрабатываются интерпретатором в начале загрузки документа и хранятся в памяти с первых моментов отображения документа в окне браузера.
Указать файл с кодом JavaScript в параметре src тэга <script>. В качестве значения параметра задается полный или относительный URL-адрес внешнего файла, содержащего программный код на языке JavaScript. Задание закрывающего тэга </script> обязательно, независимо от того, заданы или нет операторы внутри тэга. Связываемый внешний файл не должен содержать тэгов HTML и должен иметь расширение .js:<script type="text/javascript" language="javascript"
src="http:www.mysite.ru/functions/jsfuncs.js">
операторы JavaScript
</script>
Использовать выражения JavaScript в качестве значений параметров тэгов HTML. Эта процедура аналогична процедуре встраивания числовых или символьных примитивов HTML. Элементы JavaScript также располагаются между амперсандом ( ) и точкой с запятой ( ; ), но должны заключаться в фигурные скобки { } и использоваться только в качестве значений параметров тэгов HTML. Нельзя использовать элементы JavaScript в тексте HTML. Они интерпретируются только тогда, когда расположены справа от параметра и задают его значение. Пусть определена переменная barwidth, и ей присвоено значение 75. Следующий тэг нарисует горизонтальную линию длиной в 75% от горизонтального размера окна браузера:<hr width="{barWidth};%"/>
Определить обработчик событий в тэге HTML. Для совместимости с языками сценариев в некоторые тэги HTML были введены специальные параметры обработки возникающих событий. Значениями этих параметров могут быть операторы языка JavaScript. Обычно в качестве значения задается имя функции, которая вызывается, когда происходит соответствующее событие, определяемое параметром обработки события. Имя параметра начинается с приставки on, за которым следует имя самого события. Например, параметр обработки события click будет иметь имя onClick. События в основном связаны с действиями, производимыми пользователем с элементами форм HTML. Поэтому чаще всего перехват и обработка событий задается в параметрах элементов форм, что позволяет проверить введенную информацию перед ее отправкой на обработку. Функция или процедура это именованная последовательность операторов, которая выполняет определенную задачу и может возвращать некоторое значение. Функция в JavaScript определяется оператором function, имеющем следующий синтаксис:function имя_функции ( [параметры] ) {
[операторы JavaScript]
[return значение]
}
Параметры, передаваемые функции, разделяются запятыми. Необязательный оператор return в теле функции (блок операторов, заключенный в фигурные скобки), определяет возвращаемое функцией значение. Определение необходимых функций следует осуществлять в тэге <head>, так как все определенные в нем операторы сценария интерпретируются до отображения страницы, и, таким образом, будут известны в процессе отображения всей страницы.
Пример задания функции и ее вызова в процессе формирования документа:
<head>
<title>Demo</title>
<script type="text/javascript" language="javascript">
<!-- //Скрыть сценарий от браузеров: не поддерживающих JavaScript
function square(number) {
return number * number;}
//-->
</script>
</head>
<body>
<p>Начинается отображение страницы, в которую внедрен сценарий вычисления функции</p>
<script type="text/javascript" language="javascript">
<!-document.write("Значение, которое вычислялось, равно ", square(5), ".");
//-->
</script>
<p> Теперь формирование страницы закончено.</p>
</body>
Пример явного вызова функции из сценария:
<head>
<title>Demo</title>
<script type="text/javascript" language="javascript">
<!-- //Скрыть сценарий от браузеров: не поддерживающих JavaScript
function validate(form) {
if(form.value >=18)
{alert("Вы - совершеннолетний");
}
else {
alert ("Вы - несовершеннолетний");
}
}
//-->
</script>
</head>
<body>
<form name="form_l" action="HTMLPage.htm">
Ваш возраст: <input type="text" size="5" name="age" /> <hr/>
<input type="button" value="Подтвердите" onclick="validate(this.form.age)"/>
</form>
</body>
В этом примере обработчик события onclick кнопки формы связан с вызовом функции validate, которой передается значение, введенное в текстовое поле age. Имя поля задается параметром name. При нажатии на кнопку вызывается функция validate, отображающая сообщение в зависимости от введенного значения.
Параметр name элемента формы задает символическое имя элемента, которое можно использовать в операторах сценария для ссылки на соответствующий элемент. Передаваемый функции параметр this.form.age использует синтаксис объектно-ориентированных языков, обозначающий элемент с именем age (текстовое поле) формы. Ключевое слово this языка JavaScript означает в данном случае ссылку на текущую форму.
Браузер MSIE реализует собственную версию JavaScript, называемую JScript. Кроме того, для выполнения многих функций клиентские сценарии обращаются к интерфейсу объектной модели браузера. Эта модель отличается для разных браузеров.
Клиентские сценарии VBScript
Помимо JScript, браузер MSIE способен работать с языком клиентских сценариев VB Script, который представляет собой подмножество Microsoft Visual Basic и функционально равноценен языку JavaScript.
Преимуществом его применения для создания сценариев является возможность использования, с небольшими корректировками, ранее написанных процедур на языках Visual Basic и Visual Basic for Application.
VBScript используется для написания сценариев клиента (в этом случае браузер должен иметь встроенный интерпретатор этого языка), а также для написания сценариев на сервере (в этом случае сервер должен поддерживать язык VBScript). Для создания сценариев клиента используется набор объектов, аналогичный набору объектов JavaScript.
Применение VB Script для создания страниц Web-серверов, расположенных в Интернете, нецелесообразно, так как не все пользователи используют IE. Однако если технологии Интернета применяются в корпоративной интрасети и можно установить на компьютеры всех пользователей IE, то применение VBScript вместо JavaScript программистами VB заметно сокращает сроки и стоимость разработки.
Аплеты Java
Технология Java
Технология Java включает в себя язык программирования и платформу, для обозначения которых используется одно название — Java.
Java – это объектно-ориентированный, распределенный, интерпретируемый, защищенный, архитектурно-независимый, переносимый, высокопроизводительный, многопоточный, динамический язык программирования высокого уровня.
Программа на языке Java транслируется компилятором в специальный байтовый код — Java bytecode, называемый также J-кодом, для выполнения которого требуется интерпретатор Java. Таким образом, язык Java является одновременно компилируемым и интерпретируемым. Интерпретатор Java - это приложение, предназначенное для конкретной аппаратно-программной платформы: PC-Windows, PC-Linux, Mac, UNIX-машины. J-код не зависит от платформы.
Это обеспечивает архитектурную независимость и переносимость программ на языке Java. Байтовый код Java можно рассматривать как набор машинных команд для некоторой виртуальной машины, реализуемой интерпретатором. Он может исполняться в любой среде, в которой выполняется виртуальная машина Java.
Классы Java
Основными единицами, из которых строится программа Java, являются классы. Классы образуют иерархическую древовидную структуру, лежащую в основе объектно-ориентированной модели языка. Класс представляет собой совокупность данных и методов для их обработки. Метод в терминологии объектно-ориентированной модели является синонимом процедуры или функции. На базе уже существующего класса может быть определен новый класс, являющийся подклассом своего предшественника. Исходный класс является родительским классом или надклассом для своего подкласса. Подкласс наследует у родительского класса коллекцию данных и методов. Кроме них он может содержать собственные данные и методы.
Класс определяет целый тип данных. Конкретный экземпляр этого типа называется объектом. Написание Java-программы заключается в создании нового класса или совокупности связанных между собой классов, то есть в определении набора данных, описывающих решаемую задачу, и в конструировании методов, реализующих обработку этих данных. При этом для порождения новых классов может использоваться существующая базовая коллекция классов. Исходный текст на языке Java, составляющий описание класса, сохраняется в файле, имя которого имеет расширение JAVA. Этот файл компилируется в J-код и сохраняется в файле с тем же именем и расширением CLASS. Скомпилированные классы Java в виде J-кода могут храниться локально на компьютере или распределенно в сети и динамически загружаться выполняющимися приложениями по мере необходимости.
Платформа Java
Платформа Java состоит из виртуальной машины и интерфейса прикладного программирования Java API. Виртуальная машина предназначена для выполнения J-кода на различных платформах. Интерфейс прикладного программирования Java представляет собой большую коллекцию классов в формате J-кода, сгруппированных по своему назначению в отдельные пакеты. Список имеющихся пакетов занимает несколько страниц текста, и каждый из пакетов содержит коллекцию классов. Для работы с такой сложной структурой используется специальная схема именования пакетов и классов, напоминающая доменную систему имен Интернета (DNS). Например, имя java.lang определяет пакет, содержащий базовые классы самого языка Java. Имя java.lang.object определяет класс object внутри этого пакета. Пакеты, имена которых начинаются со слова java, составляют основу интерфейса прикладного программирования и входят в состав любой платформы Java. Кроме основной части API существуют стандартные расширения для работы с трехмерной графикой, анимацией и т. д.
Инструменты создания Java-приложений
Для создания Java-программ необходим набор средств разработчика Java Development Kit (JDK), включающий в себя базовую коллекцию классов, компилятор javac, отладчик jdb, виртуальную машину java для выполнения готовых приложений и программу просмотра аплетов appietviewer. Существуют варианты набора JDK от фирм Sun и Microsoft и, кроме того, визуальные средства разработки фирм Microsoft, Borland, Symantec.
Использование аплетов Java для создания динамических HTML-документов
В среде Java существуют два основных типа программ: приложения (application) и аплеты (applets). Приложение — это самостоятельная программа, для выполнения которой требуется только наличие виртуальной машины Java. Аплет — это программа, которая предназначена для выполнения в составе Web-браузера или специальной программы просмотра аплетов. Java-аплеты — это еще один метод создания динамических HTML-документов.
Аплет создается, компилируется и сохраняется на Web-сервере. В HTML-документ, публикуемый на сервере, при помощи специального тэга помещается ссылка на местоположение аплета. При получении документа с сервера браузер загружает аплет и начинает его выполнять. Такой подход к созданию динамических документов прямо противоположен подходу, который используется в программировании интерфейсов CGI: апплет выполняется на стороне клиента, а CGI-сценарий — на стороне сервера.
Аплеты Java, используются наряду с клиентскими сценариями для организации активности на стороне клиента. Аплеты Java применяются для организации визуальных и звуковых эффектов, а также ввода и предварительной обработки данных перед отправкой их на сервер, а также для представления полученных от сервера данных в графическом, табличном или каком-либо другом виде.
Безопасность аплетов
Аплеты выполняются под управлением браузера и не имеют доступа к локальным ресурсам компьютера. Однако они способны взаимодействовать с расширениями сервера CGI и ISAPI, а также читать файлы с того Web-сервера, с которого они были загружены.
Аплет не может:
осуществлять операции чтения-записи в локальной файловой системе, то есть читать и изменять файлы, просматривать содержимое каталогов, создавать, удалять, переименовывать файлы и каталоги;
устанавливать сетевые соединения с другими компьютерами, кроме компьютера, с которого он был загружен;
запускать на выполнение другие программы на компьютере, на котором он выполняется;
использовать библиотеки других языков программирования,
изменять системные параметры.
Для проверки соблюдения правил безопасности существует специальный класс java.lang.SecurityManager. Экземпляр этого класса выполняется в составе виртуальной Java-машины браузера.
Элементы управления ActiveX
Технология ActiveX
Элементы управления ActiveX— это самостоятельные программные компоненты, которые можно использовать в разрабатываемых приложениях для реализации необходимых функциональных возможностей. Элементы управления ActiveX создаются с использованием технологии Component Object Model (COM — Компонентная объектная модель), разработанной фирмой Microsoft, и не являются самостоятельным приложением — они выполняются только в приложении, которое позволяет встраивать элементы управления ActiveX, являясь, тем самым, для них неким контейнером.
Элемент управления ActiveX представляет собой небольшую программу, которой браузер выделяет на странице определенный участок прямоугольной формы. В пределах своего участка орган управления полностью отвечает за перерисовку экрана и взаимодействие с пользователем.
Не всякое приложение может быть контейнером для элементов управления ActiveX. Оно должно поддерживать технологию СОМ и предоставлять возможность манипулирования встраиваемыми компонентами. Многие приложения фирмы Microsoft позволяют широко использовать элементы управления ActiveX либо для расширения функциональных возможностей самого приложения, либо для быстрого создания новых приложений, использующих элементы управления ActiveX в качестве строительных блоков. К подобным приложениям можно отнести Microsoft Visual Basic, Microsoft Access, Microsoft Internet Explorer и некоторые другие.
Технология СОМ позволяет использовать объекты со своими свойствами, методами и событиями, которые создаются не во время выполнения программы, написанной на каком-либо объектно-ориентированном языке программирования, а существуют в виде отдельных программных единиц, называемых компонентами. При включении подобного объекта-компонента в тело разрабатываемой программы он раскрывает свои свойства и методы, которые можно получать или устанавливать а также выполнять.
Для реализации какой-нибудь функциональной возможности с помощью элемента управления ActiveX, например отображения дерева каталогов, программист может разработать свой элемент управления ActiveX, а может воспользоваться одним из многочисленных элементов управления ActiveX, разработанных и распространяемых другими фирмами.
Элементы управления ActiveX можно использовать как на стороне сервера, так и на стороне клиента. В последнем случае их применяют для решения тех же задач, что и аплеты Java:
реализация полос прокрутки, раскрывающихся меню и других визуальных элементов управления, которые средствами HTML создать нельзя;
прием обработка и вывод данных от пользователя или серверного компонента, с последующим построением динамически меняющихся диаграмм,
решение оформительских задач - например, покрытие выделенного им участка узором, плавным переходом цветов, движущимся текстом или изображением.
Дополнительно они предоставляют неограниченный доступ к ресурсам локального компьютера. Возможность доступа элементов управления ActiveX к локальным ресурсам компьютера имеет не только преимущества, но и недостатки.
Встраивание элементов управления ActiveX в страницу
Для встраивания в HTML-страницу внешних объектов предназначен тэг <object>, который является контейнером для тэгов <param>, определяющих значения свойств включаемого объекта.
Любой устанавливаемый на компьютере элемент управления ActiveX регистрируется в системном реестре, куда заносится и там же хранится соответствующая информация. В разделе HKEY_CLASSES_ROOT/CLSID/ реестра хранятся уникальные идентификационные номера всех установленных на компьютере элементов управления ActiveX. В дальнейшем эта информация используется браузером Internet Explorer для обработки HTML-страниц, содержащих встроенные элементы управления ActiveX.
Для элементов управления ActiveX обязательно задание параметра classid. Значением его является уникальный идентификационный номер встраиваемого элемента управления ActiveX. При загрузке страницы браузер проверяет, установлен ли элемент управления на компьютере пользователя, осуществляя его поиск в системном реестре по заданному идентификационному номеру. В случае отсутствия записи в реестре браузер автоматически начинает процедуру загрузки элемента управления ActiveX с сервера, URL-адрес которого указан в параметре codebase тэга <object>.
Значение параметра classid представляет строку, определяющую встраиваемый объект, и для зарегистрированных элементов управления ActiveX задается в форме:
"clsid:ХХХХХХХХ-ХХХХ-ХХХХ-ХХХХ-ХХХХХХХХХХХХ"
Первая часть clsid: сообщает анализатору браузера, что вставляется элемент управления ActiveX. Вторая часть представляет собой уникальный идентификационный номер этого элемента.
В параметре codebase задается адрес компонента, по которому браузер может загрузить его на компьютере пользователя в случае отсутствия.
Пример:
<object id="myactx" width="32" heigth="32"
classid="CLSID:12D3959D-5048-11D3-A272-8C0305C10000"
codebase="http://somesite.ru/ActiveX/advert32.cab #version=l,0,0,0">
</object>
После адреса элемента управления задается его версия в виде #version=a,b,c,d, где a и b представляют, соответственно, старшее и младшее слово максимально доступной на сервере версии элемента управления, а c и d — соответственно старшее и младшее слово минимально доступной на сервере версии элемента управления. Эти значения используются браузером в процессе принятия решения о загрузке элемента управления с сервера. Если на компьютере пользователя установлена более новая версия элемента управления, то загрузка не производится.
Значения, определяющие интервал доступных версий компонента могут быть все установлены равными "-1". В этом случае элемент управления загружается, если дата выпуска его версии на сервере позже даты его установки на компьютере пользователя.
Оптимальным способом вставки элементов управления ActiveX в HTML-страницу является использование визуальных редакторов, таких, как MS Frontpage.
Обеспечение безопасности загрузки элементов управления ActiveX
Широко используемые на HTML-страницах объекты — Java-апплеты и элементы управления ActiveX — также разрабатываются с учетом их безопасного применения. Стратегии безопасности для этих двух типов объектов различны. Если средства разработки Java-аплетов вообще не позволяют им обращаться к информации, расположенной на компьютере, то с элементами управления ActiveX дело обстоит немного сложнее. Последние используются не только в Web-приложениях, но и как строительные единицы при разработке обычных приложений. Поэтому ни одна среда разработки элементов управления ActiveX не накладывает ограничений на доступ к информации, хранящейся на компьютере, где используется этот элемент.
Файл с расширением .ocx, в котором содержится компонент системы ActiveX, получает управление практически так же, как и любой другой исполняемый файл в Windows, и обладает теми же правами - например, правом бесконтрольной записи на диск (под Windows NT эти права могут быть ограничены уровнем привилегий пользователя, запустившего данный компонент).
Поэтому ограничение доступа к информации элементу управления ActiveX достигается совместным использованием системы безопасности браузера и мероприятиями, связанными с регистрацией и установкой элементов управления ActiveX на компьютере пользователя при загрузке HTML-страницы.
Если используемый на странице элемент управления ActiveX не установлен на компьютере пользователя, то браузер начнет процедуру загрузки и установки элемента управления на этом компьютере.
Для обеспечения безопасности загрузки элементов управления ActiveX используется технология цифровых сертификатов. Прежде чем загружать необходимые файлы, браузер проверит, снабжен ли элемент управления цифровой подписью, и если да, то в диалоговом окне отобразит содержимое цифровой подписи, если нет — предупредит пользователя о том, что будет загружаться элемент управления без цифровой подписи. Пользователь сам решает, стоит ли ему загружать данный элемент управления.
Разработчик элемента управления ActiveX снабжает свой элемент цифровой подписью следующим образом:
Разработчик получает соответствующий сертификат подлинности от организации, уполномоченной на это. Одной из таких организаций является VeriSign ([http://digital.verisign.com/). Основная функция подобных орагнизаций - проверить подлинность и правильность информации о фирме или индивидуальном программисте, желающих подписывать свои продукты.]
После получения сертификата с помощью специального программного обеспечения, поставляемого разными фирмами, производитель программного продукта вставляет цифровую подпись в двоичный код распространяемого им программного обеспечения, например элемента управления ActiveX.
Действующая цифровая подпись гарантирует, что загружаемый элемент управления ActiveX произведен конкретной фирмой или лицом, и подтверждает, что он никем не был изменен со дня его подписания фирмой-производителем.
Система ActiveX и реализованный в ней механизм безопасности заметно удобнее использования языка Java. Отсутствие защитной оболочки виртуальной машины позволяет расширить функциональность компонентов ActiveX. Им доступен прямой и эффективный контроль над ресурсами компьютером, который невозможно реализовать Java-аплетами.
Однако эта технология не ограждает от проблем, связанных с наличием уязвимостей в защите браузера. Кроме того, чтобы получить цифровой сертификат и подписать свой элемент управления ActiveX, разработчик должен внести единовременный денежный взнос, а затем производить ежегодную плату.
В случае разработки элементов управления ActiveX для сервера Web их можно не подписывать. Эти модули не загружаются клиентами, а выполняются непосредственно на сервере.
Выбор способа реализации клиентской активности
Выбирая между серверной и клиентской активностью, а также способами их реализации, необходимо учесть следующие факторы:
Кроссплатформенность – необходимо обеспечить совместимость решения с максимальным количеством компьютерных платформ.
Минимизация объема загружаемых клиентских программ.
Обеспечение безопасности информации, передаваемой клиентом на web-сервер.