
ПСУБД ЛР №4 (2 часа)
.pdf
Методические указания для выполнения лабораторной работы №4
Тема: Введение в Cache Server Pages (CSP)
1 Теоретическая часть
1.1 Что это такое?
CSP – это технология создания динамических Web-приложений, а также средство быстрой разработки приложений и интеграции разнородных источников информации.
1.2Характеристики технологии
весь HTML-код генерирует сервер:
веб-сервер играет только роль канала связи;
рациональное использование вычислительных ресурсов;
базис для эффективной и простой масштабируемости;
теги позволяют осуществлять быструю разработку Web-приложений:
расширяемый набор тегов;
повторное использование кода;
готовая функция в одной строке (например, <CSP:SEARCH>);
каждая CSP-страница в Cache является отдельным классом:
полная интеграция с объектной моделью;
быстрое исполнение.
1.3Шлюз Web-сервера
Шлюз Web-сервера (Web Server Gateway, WSG) – это модуль Cache, который интегрируется с Web-сервером и занимается распределением запросов пользовательских браузеров к страницам CSP между серверами баз данных. Его можно установить отдельно.
1.4Работа с CSP-страницами
пользователь запрашивает страницу;
веб-сервер по расширению *.csp определяет, что обработку надо предоставить серверу Cache;
Cache запускает отдельную процедуру генерирования HTMLстраницы;
HTML-страница отсылается обратно пользователю через Web-сервер.
Помимо HTML-кода, CSP-файл содержит следующие элементы:
теги CSP;
выражения на ObjectScript;

блоки кода на ObjectScript или Cache Basic;
Браузер понимает только стандартный код HTML, который может включать функции JavaScript.
1.5 Создание CSP-страницы
CSP-страница может быть создана в любом редакторе для HTML, но достаточно и обычного текстового редактора, т.к. CSP-страница представляет собой обычный текстовый файл. Для редактирования CSP и HTML-страниц можно также использовать Cache Studio. Также Cache предлагает функционал мастера для создания CSP-форм. Для быстрого создания страницы достаточно выбрать имя класса и требуемые свойства.

1.6Компиляция CSP-страницы
ручная;
автоматическая.
Ручная компиляция из терминала:
NAMESPACE>Do $SYSTEM.CSP.LoadPage(«<dir>»,«ck»)
где <dir> - это виртуальный путь к файлу CSP, например,
/csp/samples/menu.csp, а
<ck> показывает, что страница будет компилироваться, и что она содержит отображаемую информацию.
Автоматическая компиляция:

1.7 CSP-классы без файлов CSP
Если созданы классы CLS, то они порождают HTML-страницы даже при отсутствии связанного с ними CSP-файла. Дочерние классы %CSP.Page – это специальные классы, которые наследуют методы и структуру, необходимые для генерации HTML-страниц. Такие «страницы» вызываются иначе: http://<webserver>/<applicationpath>/<packet.class>.cls,
например, http://localhost/csp/samples/csp.menu.cls.
1.8Доступность переменных
в рамках страницы, где они определены, переменные глобальны;
описанные внутри методов переменные локальны;
переменные, которые должны быть доступны во всём документе, объявляются в разделе HEAD;
задавая %session.Preserve=1, можно сделать так, чтобы переменные были доступны другим страницам.
1.9Выражения на Cache ObjectScript
#(<expression>)#
Где <expression> - это выражение ObjectScript, возвращающее значение
(цифровое или буквенно-цифровое). Вычисление производится при генерации страницы и значение внедряется в HTML.
##(<expression>)##
Поведение аналогично, однако вычисление производится на момент
компилирования.
Метод EscapeHTML() используется, если результат имеет специальные с точки зрения HTML символы (используется двухточечный синтаксис).
1.10 Язык ObjectScript в блоках кода

Для того, чтобы использовать в CSP странице ObjectScript язык, необходимо использовать следующий код:
<script language=”cache” runat=”[server|compiler]”> [ Caché Object Script Code ]
</script>
Где:
runat=”server” – блок обрабатывается на этапе просмотра CSPстраницы;
runat=”compiler” – блок обрабатывается при компиляции;
[ Caché Object Script Code ] – блок выражений на языке ObjectScript.
Логика данного скрипта может быть описана независимо и может влиять на вид HTML-страницы. (Выражения после “Write” отображаются на стандартном устройстве вывода – по умолчанию – браузер).
1.11 Контекст во время исполнения
Типичная последовательность создания CPS-страницы:
Пользователь подключается к нашему сайту и вызывает CSP-страницу;
%cspServer создает новый контекст и новый экземпляр объекта %session, который сохраняется вплоть до отключения;
Caché создает экземпляр объекта %request и сохраняет в нём все параметры вызова;
Теперь пользователь запрашивает другую страницу CSP;
Caché уничтожает объект %request старой страницы и создаёт новый экземпляр для новой страницы;
Процесс повторяется;
Пользователь уходит со страницы, или истекает время таймаута. Объект %session теряет данные, но остаётся в памяти;
Через некоторое время (“время отсрочки”) объект %session будет уничтожен и слот лицензии освободится.
Схематичное представление данной последовательности:

1.11Объект %request
Объект %request использует класс %CSP.Request. Он хранит параметры
текущей страницы, такие как: Переданные данные, URL, Название страницы.
Свойство Data объекта %request хранит имена и значения параметров, которые переданы в параметре URL, или поля формы. Данный объект создаётся на сервере и существует только на этапе генерации HTMLстраницы.
Доступные методы манипулирования данными:
IsDefined(“<variable”>);
Get(“<variable>”,<index>);
Set(“<variable>”,<index>);
1.12Объект %session
Объект %session использует класс %CSP.Session. Его основная цель –
хранить переменные и характеристики текущей сессии, такие как: EventClass,
Username, AppTimeout, Preserve, Data, SessionId. Объект %session всегда открыт и доступен на протяжении всей сессии. Он создаётся на сервере и позволяет хранить информацию в контексте сессии на всём её протяжении.
Некоторые события вызывают методы %CPS.SessionEvent, например:
OnSessionStart, OnSessionEnd, OnTimeout. Для их переопределения и использования необходимо определить новый дочерний класс, в котором свойству EventClass объекта %session будут сопоставлены новые методы.
1.13 Объект %response

Объект %response использует класс %CSP.Response. Он предназначен для управления HTTP-заголовками, передаваемыми в браузер. Для работы с данными этого объекта необходимо использовать метод OnPreHTTP().
Объект %response может сохранять и извлекать данные из Cookies, а его вызов может быть переадресован на другую страницу – серверная переадресация прозрачна для браузера.
1.14 Определение методов в CSP
<script language=”cache” method=”…” arguments=”…” returntype=”…”> [ Caché Object Script Code ]
</script>
Где:
method – имя метода;
arguments – список параметров: тип (через запятую);
returntype – тип данных результата;
[ Caché Object Script Code ] – блок выражений на языке ObjectScript.
Метод будет создан в классе, связанным со страницей, а также он
реализует расширенную функциональность.
1.15Гиперсобытия
Гиперсобытия позволяют вызывать методы Caché из HTML-форм.
Всего их существует 2 типа:
#server(<Метод Caché>)#
Аргумент должен быть именем метода Caché;
Методу можно передавать параметры со страницы или полученные из
URL;
Инструкция эквивалентна вызову JavaScript функции;
Использует Java апплет (cspbroker.jar);
Документ должен содержать тег HEAD.
#call(<Метод Caché>)#
Аналогичное поведение;
Для выполнения не требуется поддержка Java;
Синхронный вызов метода.
1.16 Использование SQL в блоках кода
Для того, чтобы использовать SQL необходимо написать следующее:
<script language=”SQL” name=”rset” p1=val1, …, pN=valN>
[SQL-code] </script>
Результатом выполнения запроса является объект класса %Library.ResultSet, который связан с переменной, имя которой определяется в параметре name (в данном случае rset).

p1, …, pN – параметры, передаваемые в SQL запрос, которые подставляются при его обработке вместо неизвестных значений (в данном случае это val1, …, valN).
Результирующая информация отформатирована подобно HTML.
2 Подсказки к индивидуальным заданиям
Задание 1
См. пункт 1.9 Для отображения системной даты и времени используйте
$zdt(<hdatetime>, <dformat>),
Где:
hdatetime – значение даты и времени.
dformat – форматирование даты (используйте в качестве параметра 4 – европейский формат).
Задание 2
См. пункт 1.8, 1.9
Необходимо заранее в области (в проводнике Cache куба) объявить глобал,
например: ^VisitCount=0
Для установки приращения счетчика используйте функцию
Set <var>=$Increment(<variable>,<num>),
Где
var – переменная, в которую запишется значение;
variable – переменная, значение которой необходимо увеличить;
num – (необязательный параметр) значение приращения.
Задание 3
См. пункт 1.11
Для того, чтобы получить значение из HTML формы, используйте
%request.Get(“<input-name>”, “<alt>”)
Где:
input-name – параметр “name” соответствующего HTML-тега;
alt – значение выводимое в случае, если параметр input-name пуст.
Задание 4
См. пункты 1.11, 1.12
Чтобы что-то пришло, в URL методом Get необходимо передать значения аргументов Name и Password
Пример: http://127.0.0.1:1972/csp/user/SESSION.CSP?Name=Olga&Password=qwerty
Для записи в объект сессии используйте set %session.Data(“<argument>”)=<value>,

Где:
argument – составной параметр, состоящий из ключевого слова session и параметр передаваемый в URL (например: “sessionKey”);
value – записываемое в сессию значение.
Для получения значения из сессии используйте
%session.Get("sessionKey")
Задание 5
См. пункт 1.15
Вызов метода из HTML формы происходит следующим образом:
<input type="button" name="btnSend" value="Send" onclick=#server(..SendEmail(self.form1.from.value, self.form1.to.value, self.form1.subject.value, self.form1.body.value))#>
3 Индивидуальные задания
Задание 1
Цель: разработать CSP-страницу, которая отображает дату и время последней компиляции страницы. Дополнительно реализуем вывод даты и времени на сервере в момент обращения к странице. Для отображения системной даты и времени используйте $ZDateTime($h,4).
Результат: CSP-страница, которая отображает дату и время в момент компиляции и в момент обращения к ней.
Задание 2
Цель: используя только выражения ObjectScript и блоки кода, создайте новую CSP-страницу, которая выводит счётчик обращений к странице, а также дату и время обращения к странице. Для хранения количества посещений используйте глобалы.
Результат: CSP-страница, отображающая количество обращений к странице, а также дату и время вызова страницы.
Задание 3
Цель: разработать CSP-страницу с именем RequestForm.csp, которая содержит тег <form> с двумя полями Name, Age, а также кнопкой Submit для передачи данных. Страница передаёт данные сама себе. Переданные данные отображаются в табличной форме.
Результат: CSP-страница, содержащая тег <form> и список введённых значений.
Задание 4
Цель: разработать две CSP-страницы. Одна страница через URL получает два аргумента - Name и Password. Затем, используя объект %request, извлекает значения этих аргументов и записывает их в объект %session.
Другая страница извлекает из объекта %session значения сессионных переменных и выводит их в браузере.
Результат: две CSP-страницы.
Задание 5
Цель: используя классы Cache из пакета %Net, необходимо реализовать метод CSP-страницы, который позволяет посылать сообщения по email. Для этого необходимо создать форму, которая содержит поля адреса получателя (поле To), отправителя (поле From), а также заголовок (поле Header) и тело сообщения (поле Body). На странице следует реализовать кнопку SEND, при нажатии на которую по гиперсобытию вызывается метод отправки сообщений, и ему в качестве аргументов передаются элементов формы To, From, Header, Body.
Результат: CSP-страница, с помощью которой можно отправлять сообщения по email.