Оформление блоков гипертекста
Для придания большей выразительности HTML-страницам применяются следующие теги и их закрывающие пары:
для использования жирного (bold) написания <B> и </B> для использования наклонного (italic) написания <I> и </I> для использования режима (underline) подчеркивания <U> и </U>
В текст HTML-страницы могут быть добавлены заголовки и подзаголовки (с уровнем вложения до шести). Для этого применяются теги <H1>, <H2>, <H3>, <H4>, <H5>, <H6> с соответствующими закрывающими тегами.
Для форматирования строк и абзацев используют следующие теги:
<P> ... </P> - оформление отдельного абзаца,
<BR> - принудительный перевод строки,
<HR> - горизонтальная черта (разделитель),
<PRE> ... </PRE> - передача текста без дополнительного форматирования.
Это так называемые способы физического выделения, они не зависят от реализации броузера, а есть логические стили (<EMP>, <BIG> и др.), форматирующие текст по-разному в различных броузерах.
Для оформления перечней в гипертексте определены три типа списков: неупорядоченные <UL>, упорядоченные <OL> и списки определений <DL>. Пример оформления неупорядоченного списка:
<UL> <LI> Первый элемент <LI> Второй элемент <LI> Последний элемент </UL>
Списки определений служат для создания глоссариев и индексов:
<DL> <DT>Первый термин <DD>Определение первого термина <DT>Второй термин <DD>Определение второго термина </DL>
Совместно с механизмом ссылок перечни позволяют строить простые меню.
Операторы VBScript
VBScript имеет полный набор операторов, включая арифметические и логические операторы, операторы сравнения и конкатенации. Когда в одном выражении встречаются несколько операторов, то определяется порядок выполнения этих операторов. Такой порядок выполнения всех операторов называется приоритетом операторов. Для того, чтобы пренебречь приоритетом выполнения операторов можно использовать скобки. Тогда операторы в скобках всегда будут выполнятся перед выполнением других операторов. Внутри скобок соблюдается приоритет выполнения операторов. Если выражение содержит операторы различных типов, то в этом случае первыми выполняются арифметические операторы, следующими выполняются операторы сравнения и, затем, логические операторы. Операторы сравнения всегда имеют равный приоритет, поэтому они выполняются слева направо. Арифметические и логические операторы имеют приоритет выполнения, который показан ниже в таблице 3.5 (операторы указаны в порядке убывания приоритета).
Таблица 3.5. Операторы языка VBScript
Арифметические операторы | Операторы сравнения | Логические операторы | |||
Описание | Обозна-чение | Описание | Обозна-чение | Описание | Обозна-чение |
Возведение в степень | ^ | Равенство | = | Логическое отрицание | Not |
Изменение знака | - | Неравенство | <> | Конъюнкция | And |
Умножение | * | Меньше | < | Дизъюнкция | Or |
Деление | / | Больше | > | Исключение | Xor |
Целочисленное деление | \ | Меньше или равно | <= | Логическая эквивалентность | Eqv |
Деление по модулю | Mod | Больше или равно | >= | Логическая импликация | Imp |
Сложение | + | Эквивалентность объектов | Is | ||
Вычитание | - | ||||
Сложение строк (конкатенация) | & |
Когда в одном выражении встречаются операторы умножения и деления или сложения и вычитания, то они выполняются последовательно слева направо. Оператор конкатенации строк (&) неарифметический оператор, но он имеет такой приоритет, что выполняется после всех арифметических операторов и перед операторами сравнения. Оператор Is - оператор сравнения объектов. Этот оператор не сравнивает объекты или их значения, а только проверяет, ссылаются ли две объектные ссылки на один и тот же объект или нет.
Описание таблиц
Таблица представляет собой расположенную на HTML-странице прямоугольную сетку строк и столбцов, в которую можно вводить разнообразную информацию, включая текст, числа, связи и даже изображения. Общий формат описания таблицы следующий:
<TABLE> Контейнер таблицы <CAPTION> Контейнер заголовка таблицы Заголовок таблицы </CAPTION> <TR> Контейнер строки таблицы <TH>Заголовок 1-го столбца</TH> Контейнеры заголовков столбцов <TH>Заголовок 2-го столбца</TH> . . . </TR> <TR> <TD>Первая ячейка</TD> Контейнеры ячеек <TD>Вторая ячейка</TD> . . . </TR> . . . </TABLE>
Все описание таблицы размещается в контейнере TABLE. Чтобы показать в таблице рамку применяют атрибут BORDER тега <TABLE>. Дополнительно задается заголовок таблицы - контейнер CAPTION:
<CAPTIONALIGN=выравнивание>Заголовок таблицы</CAPTION>
где выравнивание принимает значения: TOP - вверху, BOTTOM - внизу.
Таблица определяется по строкам с помощью контейнера TR, в который вложены контейнеры ячеек TD, разделенные по столбцам.
При этом в контейнере ячейки можно помещать не только текст, но и метки для форматирования текста (например, <B> или <I>), списки и даже изображения, а также вложенные таблицы.
<TABLE> <TR> <TD>One <TD><IMGSRC="picture.jpg" ALT=" "> <TD><FONTSIZE=5>W<FONTSIZE=3>Three </TR> </TABLE>
Обратите внимание, что в таблицах допускается смешивать текст и графику. Закрывающие теги </TR> и </TD> можно опускать.
Стандартным выравниваем ячеек таблицы является выравнивание влево ячеек с данными и центрирование ячеек надписей.
Кроме этого, внутри тегов <TD> и <TH> можно осуществлять выравнивание с помощью атрибута ALIGN со значениями: LEFT (влево), RIGHT (вправо) или CENTER (центрировать).
Кроме горизонтального выравнивания в клетках таблиц можно применять и вертикальное выравнивание текста. В этом случае в тегах <TD> и <TH> применяется атрибут VALIGN с выравниванием по верху (TOP), по низу (BOTTOM) и выравниванием по средине (MIDDLE).
Для перекрытия текстом нескольких строк или столбцов внутри тегов <TD> и <TH> используются специальные атрибуты: COLSPAN=m для перекрытия нескольких колонок (где m - число колонок), и ROWSPAN=n для перекрытия нескольких столбцов (где n - число столбцов).
Таблицы служат хорошим инструментом для упорядочения информации на Web-странице.
Определение данных.
SQL позволяет определить структуру поддерживаемых данных и организацию используемых реляционных отношений.
Определение текстовых атрибутов и заголовков
Для придания большей выразительности HTML-страницам применяются следующие теги и их закрывающие пары:
для использования жирного (bold) написания <B> и </B> для использования курсива (italic) <I> и </I> для использования режима (underline) подчеркивания <U> и </U> для использования текста с выделением <EMP> и </EMP> для сильного выделения текста <STRONG> и </STRONG>
В текст HTML-страницы могут быть добавлены заголовки и подзаголовки (с уровнем вложенности до шести). Для этого применяются теги <H1>, <H2>, <H3>, <H4>, <H5>, <H6> с соответствующими закрывающими парами </H1>, </H2>, </H3>, </H4>, </H5>, </H6>.
Организация работы с БД с помощью ASP
Для демонстрации вышеизложенного приведем пример ASP-страницы, которая устанавливает соединение с БД через ODBC, производит выборку и пересылает данные клиентскому броузеру.
<HTML> <BODY> <FONTFACE="MSSANSSERIF" SIZE=2> <FORMACTION="/advworks/ ........ " METHOD=POST> <!-- Установление соединения --> <% Setdb=Server.CreateObject("ADODB.Connection") db.Open "AWTutorial" ' имя БД в ODBC SQLQuery="SELECT * FROMCustomers" SetRScustomerList=db.Execute(SQLQuery) %> <!-- Формирование шапки выходной таблицы --> <TABLEWIDTH=600 BORDER=0> <TR> <TDALIGN=CENTERBGCOLOR="#800000">Название фирмы</TD> <TDALIGN=CENTERBGCOLOR="#800000">Фамилия, Имя</TD> <TDALIGN=CENTERWIDTH=150 BGCOLOR="#800000">Адрес E-mail</TD> <TDALIGN=CENTERBGCOLOR="#800000">Город</TD> <TDALIGN=CENTERBGCOLOR="#800000">Штат/Провинция</TD> </TR> <!-- Формирование строк выходной таблицы--> <% DoWhileNotRScustomerList.EOF %> <TR> <TDBGCOLOR="f7efde" ALIGN=CENTER> <%= RScustomerList("CompanyName")%> </TD> <TDBGCOLOR="f7efde" ALIGN=CENTER> <%= RScustomerList("ContactLastName") & ", " %> <%= RScustomerList("ContactFirstName") %> </TD> <TDBGCOLOR="f7efde" ALIGN=CENTER> <AHREF="mailto:"> <%= RScustomerList("ContactLastName")%> </A>< /TD> <TDBGCOLOR="f7efde" ALIGN=CENTER> <%= RScustomerList("City")%> </TD> <TDBGCOLOR="f7efde" ALIGN=CENTER> <%= RScustomerList("StateOrProvince")%> </TD> </TR> <% RScustomerList.MoveNext Loop %> </TABLE> </BODY> </HTML>
Основные функции Web-серверов
Web была создана для распространения гипертекстовых документов в привлекательном графическом формате, но теперь всеобщей заботой стало расширение ее функциональных возможностей. Пользователи стремятся персонифицировать содержимое страниц. Многие компании хотят, чтобы страницы Web могли извлекать информацию из баз данных и составлять отчеты в задаваемой пользователем форме.
Что собой представляют Web-серверы?
Функции, выполняемые Web-серверами, в сущности очень просты:
прием запроса от Web-броузера по протоколу HTTP с использованием TCP/IP; поиск и отсылка файла гипертекста или документа в броузер по HTTP; обслуживание запросов mailto, ftp, telnet и др.; запуск прикладных программ на Web-сервере с передачей и возвратом параметров обработки через интерфейс CGI; обслуживание навигационных карт изображения imagemap; служит источником загружаемых программ на языке Java; контроль доступа на основе имен и паролей доступа; ведение регистрационного журнала; административное и оперативное управление сервером.
Web-броузеры общаются с Web-серверами через протокол передачи гипертекстовых сообщений (HypertextTransferProtocol, HTTP), простой протокол запросов и ответов для пересылки информации с использованием TCP/IP. Web-сервер получает запрос, находит файл, посылает его броузеру и потом разрывает соединение. Имеющаяся на странице графика обрабатывается точно так же. Затем настает очередь броузера вывести на экран загруженный из сети HTML-документ.
Хотя обычно Web-серверы содержат HTML-страницы и графику, на них могут храниться любые файлы, в том числе текстовые, документы текстовых процессоров, видео- и аудиоинформация. Сегодня, если не считать анкет, заполняемых пользователем, основная часть трафика Web передается в одном направлении - броузеры читают файлы с Web-сервера, - но положение изменится после повсеместного принятия описанного в проекте HTTP 1.1 метода put, позволяющего записывать файлы на Web-сервер. Сегодня метод put используется в основном создателями страниц Web, но в перспективе он может пригодиться и конечным пользователям для обратной связи с информационными узлами.
На Web-сервере выполняются также прикладные программы, наибольшее распространение среди которых получили процессоры поиска и средства связи с базами данных. Для их разработки применяются такие стандарты, как общий шлюзовой интерфейс (CommonGatewayInterface, CGI), языки сценариев, подобные JavaScript, а также полноценные языки программирования, как, например, Java и VisualBasic. Помимо CGI несколько поставщиков Web-серверов разработали интерфейсы прикладного программирования (API) - как, например, NetscapeServerAPI и InternetServerAPI, созданные фирмами Microsoft и ProcessSoftware, - которые позволяют разработчикам непосредственно обращаться к конкретным функциям Web-сервера. Некоторые серверы располагают связующими средствами (middleware) для подключения к базам данных, использование которых может потребовать хороших знаний в программировании.
Базовые процессоры поиска помогают пользователям отсортировывать нужную им информацию, а программы связи с базами данных обеспечивают пользователям Web-броузеров доступ к информации.
Со временем автономные программы Web-серверов могут изжить себя, слившись с операционными системами и другими серверными программами.
Основные информационные ресурсы и потоки
Системы на основе гипертекста позволяют создать информационную инфраструктуру корпорации, объединив различные информационные ресурсы и предоставив к ним единообразный доступ.
В информационную инфраструктуру корпорации могут входить следующие информационные ресурсы:
гипертексты и гипермедиа; офисные документы; графическая информация; архивные файлы; сообщения электронной почты; новости; базы данных; хранилище данных; прикладное программное обеспечение.
Направление и содержание информационных потоков зависит от природы ресурсов, средств их создания, механизмов и прав доступа к информации.
Гипертекст и гипермедиа выполняют роль своеобразного клея, который соединяет различные информационные ресурсы. Гипертекстовая информация не только отображается и служит для навигации, но и поддерживает диалог с пользователем, при необходимости - ввод данных по электронной форме с передачей их на сервер. Пользователь может даже пересылать на сервер произвольные файлы.
Гипертекстовые страницы могут быть сгенерированы динамически с использованием данных из других ресурсов. Гипермедиа является динамической по своей природе, но поток информации, как правило, однонаправленный, связан с воспроизведением аудио, видео и других мультимедиа-файлов. Обратный поток ограничен управлением навигацией и воспроизведением.
Офисные документы представляют собой тексты, электронные документы, планы и т.п., подготовленные пакетами офисной автоматизации или групповой работы. Доступ к этой информации может быть обеспечен либо в режиме чтения (с использованием программ просмотра), либо полный доступ с возможностью редактирования в той среде, где документ был создан. Помимо навигации с помощью гипертекста возможно организовать контекстный поиск документов.
Графическая информация отображается на клиенте в виде статических иллюстраций, анимации или трехмерных сцен виртуальной реальности. Для выполнения навигации с изображением или его частями связывают гиперссылки, кроме того, имеется возможность изменять виртуальные сцены.
Архивные файлы служат основой электронных архивов документов и программ, доступных на серверах FTP и Gopher для распространения. Пользователь может выбрать нужную информацию и получить ее с сервера по запросу. Загрузка файлов возможна и с Web-серверов.
Сообщения электронной почты представляют собой информационный ресурс, хранимый в почтовых ящиках и общих папках. Они образуют двунаправленные потоки, сообщения можно посылать и получать, не выходя из броузера. Однако больше распространен сбор данных с использованием почты. В общих папках обычно организуются дискуссии, часто задаваемые вопросы FAQ, планы встреч и другие групповые работы.
Новости - динамически изменяемый ресурс, организуемый на основе внешних или внутренних (корпоративных) каналов, последние пока не получили широкого распространения. Отображение новостей производится по запросу или в режиме бегущей строки с помощью тикера. Распространение информации осуществляется методом опроса каналов или широковещательной рассылки, нередко необходима "подписка" на требуемые новости.
Базы данных не имеют прямой поддержки в Internet/Intranet. Доступ и ведение БД производится через серверные или клиентские приложения. При этом запросы на поиск и ввод данных оформляются в виде HTML-форм.
Хранилище данных может иметь различную реализацию (реляционная многомерная БД, совокупность ODBC-источников данных), но предназначено для целей оперативной аналитической обработки данных. Доступ к хранилищу организуется подобно доступу к базе данных. Нужно отметить, что аналитическая обработка требует наличия средств для динамического построения и манипулирования плоскими и трехмерными объектами деловой и научной графики.
Программное обеспечение в виде клиентских и серверных приложений составляет важный ресурс. Гипертекст служит средством создания "меню", ссылающегося на разные общие и специальные прикладные программы.
Для ведения перечисленных информационных ресурсов и организации потоков между клиентами и серверами используются различные средства разработки, эксплуатации и сопровождения Internet/Intranet-приложений.
Основные конструкции
На верхнем уровне абстракции в VRML размещаются объекты, которые можно считывать и записывать. Теоретически объекты могут содержать все допустимые в языке сущности: трехмерную геометрию, образы JPEG и т.п. Объекты, используемые для представления трехмерной графики, называются узлами, иерархическая совокупность которых образует граф сцен, каждая из которых является не просто набором узлов, а определяет еще и условия их визуализации путем задания нотации состояния, определяемой ранее созданными узлами сцены.
Все узлы могут иметь имя, тип (Cube, Sphere, Texture, Transformation и т.п.) и поля, задающие характеристики узла, отличающие его от другого узла того же типа (радиус, шаблон, текстуры). Узлы могут образовывать иерархическую совокупность, при которой один узел может содержать несколько потомков, расположенных на более низком уровне. Для определения узла принят следующий синтаксис:
DEF имя_объекта тип { поля потомок}
Следующий пример дает представление о структуре программ на языке VRML и содержит описание простой сцены, состоящей из красного конуса и синей сферы, освещенных прямым светом:
#VRMLV1.0 asciiSeparator { DirectionLight { direction 0 0 - 1 # направление луча света от наблюдателя к сцене } PerspectiveCamera { position - 8.6 2.1 5.6 orientation -0.1352 -0.9831 -0.1233 1.1417 focalDistance 10.84 } Separator { # Красная сфера Material { diffuseColor 1 0 0 # Установка цвета - красный } Translation { translation 3 0 1} Sphere { radius 2.3 } } Separator { # Синий куб Material { diffuseColor 0 0 1 # Установка синего цвета } Transform { translation -2.4 .2 1 rotation 0 1 1 .9} Cube {} } }
Основные понятияJava
Java - это объектно-ориентированный язык программирования. Основной элемент любой программы на Java - класс. Класс состоит из описаний структур данных и процедур работы с этими структурами, которые в терминологии Java называют методами. Программист, пишущий на Java, создает классы. Исполнение программы, написанной на Java, это выполнение последовательности методов различных классов. При этом некоторые методы могут выполняться параллельно друг другу.
Изложение основ объектно-ориентированного программирования не является нашей задачей. На эту тему написаны целые монографии. В продаже имеется огромное число книг о Java, поэтому цель данного раздела только познакомить с тем необходимым минимумом, который позволит понимать принципы разработки Java-программ и области их применения.
Собственно, различают два типа Java-программ: application и applet. Application выполняется локально, а applet передается по сети и исполняется Web-броузером. При этом и application, и applet интерпретируются. В последнее время появились и компиляторы Java. Но большинство производителей пока встраивают JavaVirtualMachine (интерпретатор Java) в свои продукты. Это не ограничивает мобильности кода.
Для понимания работы Java-приложений можно ограничиться только апплетами, для того, чтобы проникнуться языком Java нужно, по крайней мере, прочитать и способы разработки applications.
Собственно, сам Java-код программист набивает в файл, который называется модулем трансляции и имеет расширение java, например, "hello.java". Как уже отмечалось выше Java-код - это описания классов. После трансляции байт-код каждого класса Java-транслятор записывает в отдельный файл с расширением "*.class". При этом имя файла байт-кода класса совпадает с именем класса в модуле трансляции.
Поскольку класс является таким основополагающим элементом программы на Java, то рассмотрим в первую очередь именно его, отступив от традиционной практики описания языка, когда описания начинают с типов констант и типов данных.
Основные приемы работы с броузером
Броузер - это программа, которая применяется для вывода HTML-страницы и взаимодействия с ней.
Приемы работы с броузером рассмотрим на примере работы с броузером NetscapeNavigator. Запустив данный броузер, рассмотрим основные элементы его экрана:
полоса заголовка текущей страницы выводится в верхней строке экрана; полоса выпадающих меню (File, Edit, View, Go, Bookmarks и т.д. ); кнопки инструментальной полоски (квадратные кнопки) предоставляют доступ к основным средствам броузера по методу "наводи и щелкай"; поле Location (Местонахождение) - показывает адрес URL текущего документа (при вводе текста в данное поле метка изменится на Goto - Перейти); кнопки каталогов предоставляют более простой доступ к командам меню Directory (Каталог); область содержимого занимает большую часть экрана броузера и именно в ней появляется тело HTML-страницы (для просмотра больших страниц применяются полосы прокрутки); полоса состояния позволяет узнать текущее состояние броузера и сообщает о ходе его текущей операции.
Броузер NetscapeNavigator выводит гипертекстовые связи подчеркнутым шрифтом, цвет которого отличается от цвета остального текста. Для выбора связи надо щелкнуть на ней кнопкой мыши.
Чтобы посетить конкретную станцию WWW, можно определить ее адрес URL либо вводя адрес внутри поля Location, либо щелкнув на кнопке Open в инструментальной полоске, или открыв меню File из полосы выпадающих меню и выбрав команду OpenLocation.
Для возврата в предыдущий документ надо либо щелкнуть на кнопке Back (Назад) в инструментальной полоске, либо выбрать команду Back из меню Go в полосе выпадающих меню.
Основные возможности броузеров
Несмотря на то, что броузеры относят к разряду "тонких" клиентов, их возможности весьма велики.
Основными функциями броузера являются:
формирование и передача Web-серверу запроса на получение очередной страницы по протоколу HTTP; прием, интерпретация языка HTML и отображение гипертекста; установление связи с другими серверами (файловыми, почтовыми и FTP-серверами); поддержка мультимедиа (графика, аудио, анимация, видео); запрос запуска приложения на сервере, передача и возврат параметров по интерфейсу CGI; интерпретация сценариев JavaScript и/или VBScript; исполнение р-кода загруженной Java-программы; поддержка расширений plug-in и OLE-компонентов ActiveX; вызов вспомогательных helper-программ для отображения загруженного файла.
Основы реляционных БД
Информационное приложение- прикладная программная подсистема, ориентированная на сбор, хранение, поиск и обработку текстовой и/или фактографической информации. Подавляющее большинство информационных приложений работает в режиме диалога с пользователем. В общем случае типовые программные компоненты информационного приложения включают: диалоговый ввод-вывод, логику диалога, прикладную логику обработки данных, логику управления данными, операции манипулирования файлами и/или базами данных. Для сетевых информационных приложений важным элементом является коммуникационный сервис, обеспечивающий взаимодействие узлов сети при совместном решении информационной задачи. Значительная часть возможностей приложения закладывается в системном программном обеспечении, в частности в системах управления базами данных (СУБД), в библиотеках и конструкциях инструментальных средств разработки. Однако остается часть приложения, специфичная для конкретной предметной области. Основными объектами разработки являются логика диалога, логика обработки и логика управления данными. Часто преобладающее значение имеет диалог, пронизывающий все приложение, поэтому многие инструменты ориентированы на то, чтобы упростить и ускорить создание диалога в приложении.
Несмотря на манипуляционный характер процесса разработки, промежуточное представление приложения оформляется в виде языкового описания, что позволяет в дальнейшем с помощью языка программирования начинять быстро разработанный макет содержательной обработкой данных.
Помимо программной составляющей приложения, существенную роль играет информационная составляющая, которая задает структуру, атрибутику и типизацию данных, а также ограничения целостности для баз данных. Информационная составляющая тесно связана с логикой управления данными. Вот почему средства автоматизации проектирования приложений отдают приоритет информационной модели, из которой выводится все остальное, включая диалог.
4.1.1. Файл-серверные приложения и "настольные" СУБД
Архитектура на основе файл- сервера сосредотачивает почти все компоненты приложения на клиенте. Файл-сервер только извлекает данные из файлов и передает по сети, поэтому дополнительные пользователи и приложения добавляют лишь незначительную нагрузку на процессор сервера. Каждый новый клиент добавляет сети вычислительную мощность.
Однако, такая архитектура имеет два основных недостатка:
Значительный сетевой трафик (некоторые запросы к БД могут перекачивать всю БД клиенту, загружая сеть и имея непредсказуемое время реакции). Проблема "жирного клиента" (Windows-интерфейс, коды приложения и СУБД могут перегрузить даже мощный ПК).
Первый недостаток особенно сказывается при организации удаленного доступа к базам данных на файл-сервере через низкоскоростные каналы связи. "Настольные" СУБД, реализующие сервис доступа к данным, работают на клиентском рабочем месте. Поиск, фильтрация и агрегирование данных осуществляется на клиенте.
Основой разработки файл-серверных приложений для локальных сетей ПК является инструментальное окружение различных "персональных" СУБД: FoxPro, Clipper, Paradox, Clarion, dBase, Access и др. Такие инструменты, как правило, реализованы в виде диалоговой интегрированной среды, предоставляющей три уровня доступа:
программирование и создание приложений на языке, сочетающем возможности языка 3GL с некоторыми возможностями языков четвертого поколения 4GL; создание и ведение структуры БД и индексов, а также интерактивная генерация макетного приложения и его компонентов (меню, форм или окон, отчетов, запросов и программных модулей); использование диалоговой среды и генераторов конечными пользователями для создания, ведения и просмотра БД, а также формирования несложных запросов и отчетов.
Диалоговые среды поддерживают как текстовый для DOS, так и графический для Windows интерфейс пользователя. Внедрение графического интерфейса привело к развитию объектных свойств инструментов, средств визуальной генерации программ и событийного механизма приложений.
База данных для этих СУБД представляет собой совокупность файлов данных и файлов индексов, а не единое информационное пространство, что усложняет ее сопровождение. Ни одна из традиционных СУБД для ПК не имеет средств ограничения целостности, не отвечают требованиям сохранности данных, в частности, не поддерживают транзакции, не ведут словарь данных.
Среди инструментальных средств СУБД для ПК преобладают интерпретирующие системы, хотя многие предоставляют и альтернативную возможность создания загрузочных модулей приложений.
Однако СУБД для ПК привлекают простотой использования и доступностью, поэтому файл-серверные приложения еще будут использоваться для рабочих групп.
В настоящее время появились новые визуальные объектно-ориентированные версии инструментальных средств и СУБД на ПК (MSAccess, VisualFoxPro, CA-VisualObjects и VisualdBase). Эти продукты направлены сугубо на создание Windows-приложений и содержат средства объектно-ориентированного диалога, событийно-управляемого программирования, визуального конструирования интерфейса пользователя и многие другие черты, присущие системам программирования 4GL и средствам быстрой разработки RAD. Кроме того, они поддерживают структурный язык запросов SQL, который характерен для приложений клиент-сервер.
Основы технологии Internet/Intranet
Мир Internet весьма разнообразен, мозаичен по своей структуре, включает много составляющих, каждая из которых имеет специфику применения. Разработчику приложений прежде всего необходимо разобраться в сопутствующей терминологии, уяснить принципы организации и основные элементы WWW, понять особенности корпоративных Intranet-сетей, а также преимущества и недостатки технологии Internet/Intranet.
1.1.1. Сети Internet и WWW
Internet в настоящее время является самым большим и популярным межсетевым объединением в мире. Оно объединяет десятки тысяч компьютерных сетей и миллионы пользователей во всем мире. При этом объединены компьютеры тысяч различных типов, оснащенных самым разным программным обеспечением. Пользователи Internet могут не обращать внимания на все эти различия.
В настоящее время существуют два созвучных термина - internet и Internet. Термин internet относится к технологии обмена данными, основанной на использовании семейства протоколов TCP/IP, а Internet - это глобальное сообщество мировых сетей, которые используют internet для обмена данными. Как правило, термин "TCP/IP" это то же самое, что и "набор протоколов TCP/IP", или "набор протоколов internet", или "технология internet".
Сеть Internet с самого начала не была централизованной и состояла из отдельных сегментов. Каждый узел сети независим от остальных узлов и может самостоятельно отвечать за прием и передачу сообщений. В основу информационного обмена положен принцип коммутации пакетов. Любое информационное сообщение делится на части, которые называются пакетами. Пакеты передаются по сети и собираются в сообщение в узле-получателе.
1.1.2. Принципы организации WWW
В марте 1989 года Тим Бернерс-Ли предложил руководству исследовательского центра CERN концепцию новой распределенной информационной системы, которую он назвал WorldWideWeb. Тим Бернерс-Ли считал, что информационная система, построенная на принципах гипертекста, должна объединить все множество информационных ресурсов CERN, которое состояло из базы данных отчетов, компьютерной документации, списков почтовых адресов, наборов данных экспериментов, информационной реферативной системы и т.п. Основная метафора гипертекста - это "электронная книга" с автоматически поддерживаемыми переходами по ссылкам. Гипертекстовая технология должна была позволить легко переходить с одного документа на другой с помощью гипертекстовых ссылок.
Проект был успешно реализован, в частности, к 1991 году был создан первый броузер (программа просмотра гипертекста), получивший название "www" и работавший в режиме командной строки. С этого момента основными элементами технологии WWW являются:
язык гипертекстовой разметки документов HTML; универсальный способ адресации ресурсов в сети (URI и URL); протокол обмена гипертекстовой информацией HTTP; универсальный интерфейс шлюзов CGI, добавленный позже сотрудниками Национального Центра Суперкомпьютерных приложений (NSCA).
Язык гипертекстовой разметки HTML был создан на опыте использования редактора TeX и стандартного языка разметки SGML. Основная идея гипертекста заключается в присутствии внутри ASCII-текста форматирующих полей и ссылок как на части внутри документа, так и на другие документы. Поля и ссылки также являются фрагментами ASCII-текста, но, подобно программе, следуют строгим синтаксическим правилам. Благодаря этому, пользователь имеет возможность просматривать документы в том порядке, какой ему больше нравится, а не последовательно, как при чтении книг. Help-файлы, с которыми сталкивался любой пользователь ЭВМ, дают хорошее представление о гипертекстовой организации информации, позволяющей пользователю переходить от темы к теме, используя выделенные слова или поля текста.
Чтобы получить файл из Internet, броузер (browser, программа для просмотра Web, клиент) должен знать, где находится файл и как общаться с компьютером, на котором этот файл находится. Поэтому требуется, чтобы программа-клиент WWW передала имя определенного файла, его местоположение в Internet (адрес хоста) и метод доступа (обычно протокол типа HTTP или FTP). Комбинация этих элементов формирует универсальный идентификатор ресурса (UniversalResourceIdentifier, URI). URI определяет способ записи адресов различных информационных ресурсов. В основу URI были заложены идеи расширяемости, полноты и читаемости. Реализация URI для WWW называется URL (UniversalResourceLocator).
Общий формат ссылки URL:
протокол://узел/путь/файл[#метка]
протокол (или метод доступа) определяет способ взаимодействия с информационным ресурсом;
узел - имя или IP-адрес узла (сервера определенного типа), где расположена информация;
путь - имя каталога (возможно виртуального) или цепочки вложенных каталогов Web-сервера или файловой системы;
файл - простое имя файла с расширением, содержащее гипертекст, графический образ, прикладную программу или другую информацию;
метка- имя закладки в гипертекстовом файле, позволяет осуществлять внутренние переходы к разным фрагментам одного документа.
Вот некоторые примеры URL:
http://www.citmgu.ru/glossary.htm#P http://citnt/text/docs/intro.htm http://190.248.27.124/scripts/proc1.exe
В первом случае вызывается фрагмент HTML-файла с указанием доменного имени Web-сервера. Во втором примере используется простое имя узла. Третий пример содержит вызов процедуры при помощи IP-адреса Web-сервера.
Ссылки URL могут быть относительными. Например, из документа http://citnt/text/docs/intro.htm и для сервера citnt допустимы следующие обращения:
books/book1.doc /images/pic24.gif http://citnt/text/ http://citnt/
Первая ссылка выполняется относительно текущего каталога, вторая - по отношению к корню Web-сервера. Последние две ссылки правильнее называть неполными. При этом в указанных каталогах отыскивается стандартный индексный файл index.html (index.htm) или default.htm. В некоторых броузерах при отсутствии такого файла на экран выдается оглавление каталога.
При записи всегда используется нотация Unix (слэши, а не обратные слэши), для локальных дисков - идентификатору диска предшествует слэш, а вместо двоеточия ставится вертикальная черта, например: file:///C intranet/lab1/test1.htm
Глобальная сеть Internet, объединяющая гигантские информационные ресурсы, оставалась бы колоссальным банком данных, малоизвестных и потому малодоступных. Конечно, начальная страница по интересующей тематике и дальнейшие гипертекстовые ссылки рано или поздно выведут на необходимую информацию, но как найти нужные страницы среди сотен миллионов, даже если известно, что интересующая информация организована в гипертекстовые ссылки. Мощные поисковые службы Yahoo, Lycos и AltaVista обеспечивают быстрый поиск и доступ практически ко всей информации, находящейся в Internet.
Поисковый робот AltaVista пробегает Всемирную паутину со скоростью 2.5 млн. страниц в день и уже нашел и проиндексировал больше информации, чем любой другой программный робот или поисковая служба. Конечной целью является обнаружение всех страниц и индексация каждого слова в текстовом массиве Web. Когда эта работа будет завершена, пользователи впервые получат возможность точно установить, сколько ссылок на их титульные страницы содержится на других страницах всемирной паутины.
1.1.3. Корпоративные Intranet-сети
Применение internet- и WWW-технологий в корпоративной сети, изолированной от Internet, называется Intranet-технологией. Intranet-сети, получающие все более широкое распространение, состоят из внутрикорпоративных Web-серверов, доступ персонала к которым организован через ЛВС или глобальные сети.
Как правило, информация внутри отдельной организации распределена по множеству компьютеров и хранится в виде разнообразных файлов, отчетов и сообщений электронной почты. Как правило, способ доступа ко всей информации не организован. Поэтому многие организации создают intranet-сети с внутренними Web-серверами, чтобы облегчить своим сотрудникам доступ к разнообразной информации. Благодаря связям с корпоративными базами данных, файл-серверами и хранилищами документов Web-серверы предоставляют сотрудникам компании самые различные виды информации через единый интерфейс - хорошо знакомый Web-броузер. Несколько начальных страниц служат гипертекстовыми связями со всеми видами документов и данных.
При работе в корпоративной сети прежде всего необходимо знать имя файла, содержащего необходимую информацию. Для опытных в обращении с компьютерами сотрудников поиск и совместное использование файлов в сети становится чем-то вроде второй профессии, но даже для них задача оказывается трудновыполнимой, если кто-то переименует файл, изменит его содержимое или переместит в другое место. Для неискушенных же пользователей попытки найти такую "потерянную" информацию вызывают раздражение и чаще всего оканчиваются неудачей.
Что бы их устроило на самом деле - это страничка текста на экране, описывающая, что делается в системе, и подсказывающая в процессе перемещения из одного пункта сети в другой местонахождение и содержимое файлов. Именно такой текстовый путеводитель, показывающий, как организованы данные, и предоставляет intranet-приложение. Если на экране появилась ссылка на интересующий информационный объект, чтобы добраться до него, достаточно щелкнуть кнопкой мыши.
"Меня убедил опыт собственной компании, - говорит Билл Гейтс. - В Microsoft мы опубликовали в своей сети intranet тысячи документов для использования внутри корпорации. Я с удивлением обнаружил, что с вводом у нас сети intranet число обращений к данным возросло в несколько раз (прим.: по данным другой статьи - в 3 раза). Это весьма примечательный факт, если учесть, что и раньше ко многим из таких файлов добраться было нетрудно, а пользующиеся ими сотрудники неплохо владеют компьютером и весьма заинтересованы в изучении хранящейся в них информации". Это свидетельство особенно показательно, так как именно Microsoft выпускает и рекламирует пакет коллективной работы Exchange как средство публикации общедоступной информации через систему папок.
С точки зрения менеджера, по мнению Билла Гейтса, наиболее привлекательным моментом концепции intranet является то, что для ее организации не требуется затрачивать больших усилий или вкладывать значительные денежные средства. Предприятия, обладающие связанными в IP-сеть компьютерами, практически подготовлены к ее внедрению. Единственное, на что следует потратиться, это нанять специалиста, который составит описательные гипертекстовые страницы и разработает систему ссылок.
Чтобы облегчить поиск информации по ключевым словам, не вынесенным в гипертекстовые ссылки, фирма DigitalEquipment выпустила версию программы AltaVista для персональных компьютеров, что позволяет применять этот мощный и эффективный поисковый механизм в Intranet.
1.1.4. Преимущества и недостатки Internet/Intranet-технологии
Достоинства и недостатки Intranet-технологии проистекают из особенностей, заложенных при создании WWW-технологий:
использование гипертекста обеспечивает связность разнородной информации; броузер (клиентская программа WWW-сервера) предоставляет единый, более простой интерфейс пользователя; унаследованные преимущества и недостатки архитектуры клиент-сервер приводят к сходным проблемам, возникающим при использовании баз данных.
Особенности серверных сценариев
Как было сказано выше, скриптовый фрагмент в HTML-странице выделяется контейнером <SCRIPT>. В предыдущем примере программа на VBScript будет выполняться на клиенте (т.е. на машине пользователя). Но существует возможность выполнения скрипта на сервере. Для этого нужный скрипт необходимо заключить в пару тегов <% и %>. Таким образом, с помощью тегов <% и %> можно разделять скриптовую программу на фрагменты, выполняемые на сервере и на клиенте, например:
<SCRIPTLANGUAGE = "VBScript"> ' скриптовый фрагмент, выполняемый на клиенте <% ' скриптовый фрагмент, выполняемый на сервере %> ... </SCRIPT>
Если во фрагменте скрипта, выполняемого на сервере, необходимо послать какое-то значение клиентскому броузеру (значение переменной, результат выполнения функции и т.п.), то для этого в дополнение к обычной операции присваивания используется символ "=", например:
<HTML> <HEAD><TITLE>NowDemo</TITLE></HEAD> <BODYBGCOLOR=BLUE> <BR> <PALIGN=CENTER> <FONTSIZE=5 COLOR=YELLOW> Добро пожаловать на наш сервер. Локальное время: <B><% =Now %></B> </FONT> </P> <HR> </BODY> </HTML>
Здесь функция Now используется для отправки информации о дате и времени клиентскому броузеру. В целом программы, создаваемые для выполнения на сервере, работают по тем же правилам, что и скриптовые программы на клиенте.
Открытый протокол ODBC для связи с сервером БД
Интерфейс прикладного программирования ODBCAPI предоставляет общие методы доступа SQL как к реляционным, так и к нереляционным (ISAM) источникам данных.
В ANSISQL входит интерфейс на уровне вызовов (CLI - call-levelinterface), который используется ODBC для обеспечения доступа и работы с данными во многих системах управления базами данных. Интерфейс CLI соответствует требованиям, установленным в 1991 году группой SQLAccessGroup, которые определяют общий синтаксис SQL и интерфейса API. Иметь общий метод доступа к источникам данных удобно потому, что тогда база данных на сервере становится прозрачной для приложений, которые написаны в соответствии с некоторым заданным уровнем совместимости ODBC.
Интерфейс ODBCAPI реализован как набор расслоенных DLL-функций для Windows. Динамическая библиотека ODBC.DLL - это основная библиотека управления драйверами ODBC, которая вызывает специализированные драйверы для разных поддерживаемых системой баз данных. Каждый драйвер совместим со своим уровнем CLI и относится к одной из двух категорий: одноуровневые или многоуровневые драйверы.
Одноуровневые драйверы предназначены для использования при работе с теми источниками данных, которые не могут быть обработаны ANSISQL. Обычно это локальные базы данных на персональных компьютерах, такие как dBase, Paradox, FoxPro и Excel. Драйверы, соответствующие этим базам данных, переводят грамматику ANSISQL в инструкции низкого уровня, которые непосредственно обрабатывают составляющие базу данных файлы.
Многоуровневые драйверы используют сервер СУРБД для обработки SQL-предложений и предназначены для работы в среде клиент-сервер. Помимо обработки ANSISQL, они также могут поддерживать и собственную грамматику конкретной СУРБД, поскольку ODBC может без трансляции передавать SQL-предложения источникам данных (механизм "passthrough"). Драйверы ODBC для баз данных типа клиент-сервер реализованы для OracleV6.0 и Oracle7, а также Informix, Microsoft и SybaseSQLServer, Rdb, DB2, Ingres, HP/Image и AnySQL. Драйверы можно приобрести в фирмах Microsoft, Intersolv, Visigenic и Openlink, причем только Microsoft и Intersolv выпускают и 32-х, и 16-ти разрядные драйверы.
Существует 4 важных этапа (шага) процедуры запроса данных через API.
Шаг 1 - установление соединения. Он состоит в размещении указателей (handle) среды ODBC, которые выделяют оперативную память под ODBC драйверы и библиотеки. Затем происходит выделение памяти для указателей соединения, и соединение устанавливается.
Шаг 2 - выполнение предложения SQL. Выделяется указатель предложения, локальные переменные связываются со столбцами в SQL-выражении (это необязательное действие), и выражение представляется на разбор главному ODBC драйверу для обработки.
Шаг 3 - извлечение данных. Перед извлечением данных возвращается информация о результирующем наборе, такая как число столбцов в наборе. Исходя из этого числа, результирующий набор помещается в буфер записей, выполняется цикл по нему и извлекается по одному столбцу в локальные переменные. Этот шаг необязателен, если используется связывание столбцов.
Шаг 4 - освобождение ресурсов. После того, как данные получены, освобождаются ресурсы вызовом функций освобождения указателей предложения, соединения и среды. Указатели предложения и соединения могут быть использованы в процессе обработки.
Технология ODBC разрабатывалась как общий, независимый от источников данных, способ доступа к данным. Также ее применение должно было обеспечить переносимость приложений на различные базы данных без переработки самих приложений. В этом смысле технология ODBC уже стала промышленным стандартом, ее поддерживают практически все производители СУБД и средств разработки.
Однако универсальность стоит дорого. Если при разработке приложений одним из основных критериев является переносимость на различные СУБД, то использование ODBC является оправданным. Для увеличения производительности и эффективности приложения активно применяют специфические для данной СУБД расширения языка SQL, используют хранимые на сервере процедуры и функции. В этом случае теряется роль ODBC как общего метода доступа к данным. Тем более, что для разных СУБД драйверы ODBC поддерживают разные уровни совместимости. Поэтому многие производители средств разработки помимо поддержки ODBC поставляют "прямые" драйверы к основным СУБД.
Пакеты и интерфейсы. Формат модуля трансляции Java
Программист пишет исходные тексты Java-программ (application и applet) в исходных файлах, которые мы назвали модулями трансляции. При этом в одном таком модуле может быть определено множество разных классов. После трансляции, для каждого из них будет создан свой байт-код, который будет помещен в отдельный файл. Если мы пишем applet, то при его тестировании скорее всего на этапе выполнения появится ошибка о том, что некоторый класс исполняющей системой не обнаружен. Данная проблема решается либо путем размещения всех классов в стандартном месте, либо объединением их в пакеты. Пакеты - это своеобразные библиотеки Java-кода. При этом программы из разных пакетов могут называться одинаково. Пакеты иерархически подчинены и явным образом включаются в текст программы на Java.
Общая форма исходного файла Java выглядит следующим образом:
packagepack0[.pack1[.pack2]] importpack0[.pack1[.pack2]] ... importpack0[.pack1[.pack2]] publicclassclass_nameextandsclass_name { // classbody } privateclassclass_name { // classbody } ... privateclassclass_name { // classbody }
Как видно из этого примера файл может начинаться оператором packаge, который определяет принадлежность класса некоторому пакету. За оператором package следуют операторы import, которые в явном виде указывают на импортируемые описания классов из других пакетов. Затем может быть определен только один публичный класс, за которым можно определить любое количество приватных классов. Вообще говоря, Java позволяет защищать данные классов от доступа. Для этой цели используется три модификатора private, public и protected.
Public определяет, что объекты данного класса пакета доступны для всех прочих классов. Это самый высокий уровень доступности. Если указан модификатор private, то доступ к переменным и методам класса разрешен только из объектов данного класса. Если используется модификатор protected, то здесь наблюдается совместимость сверху вниз, т.е. к переменным и методам можно обращаться как из объектов, являющихся реализациями подклассов, так и из объектов классов и их подклассов, принадлежащих тому же пакету. Строгое подчинение определяется в том случае, когда protected и private используются совместно. Существует и доступность по умолчанию, в которой подклассам данного класса из других пакетов в доступе к элементам класса отказано.
Вообще говоря, все эти ограничения следует использовать не столько для ограничения доступности, сколько для определения области видимости и действенности переменных. В частности, Вирт критикует само понятие безопасности, связанное с модификаторами защищенности, поскольку с его точки зрения, это только сбивает с толку. Ограничения используются в том смысле, что они повышают устойчивость программы от ошибок, связанных с областями действия переменных и методов, а не со взломами операционных систем или чем-либо подобным. Однако, более подробно на разграничениях доступа останавливаться не будем и перейдем к другому важному элементу Java - интерфейсам.
Интерфейс - это спецификация обмена данными между классами. Фактически они представляют из себя просто список объявлений методов. С интерфейсом разработчики апплетов встречаются сразу же как только захотят написать многопоточный applet. А это необходимо, например, для создания бегущей строки.
Оператор interface имеет вид:
interfaceinterface_name { typemethod_name (parms_list); typefinal_variable = value; }
При вызове метода, определенного в интерфейсе, класс должен быть объявлен с оператором implements. Например, бегущая строка "Hello, Java" реализована с применением данного оператора.
importjava.applet.*; importjava.awt.*; publicclasshelloextendsAppletimplementsRunnable { intx = 0; inty = 0; intstart_x = 0; intstart_y = 0; Threadnew_thread = null; Stringmessage = "Hellobody!!!"; publicvoidinit () { y = size ().height; x = size ().width; start_x = x; start_y = y; } publicvoidstart () { new_thread = newThread (this); new_thread.start (); } publicvoidrun () { while (true) { repaint (); x -= 10; if (x<0) { x=start_x; } try { Thread.sleep (100); } catch (InterruptedExceptione) { } } } publicvoidpaint (Graphicsg) { Fontnew_font = newFont ("TimesRoman",1,48); g.setFont (new_font); g.drawString ("Hello, Java.",x,y/2); } }
В приведенном примере программа, в данном случае applet, расширяет класс Applet и применяет интерфейс Runnable для того, чтобы реализовать метод run.
При трансляции программ и сборки их в пакеты следует помнить, здесь разработчик встречается с особенностями реализации средств разработки Java для различных платформ. Названия иерархий в пакетах Java должны совпадать с директориями и поддиректориями, в которых эти пакеты размещаются, при этом корень определяется переменной окружения CLASSPATH. Часто наиболее распространенным значением этой переменной является:
CLASSPATH=".;C:\your_path;C:\java\classes;\C:\java\classes\classes.zip"
Заархивированный файл в пути не должен смущать, т.к. JavaDevelopmentKit умеет работать с такими файлами.
Передача данных по сети
Если не передавать данные по сети, апплеты остаются не более как игрушкой для оживления страниц и засорения сети. Поэтому ключевым классом Java является класс net и его подклассы. Реально существует два способа получения данных по сети: использование URL и использование sockets.
Разберем последний как наиболее общий. В этом случае пользователь имеет возможность обращаться непосредственно к транспортному уровню TCP/IP и при этом выбирать транспорт. В приведенном ниже примере используется транспорт TCP.
Пример получения данных по сети:
importjava.io.*; importjava.net.*; importjava.applet.*; importjava.awt.*;
publicclasss_readextendsApplet { Sockets; //Socketforconnection DataInputStreamdis; // Readdatafromthisstream DataOutputStreamdos; // Writedatatothisstream intMAXLENGTH = 4048; StringBuffersb = newStringBuffer(); intc;
publicvoidinit() { try { s = newSocket(getParameter("host"),80); dis = newDataInputStream(s.getInputStream()); dos = newDataOutputStream(s.getOutputStream());
dos.writeBytes("GET "+getParameter("path")+" HTTP/1.0\r\n\r\n");
while((c=dis.read())!=-1) { sb.append((char) c); } s.close(); } catch(IOExceptione) { System.out.println("Problemwithsocket."); } add("Center",newTextArea(sb.toString())); } }
При изучении этого примера стоит обратить внимание на то, что для классов ввода/вывода нет абсолютно никакого различия между сетью и другими объектами, например, файлами.
В примере создаются TCP-sockets, определяется адрес и номер порта, а затем инициализируется и производится обмен информацией по протоколу HTTP.
При реализации обмена данными необходимо в обязательном порядке перехватить исключение, которое может порождаться при работе с потоками ввода/вывода.
Перекрытие текстом строк и столбцов
Для перекрытия текстом нескольких строк или столбцов внутри тегов <TD> и <TH> используются специальные атрибуты: COLSPAN=m для перекрытия нескольких колонок (где m - число колонок), и ROWSPAN=n для перекрытия нескольких столбцов (где n - число столбцов).
<TDCOLSPAN=2>Перекрытие двух колонок(столбцов)</TD> <TDROWSPAN=3>Перекрытие трех строк</TD>
Перекрыть можно и надпись столбца. Вот как это делается:
<THROWSPAN=2>Перекрытие надписи столбца</TH>
Переменные и константы
Переменная - это обычный идентификатор, позволяющий обращаться к отдельным участкам памяти, хранящим информацию, которая может изменяться в процессе выполнения сценария. Для объявления переменных в VBScript используется оператор Dim. Несколько переменных можно объявить путем перечисления их через запятую, например:
<SCRIPTLANGUAGE="VBScript"> DimTop, Bottom, Left, Right </SCRIPT>
Также можно косвенно объявить переменную путем простого использования ее имени в любом месте скрипта. Но этим способом не нужно злоупотреблять, поскольку при использовании имени переменной могут возникать орфографические ошибки, что может явиться причиной неожиданных результатов выполнения программы на VBScript. Поэтому рекомендуется использовать оператор OptionExplicit для объявления всех переменных и констант программы. При использовании оператора OptionExplicit он должен быть первым оператором в контейнере <SCRIPT>.
В VBScript существуют ограничения на количество используемых переменных:
в каждой процедуре не может использоваться более 127 переменных (массив считается как одна переменная); в каждой программе не может быть более 127 переменных, действующих на уровне модуля.
Таблица 3.4. Подтипы данных Variant
Подтип | Описание |
Empty | Переменная пуста. В качестве значения может быть 0 для числовой переменной или строка нулевой длины ("") для текстовой переменной. |
Null | Переменная не содержит никакого значения. |
Boolean | Значение может быть либо True, либо False. |
Byte | Целое число в диапазоне от 0 до 255. |
Integer | Целое число в диапазоне от -32,768 до 32,767. |
Long | Целое число в диапазоне от -2,147,483,648 до 2,147,483,647 |
Single | Число с плавающей запятой обычной точности в диапазоне от -1.79769313486232E308 до -4.94065645841247E-324 для отрицательных значений и от 4.94065645841247E-324 до 1.79769313486232E308 для положительных значений. |
Double | Число с плавающей запятой двойной точности в диапазоне от -1.79769313486232E308 до 4.94065645841247E-324 для отрицательных значений и от 4.94065645841247E-324 до 1.79769313486232E308 для положительных значений. |
Date (Time) | Определяет число, характеризующее дату от 1 января 1000 г. до 31 декабря 99999. |
String | определяет строку переменной длины, достигающей до 2 миллиардов символов. |
Object | Определяет объект. |
Error | Определяет номер ошибки. |
Когда переменная объявляется внутри какой- либо процедуры, то использовать эту переменную и изменять ее значения можно только внутри данной процедуры. Такие переменные называются локальные. При необходимости использовать переменную в нескольких процедурах одного скрипта, ее необходимо объявить за пределами процедур. Такие переменные называются действующими на уровне модуля. Таким образом, область действия переменной определяется местом ее объявления в скрипте.
Время существования переменной называется временем жизни. Для переменных, действующих на уровне модуля, время жизни определяется от момента объявления переменной до конца выполнения скрипта. Время жизни локальной переменной начинается, когда в процедуре встречается ее объявление, и заканчивается при завершении процедуры. Локальная переменная является отличным временным хранилищем информации на время выполнения процедуры. В различных процедурах возможно использовать локальные переменные с одинаковыми именами, поскольку они могут использоваться только теми процедурами, в которых объявлены.
Присвоение значения переменной производится обычным образом: в левой части равенства указывается имя переменной, а в правой части - то значение, которое нужно присвоить переменной.
Существует два типа переменных: скаляр - это переменная, которая может одновременно содержать только одно значение. Другой тип переменных позволяет присваивать множество родственных значений. Такой тип называется массивом. Переменная типа массив объявляется несколько иначе, чем переменная типа скаляр. Различие заключается в том, что после имени переменной в скобках указывается номер последнего элемента массива, например, в следующем примере одномерный массив содержит 11 элементов (первый элемент массива всегда имеет номер 0):
<SCRIPTLANGUAGE="VBScript"> DimA(10) </SCRIPT>
Такой массив является с фиксированным количеством элементов. Для обращения к элементам массива используется номер элемента, указывающийся в скобках после имени массива. Массивы могут быть не только одномерными. Для объявления многомерного массива нужно в скобках через запятую перечислить количество элементов каждой размерности. Например, при объявлении двумерного массива первым указывается количество строк, а затем количество столбцов. Кроме массива с фиксированным количеством элементов, можно объявить массив, размер которого может изменяться во время выполнения сценария. Такой массив объявляется как обычный массив, используя оператор Dim, или оператор ReDim (используется для объявления массивов с переменным количеством элементов). Отличие заключается в том, что в скобках после имени массива не указывается число элементов массива, например:
<SCRIPTLANGUAGE="VBScript"> DimMyArray() ReDimAnotherArray() </SCRIPT>
Для использования такого массива позже необходимо использовать оператор ReDim для определения числа размерностей и размер каждой из них. В следующем примере оператор ReDim устанавливает размер массива 25. Далее оператор ReDim устанавливает размер этого же массива 30. Специальный ключ Preserve используется для сохранения значений элементов массива, которые были определены ранее. Если этот ключ не использовать, то при изменении размерности массива значения всех элементов стираются.
<SCRIPTLANGUAGE="VBScript"> ReDimMyArray(25) . . . ReDimPreserveMyArray(30) </SCRIPT>
Изменять размерность массива можно сколько угодно раз, но нужно помнить, что при уменьшении размерности массива все данные теряются.
Константа - это значащий идентификатор, который содержит число или строку. Значение константы во время выполнения скрипта изменяться не может. На данный момент в VBScript нет встроенных констант, определенных языком. Константа объявляется так же как и переменная с помощью оператора Dim. После объявления константы ей нужно присвоить значение, которое потом будет соответствовать имени константы.
Отметим, что текстовые значения обрамляются кавычками, а значения типа Дата/Время - знаком "решетка" (#). К сожалению, нет никакого различия при объявлении переменных и констант. Поэтому может возникнуть желание как-то различать их, для того чтобы не попытаться использовать константу как переменную. В этом случае можно предложить при определении имени константы давать ей какую-нибудь приставку, например vb, или можно называть константы строчными буквами, как это рекомендуется в соглашениях по именованию.
PERL
Объектно-ориентированный язык PERL (PracticalExtractionandReportLanguage) является переносимым, интерпретируемым языком, хорошо приспособленным для фильтрации и преобразования текста. Интерпретаторы PERL являются бесплатными программными продуктами. PERL находит широкое распространение в Internet в среде UNIX. Предшественники PERL - редактор sed и утилита awk. Язык в определенной части похож на С, но имеет и существенную специфику.
Язык PERL представляет программисту широкий спектр возможностей:
ассоциативные массивы; автоматическое преобразование типов; автоматическое изменение размера массивов; поддержка регулярных выражений для разбора текста; файловый ввод/вывод; форматированный вывод с генерацией отчетов на основе шаблонов; функции обработки списковых структур данных; сетевые операции по сокетам.
Основное назначение PERL в Internet связано с разработкой серверных приложений на основе CGI.
Поддержка различных кодировок кириллицы
Исторически сложилось так, что каждое семейство операционных систем имеет свою кодировку для русских букв. Применяются кодировки koi8-r, описанная в документе RFC-1489, Windowscp1251, MS-DOSx-cp866, а также кодировка ISO-8859-x.
Поэтому на титульных страницах большинства русскоязычных Web-серверов можно встретить предложение выбрать подходящую кодировку - для MS-DOS, для Windows, для Macintosh, и, наконец, для UNIX. Таким образом, сотрудники информационной службы Web-сервера должны готовить тождественные материалы в 4 кодировках, загромождая Web-сервер.
MicrosoftInternetExplorer работает в кодировке Windows, а NetscapeNavigator понимает koi8?r, Windowscp1251, ISO-8859-5. (Нужно выбрать в меню режим Options функцию DocumentEncoding и нужную кодировку, повторно загрузить страницу.) При использовании серверных API перекодировка может выполняться на лету, но этот путь мало изведан.
Неоднократно появлялись предложения разделить кодировки на сетевую и локальную. В качестве сетевой в Internet было бы естественно выбрать koi8-r, наиболее распространенную кодировку в различных версиях операционных систем типа UNIX, а для Intranet - кодировку Windowscp1251. Переход к локальной кодировке и обратно к сетевой должен выполняться клиентским приложением. К сожалению, разработчики броузеров пока не прислушиваются к этим предложениям, возможно, из-за того, что сами не сталкиваются с неудобствами использования четырех кодировок для одного языка.
С помощью API для Web-серверов возможно создать серверные программы перекодировки "на лету".
Подход от Netscape: LiveWire
LiveWire - это среда разработчика для управления Web-узлом и создания приложений клиент-сервер. В ней используется язык JavaScript для изготовления серверных приложений, аналогичных CGI-программам. Однако приложения LiveWire, в отличие от CGI, тесно связаны cHTML-страницей, под управлением которой они работают. Обычный HTML статичен. Фиксированное содержание передается с сервера броузеру. При помощи LiveWire можно создавать динамические HTML-страницы, изменяющиеся в зависимости от изменившихся данных или действий пользователя.
Процесс создания LiveWire-приложения достаточно прост:
программа содержится в одном или более файлах. Используется JavaScript встроенный в HTML или чистый JavaScript; файлы программы компилируются LiveWire компилятором и создается байт-код (файл с расширением .web); приложение инсталлируется при помощи LiveWireApplicationManager на сервере; при вызове из броузера LiveWire выполняет программу и создает динамическую HTML-страницу; при помощи библиотеки объектов LiveWire можно создавать серверные приложения с богатым набором возможностей: от поддержки контроля пользователей и управления сессиями, до создания сложных обращений к базам данных.
Поля
Различают два типа полей: содержащие единственное значение (одно число, вектор или картинка) и поля с множеством значений. Первые имеют имена, начинающиеся с префикса "SF", а вторые - с префикса "MF".
Поле типа SFBools содержит булевы значения (True или False), а значения цвета задаются полем SFColors в нотации тройки RGB вещественных чисел от 0.0 до 1.0, как и в промышленном стандарте OpenGL, что позволяет указывать теоретически бесконечное число цветовых оттенков. Поле типа SFImages содержит неупакованное изображение плоской цветной картинки, задаваемое габаритами: "width", "height" и количеством пикселей. Возможно также однокомпонентное задание интенсивности освещенности картинки, например: 0xFF - это полная освещенность, а 0x00 - полная темнота. При двухкомпонентном задании указывается значение интенсивности и значение прозрачности. Для трех- и четырехкомпонентного задания указываются интенсивности по шкале RGB отдельно по каждому цвету. Например, запись
1 2 1 0xFF 0xFF
определяет черно-белую картинку шириной в один пиксель и высотой в два пикселя, нижний из которых белого цвета, а верхний черный.
Поля SFMatrices задают матрицу преобразований, состоящую из 16 вещественных чисел, расположенных построчно, например, матрица сдвига вдоль оси X на 7.3 единиц будет иметь следующий вид: 1 0 0 0 0 1 0 0 0 0 1 0 7.3 0 0 1
В стандарте предусмотрены также поля, задающие поворот вокруг одной из осей. Например, чтобы повернуть сцену вокруг оси Y на 180 градусов, необходимо указать: 0 1 0 3.14159265
Множественные поля содержат более одного значения, заключенных в скобки, например, поле MFColors определяет сразу несколько цветовых оттенков - красный, зеленый и синий - через триплеты RGB: [ 1.0 0.0 0.0, 0 1 0, 0 0 1]
Поля с префиксом "MF" используются также для задания векторных значений, например, MFVec2fs - вектор на плоскости, а MFVec3fs - вектор в трехмерном пространстве.
Понятие Класса
Классы в Java, равно как и в других объектно-ориентированных языках программирования, - это шаблоны (прототипы), которые используются для создания объектов. Собственно, при исполнении программ интерпретатор Java - JavaVirtualMachine имеет дело именно с объектами. Объекты еще часто называют представителями класса и экземплярами класса. В данном контексте это одно и тоже. В качестве аналогии для описания различий между классами и объектами можно сослаться на реляционные базы данных. Отношение, точнее его структура (описание структуры) - это класс, а записи данных в этом отношении - это объекты.
Класс состоит из описаний переменных и методов (процедур) работы с этими переменными. Соответственно объект будет состоять из места отведенного под эти переменные и процедуры. Выполнение программы будет сводиться к выполнению процедур разных объектов.
Формально описание класса в Java можно представить в виде:
classclass_nameextendssuper_class_name { typevariable_1; typevariable_2; .... typemethod1 ( parms_list) { // method1 body } typemethod2 (parms_list) { //method2 body } .... }
Слово class дает понять компилятору, что начинается описание класса, а слово extends позволяет указать на суперкласс, которому наследует данный класс.
Наследование в данном случае подразумевает, что новый класс просто расширяет свойства суперкласса (набор его переменных и методов). Новый класс имеет возможность оперировать переменными и методами суперкласса как своими собственными, плюс к своим собственным, которые определены в его описании.
Среди всех методов, которые определяются для класса, следует выделить методы-конструкторы. Эти методы используются для порождения объектов (реализаций класса). Именно конструктор отводит место под переменные и размещает код методов класса. Конструктор имеет то же имя, что и сам класс, и этим отличается от прочих методов. Для примера определим класс Point. В этом примере класс Point определяет точку двухмерного пространства. При инициализации этого объекта ему передаются два параметра: координата х и координата y. Далее идет применение этого метода в программе, а точнее в другом классе С_Point. Объект порождается интерпретатором, а затем инициализируется конструктором по вызову оператора new, в котором и указан метод-конструктор. Класс может и не иметь конструкторов, явно описанных в его теле. В этом случае будет использован конструктор суперкласса.
Конструкторов у класса может быть несколько. Все зависит, например, от типа параметров, которыми инициализируется объект, или от их количества. В примере таких конструкторов три: первый определяет инициализацию целочисленными константами, второй - вещественными константами, а третий определяет действия в случае отсутствия каких-либо аргументов вообще. При этом в C_Point будет применяться первый конструктор, т.к. числа в операторе new указаны целые.
classPoint { intx; inty; Point (intx, inty) { this.x = x; this.y = y; } Point (floatx, floaty) { this.x = (float) x; this.y = (float) y; } Point () { this.x = 0; this.y = 0; } } classC_Point { publicstaticvoidmain (Stringargs[]) { Pointp = newPoint (10,20); System.out.println ("x="+p.x+"; y="+p.y); } }
В большинстве языков программирования этого типа кроме конструкторов существуют еще и деструкторы, т.е. методы, освобождающие память при завершении работы с объектами данного класса. В Java такой необходимости нет, т.к. память освобождается специальным компонентом Java-машины - сборщиком мусора, который и определяет, какие объекты не активны и могут быть удалены, а их место использовано для создания других объектов.
Рассмотренный пример примечателен еще и тем, что в нем используются оператор "." и зарезервированное слово "this". Оператор "." нужен для обращения к переменным и методам объекта (реализации класса). Так выражение p.x позволяет сослаться на значение переменной x объекта p, который является реализацией класса Point. Аналогично поступают и при обращении к методам объекта. Заменим конструктор объекта Point на функцию init.
classPoint { intx; inty; voidinit ( inta, intb) { this.x = a; this.y = b; } } classC_Point { Pointp = newPoint (); p.init (10,20); .... }
В этом случае инициализация переменных значениями будет выполняться методом init. При этом обращение к этому методу будет выглядеть как p.init (a,b).
Зарезервированная переменная this позволяет сослаться на переменные и методы текущего объекта, т.е. того объекта, в котором в данный момент находимся. Этот механизм, в частности, полезен в том случае, когда надо сослаться на самого себя, но сослаться на описание мы не можем: ссылаться позволено только на реальный объект, поэтому this позволяет обойти это совершенно естественное ограничение, ведь в момент описания класса имена объектов остаются неизвестными.
Другим зарезервированным словом является слово "super". Оно служит для обозначения переменной, которая ссылается на переменные и методы суперкласса. Использование его часто бывает полезно при инициализации объекта, когда используются переменные класса-родителя, и они требуют своей обработки. Например, инициализация переменных предка будет выглядеть как super ().
Другим важным свойством классов Java являются замещение и совмещение методов, а также механизм их динамического назначения. В любом подклассе, который наследует переменные и методы класса, можно переопределить эти объекты. Если тип метода и типы и количество переменных в новом методе совпадают с тем, как они определены в суперклассе, то при обращении к объектам нового класса будут использоваться новые методы и переменные. Этот порядок называется замещением методов, если речь идет о методах. Но если новый метод в чем-либо отличается от предшественника, то речь будет идти о совмещении методов. Система будет выбирать тот из них, который реально соответствует объекту, с которым имеет дело. Например, в суперклассе определены действия над целыми числами, а в подклассе над вещественными. Если при этом, будучи в подклассе, обратиться к целым данным, то для работы с ними будет использован метод суперкласса. Такой выбор методов по реальному содержанию объектов называется динамическим назначением методов.
По умолчанию любой подкласс может переписать метод своего суперкласса. Если необходимо запретить такое переопределение, то метод следует объявить финальным. Например, если мы хотим объявить константы, которые будем в дальнейшем использовать, то это можно сделать следующим образом:
finalintMAX = 64534;
Не смотря на то, что в Java есть сборщик мусора, иногда перед удалением объектов необходимо сделать некоторые действия над ними, например, вытолкнуть файловые буферы. В этом случае в описании класса определяют метод finalize. Всякий раз, когда система будет принимать решение на удаление объекта данного класса, будет выполняться этот метод.
Одной из разновидностей переменных и методов являются статические методы и переменные. Статические переменные доступны из любого места кода, и их инициализация производится в момент создания объекта данного класса. Если необходимо проинициализировать статические переменные какими-либо вычислениями, то для этого используют статический блок.
В Java кроме обычных классов определены еще и абстрактные классы. Абстрактные классы используются в том случае, когда объявить класс необходимо, но вот реализация всех методов этого класса будет получена только после определения подклассов. Все мобильные коды Java фактически строятся на основе абстрактных классов, определяя и переопределяя методы суперкласса Applet.
позволяет использовать два подхода
PowerBuilder 5. 0 позволяет использовать два подхода для построения Intranet-приложений: статический и динамический.
Статический подход подразумевает использование возможности сохранять содержимое DataWindow в формате HTML. Этим механизмом можно воспользоваться как в среде разработки, так и в run-time. Для этого в среде разработки используется команда SaveRowsAs (в режиме просмотра результатов), в run-time применяется функция класса DataWindowcontrol - SaveAs:
dwcontrol.SaveAs(filename, saveastype, colheading)
где filename - имя файла, куда сохранять; saveastype - тип сохраняемого файла (в данном случае - HTMLTable); colheading (необязательный параметр) - булево значение, определяющее, следует ли включать заголовки столбцов DataWindow в начало файла (по умолчанию - TRUE).
Для задач периодической публикации статических данных в Internet такой подход позволяет легко создавать HTML-страницы и размещать в них отчеты любой сложности без знания языка HTML. При этом для работы с такими данными на компьютере-клиенте не требуется устанавливать среду PowerBuilder - достаточно одного лишь Web-броузера.
Динамический подход основан на использовании управляющих элементов ActiveX различных фирм (в том числе и Sybase), реализующих богатые возможности просмотра, навигации и т.п. для Web. В начальном релизе доступен управляющий элемент ActiveX - WebViewer подразделения VisualComponents корпорации Sybase. Он позволяет осуществлять просмотр и навигацию для узла Web. Используя WebViewer, разработчик может кодировать пользовательские события, способные автоматически инициировать извлечение информации из Web. В дополнение к управляющему элементу WebViewer, разработчики могут использовать управляющие элементы для передачи файлов (FTP, HTTP и др.), подсоединения клиент-серверных приложений к Web-серверам, управления поведением стандартных броузеров, таких как NetscapeNavigator и MicrosoftInternetExplorer и т.п. Кроме того, доступен также ActiveX-компонент FormulaOne/NET, представляющий собой Internet-реализацию Excel-совместимой электронной таблицы.
В настоящее время доступен пакет дополнений, включающий в себя кроме указанных выше возможностей следующие:
DataWindowPlug-in - для отображения корпоративных отчетов в Internet; WindowPlug-in - для запуска приложений PowerBuilder в Web-броузере; Web.PB - для построения серверов приложений, работающих с любым Web-сервером.
DataWindowPlug-in позволяет отображать на Web-странице файл PowersoftReport (PSR), который может быть просмотрен с использованием NetscapeNavigator или MicrosoftInternetExplorer версии 3.0. Созданный в PowerBuilder или InfoMaker отчет вы можете сохранить в виде PSR-файла с учетом форматов представления данных, который затем и помещается на HTML-страницу командой EMBED языка HTML (my_report.psr - имя PSR-файла с данными):
<embedsrc=my_report.psr width=650 height=350>
WindowPlug-in является очень мощной технологией для переноса клиент-серверных приложений в Internet. WindowPlug-in позволяет выполнять приложения PowerBuilder в броузере Netscape (или в любом броузере, поддерживающем NetscapeNavigatorPlug-in - как, например, MicrosoftInternetExplorer версии 3.0). Это означает, что вы имеете возможность открыть дочернее окно PowerBuilder, в котором допускается размещение любых элементов управления PowerBuilder, таких как кнопки, списки, графики, строки редактирования, Tab-странички, деревья, OLE-объекты и т. п. Приложение может использовать технологию DataWindow для соединения с базой данных через "родные" драйверы или через драйверы стандарта ODBC. Более того, WindowPlug-in может взаимодействовать с распределенными частями приложения, располагающимися на различных платформах - например, на Unix или WindowsNT. Такое окно PowerBuilder содержится в динамической библиотеке PowerBuilder (pbd или dll) на Web-сервере и загружается Web-броузером с помощью следующей команды:
<embedsrc=my_windows.dllwidth = 650 height=350 window=w_detail>
Здесь my_windows.dll - имя динамической библиотеки PowerBuilder, содержащей дочернее окно w_detail. Таким образом, разработчик получает возможность выполнять стандартные дочерние окна PowerBuilder внутри Web-броузера, что устраняет необходимость написания HTML-кодов и CGI-программ. Кроме того, устраняются ограничения HTML по пользовательскому интерфейсу и имеется возможность использовать богатейшую функциональность DataWindow.
Web.PB - это новая технология, позволяющая создавать распределенные приложения с использованием Web-сервера. Web.PB обеспечивает доступ любого Web-броузера к ресурсам сервера приложений PowerBuilder. Такая методология использует полную функциональность PowerBuilder, включая DataWindow, огромные возможности языка PowerScript и объектно-ориентированный подход для построения распределенного приложения. Созданный разработчиком сервер приложений имеет возможность динамически, "на лету", генерировать HTML-страницы и посылать их Web-броузеру через Web-сервер. При этом могут использоваться протоколы CGI, NSAPI или ISAPI. Такой подход полностью соответствует архитектуре "тонкого" клиента, где единственным требованием к клиентскому компьютеру является наличие Web-броузера. Данная схема обеспечивает полный доступ из броузера к атрибутам и методам любых невизуальных объектов на сервере приложения, вплоть до передачи аргументов.
Архитектура Web.PB связывает сервер приложений, построенный с помощью PowerBuilder, с Web-сервером и, далее, через него - с Web-броузером.
По информации от разработчиков PowerBuilder, в следующей, шестой, версии, работе с Internet будет уделено еще более пристальное внимание.
Предформатированый текст
При создании HTML-страниц необходимо иметь в виду, что броузеры игнорируют пустое пространство (несколько пробелов, табуляцию), а также возврат каретки. Для того, чтобы избавиться от этого явления используется тег <PRE> с закрывающей парой </PRE>. Этот тег делает заключенный в него текст предформатированным (текст выводится таким, какой он есть). Правда, справедливости ради, следует заметить, что текст будет выведен не очень красивым моноширинным шрифтом.
Пример использования тега <PRE>:
<PRE> У курицы - бантик У кошки - сапожки У двух петухов - по гармошке Вот так! </PRE>
Предшественники HTML
Начало истории HTML следует отнести к далекому 1986 году, когда Международная организация по стандартизации (ISO) приняла стандарт ISO-8879, озаглавленный "StandardGeneralizedMarkupLanguage" (SGML). Стандарт этот посвящен описанию SGML - обобщенного метаязыка, позволяющего строить системы логической, структурной разметки любых разновидностей текстов. Слово "структурная" означает, что управляющие коды, вносимые в текст при такой разметке, не несут никакой информации о внешнем виде документа, а лишь указывают границы и соподчинение его составных частей, т.е. задают его логическую структуру.
Создатели SGML стремились максимально абстрагироваться от проблем представления электронного текста в разных программах, на разных компьютерных платформах и устройствах вывода. Так, если с помощью SGML размечается документ, содержащий заголовки, идеология языка запрещает указывать, что такой-то заголовок должен набираться, скажем, шрифтом Times полужирного начертания кегля 12 пунктов. SGML в таком случае требует ограничиться указанием на уровень заголовка и его место в иерархической структуре документа.
Благодаря таким ограничениям размеченный текст сможет без труда интерпретировать любая программа, работающая с любым мыслимым устройством вывода. К примеру, при работе в графическом интерфейсе заголовок может действительно выводиться полужирным шрифтом повышенного кегля; программа, использующая текстовый интерфейс, выделит его пустой строкой сверху и снизу и, возможно, повышенной яркостью символов; синтезатор речи, читающий документ вслух, сможет отметить заголовок паузой и изменением интонации. Можно сказать, что SGML-разметка обнажает нематериальную "душу" текста, для которой впоследствии любая программа-интерпретатор сможет подобрать подходящее к случаю "тело".
Однако абстрактность SGML этим не исчерпывается. SGML представляет собой не готовую систему разметки текста, а лишь удобный метаязык, позволяющий строить такие системы для конкретных обстоятельств. Жизнь многообразна и непредсказуема: сегодня вам требуется выделять в текстах заголовки, а завтра, возможно, понадобится размечать подписи в письмах, математические формулы или имена действующих лиц в пьесе. Стандарт SGML определяет лишь синтаксис записи элементов разметки - тегов - и их атрибутов, а также правила определения новых тегов и указания структурных отношений между ними. Для практической же разметки документов нужно приложение SGML - набор определенных в соответствии со стандартом тегов, представляющий собой, по сути, формальное описание структуры документа.
Cам по себе SGML не получил сколько-нибудь заметного распространения - до тех пор, пока в 1991 г. сотрудники Европейского института физики частиц (CERN, http://www.cern.ch), занятые созданием системы передачи гипертекстовой информации через Internet, не выбрали SGML в качестве основы для нового языка разметки гипертекстовых документов. Этот язык - самое известное из приложений SGML - был назван HTML (HyperTextMarkupLanguage, "язык разметки гипертекста").
Справедливости ради стоит отметить, что на время появления HTML существовали (и были весьма распространены) и другие языки разметки текста, например TeX и RTF.
3.1.2. Контейнеры и теги HTML
Язык HTML позволяет определять структуру электронного документа с полиграфическим уровнем оформления; результирующий документ может содержать самые разнообразные элементы: иллюстрации, аудио- и видео- фрагменты и так далее. Язык включает в свой состав развитые средства для специфицирования нескольких уровней заголовков, шрифтовых выделений, различных групп объектов, например, словари, каталоги или меню для размещения иллюстраций и других фрагментов, а также множество других возможностей.
Теговая модель описания документа позволяет представить его в виде совокупности элементов, каждый из которых окружен тегом (управляющим HTML-кодом).
Документ HTML представляет собой не что иное, как обычный ASCII-файл, с добавленными в него управляющими HTML-кодами (тегами). Каждый тег начинается с левой угловой скобки "<" и заканчивается правой угловой скобкой ">". Между скобками записывается идентификатор тега и, если необходимо, дополнительные аргументы. Некоторые теги используются вместе с закрывающей парой, которая сигнализирует об окончании области действия соответствующего назначения. Закрывающая пара после левой угловой скобки содержит символ "/" (например, для тега наклонного шрифта <I> закрывающая пара представляет собой </I>, для тега заголовка <TITLE> закрывающей парой будет </TITLE>).
Иногда тег с закрывающей парой называют контейнером в том смысле, что внутри него можно поместить содержательную информацию определенного характера. Структура HTML-документа позволяет использовать вложенные друг в друга контейнеры.
Такой подход предполагает наличие еще одной компоненты технологии - интерпретатора языка. В WWW функции интерпретатора в основном выполняются клиентом-броузером.
Преимущества
Корпоративная сеть Intranet - прекрасная платформа для публикации информации внутри предприятия. Web-броузер доступен практически для любой клиентской системы - в отличие от фирменных клиентов ПО групповой работы, которых для части платформ может не быть. Web-серверы не требуют аппаратных средств такой большой мощности (быстродействия процессора и емкости жесткого диска), как, например, классические пакеты для групповой работы типа LotusNotes. Рынок ПО для Web-серверов характеризуется высоким уровнем конкуренции - пользователи не привязаны к одному поставщику. Тем не менее программы прекрасно взаимодействуют. Технология Web обладает свойством наращиваемости и может использоваться в региональных вычислительных сетях. Новые средства авторской разработки в комплексе прикладных программ для настольных ПК облегчают новичкам создание HTML-страниц для Web-серверов.
Прикладные интерфейсы Web-серверов
Интерфейсу CGI присущи ограниченные возможности масштабирования и невысокое быстродействие. Каждый запуск серверной процедуры требует загрузки программы с диска и производится в своем адресном пространстве, что вызывает непроизводительные затраты времени.
Прикладные интерфейсы Web-серверов призваны улучшить эту ситуацию. Они реализуются в виде динамических библиотек (DDL в Windows и совместно используемые объекты в UNIX) в адресном пространстве Web-сервера.
Два ведущих производителя Web-серверов, Netscape и Microsoft, разработали свои API расширения серверов: ISAPI для InternetInformationServer и NSAPI для серверов Netscape.
DLL-библиотеки ISAPI имеют две точки входа:
GetExtensionVersion - для получения номера версии расширений и строки описания при инициализации; HttpExtensionProc - эквивалент main-процедуры расширения.
Информация в HttpExtensionProc передается с помощью единственного параметра и указателя управляющего блока расширения. В этом блоке приведена информация о взаимодействии по данным между броузером и CGI-процедурой на Web-сервере.
Основными функциями ISAPI являются:
GetServerVariable - запросить дополнительную информацию по имени; ReadClient - считать информацию из тела HTTP-запроса броузера; WriteClient - послать информацию HTTP-клиенту; ServerSupportFunction - возвратить серверу информацию о расположении, переадресации и состоянии процесса.
Дополнительную информацию можно найти в IISSDK фирмы Microsoft по адресу: http://www/microsoft.com/intdev/ .
Интерфейс NSAPI аналогичен ISAPI, но является сложным, теснее связан с конфигурацией сервера, но и более гибок. Конфигурация каждой функции NSAPI должна быть задана в объектной базе данных конфигурации Netsite. Блоки параметров NSAPI основаны на парах name-value (имя-значение), что похоже на передачу диалоговых переменных HTML-форм. Дополнительную информацию по NSAPI можно получить в Netscape по адресу: http://www/netscape.com/newsref/std/server_api.html .
Применение FTP-архивов
FTP-архивы являются одним из основных информационных ресурсов Internet. Фактически, это огромное распределенное хранилище всевозможной информации (программы, музыка, фильмы, текстовые файлы), доступ к этим архивам осуществляется специальной программой FTP, которая обращается к специальному серверу, управляющему файловым архивом на удаленной машине. FTP-архив - это часть файловой системы, которая доступна для удаленного пользователя FTP-сервера. Важным свойством FTP-архивов является возможность так называемого анонимного доступа.
Любой пользователь может воспользоваться услугами анонимного доступа к хранилищу и скопировать интересующие его материалы. Для того, чтобы получить доступ к архиву, следует отправить сообщение по адресу. Далее робот попытается установить анонимное соединение с FTP-сервером. В результате будет получен список файлов корневой директории сервера, робот прервет работу с сервером и вернет результаты пользователю.
Важным моментом, ради чего осуществляется доступ к FTP-серверу, является запрос на передачу файлов. Передавать можно текстовые и двоичные файлы. В течение одной сессии можно открывать и закрывать FTP-соединения с разными FTP-серверами, заказывать кодировку двоичных файлов, получать подсказку о своем месте в файловой системе сервера ит.д. Можно получить список FTP-архивов.
Практически любой архив строится как иерархия директорий. Многие архивы дублируют информацию из других архивов (так называемые "зеркала"). Для того чтобы получить нужную информацию, вовсе не обязательно ждать, когда информация будет передана издалека, можно поискать "зеркало" где-нибудь ближе. Для этой цели существует специальная программа Archie, которая позволяет просканировать FTP-архивы и найти тот, который устраивает пользователя по составу программного обеспечения и коммуникационным условиям.
Информация в FTP-архивах разделена на три категории:
Защищенная информация, режим доступа к которой определяется ее владельцами и разрешается по специальному соглашению с потребителем. К этому виду ресурсов относятся коммерческие архивы, закрытые национальные и международные некоммерческие ресурсы, частная некоммерческая информация со специальными режимами доступа. Информационные ресурсы ограниченного использования. В данный класс могут входить ресурсы ограниченного времени использования или ограниченного времени действия. Свободно распространяемые информационные ресурсы или freeware, если речь идет о программном обеспечении. К этим ресурсам относится все, что можно свободно получить по сети без специальной регистрации. Это может быть документация, программы или что-либо еще.
Из выше перечисленных ресурсов наиболее интересными, по понятным причинам, являются две последних категории, которые, как правило, оформлены в виде FTP-архивов.
Технология FTP была разработана в рамках проекта ARPA и предназначена для обмена большими объемами информации между машинами с различной архитектурой. Главным в проекте было обеспечение надежной передачи, и поэтому с современной точки зрения FTP кажется перегруженным излишними редко используемыми возможностями. Стержень технологии составляет FTP-протокол.
FTP (FileTransferProtocol, или "Протокол Передачи Файлов") - один из старейших протоколов Internet и входит в его стандарты. Обмен данными в FTP проходит по TCP-каналу. Построен обмен по технологии "клиент-сервер".
FTP - это интерфейс пользователя при обмене файлами по одноименному протоколу. Программа устанавливает канал управления с удаленным сервером и ожидает команд пользователя. Идентификатор удаленного сервера указывается либо аргументом программы, либо в команде интерфейса open.
В настоящее время доступ по FTP-протоколу осуществляется из множества мультипротокольных интерфейсов (например, Netscape) или графических ftp-оболочек типа ftp-tool для X-Window. Все они гораздо удобнее и проще в использовании, но и потребляют гораздо больше ресурсов. FTP-сервер есть даже для MS-DOS, не говоря о многозадачных средах. Однако поиск нужного FTP-сервера в Internet - задача сложная и трудоемкая. Для ее облегчения существует специальное средство - Archie. Задача Archie - сканировать FTP-архивы на предмет наличия в них требуемых файлов. Работать с Archie можно через telnet-сессию, через локального клиента или по электронной почте.
В заключение хотелось бы отметить, что FTP-архивов очень много, и каждый может выбирать тот, что ему больше нравится.
Процедуры и функции
В VBScript существует два типа подпрограмм - процедуры и функции.
Процедура - это набор операторов VBScript, обрамленных операторами Sub и EndSub, которые выполняют какие-то действия. Процедура не возвращает никакого значения. Процедура может "захватывать" аргументы (константы, переменные или выражения). Если процедура не имеет аргументов, то выражение Sub должно содержать пустые круглые скобки. В примере, приведенном ниже, процедура ConvertTemp использует две встроенные функции VBScript - InputBox и MsgBox - для обмена с пользователем некоторой информацией.
Функция - это набор операторов VBScript, обрамленных операторами Function и EndFunction. Функция похожа на процедуру, но отличается тем, что может возвращать значение. Функция также как и процедура может "захватывать" аргументы. Функция всегда возвращает значение типа Variant. В примере функция Celsius пересчитывает температуру из градусов по Цельсию в градусы по Фаренгейту.
<SCRIPTLANGUAGE="VBScript"> SubConvertTemp() temp = InputBox("PleaseenterthetemperatureindegreesF.", 1) MsgBox "Thetemperatureis " & Celsius(temp) & " degreesC." EndSub FunctionCelsius(fDegrees) Celsius = (fDegrees - 32) * 5 / 9 EndFunction </SCRIPT>
Процедуры и функции перед их использованием обязательно должны быть описаны в начале раздела HEADHTML-страницы. Весь последующий скрипт должен быть также в разделе HEAD. Кроме того, выражения Sub и Function как и все другие операторы VBScript должны находится в контейнере <SCRIPT>.
Каждый элемент данных, передаваемый подпрограмме, называется аргументом. Аргументы указываются в скобках через запятую после имени процедуры или функции. Например, в следующем примере переменная fDegrees содержит значение, которое используется в функции Celsius для преобразования температуры:
<SCRIPTLANGUAGE="VBScript"> FunctionCelsius(fDegrees) Celsius = (fDegrees - 32) * 5 / 9 EndFunction </SCRIPT>
Аргументам можно присваивать любые имена в соответствии с соглашениями по именованию.
При использовании функций в скрипте, ее имя должно всегда стоять в правой части равенства при присвоении значения переменной или внутри какого-либо выражения, например:
<SCRIPTLANGUAGE="VBScript"> Temp = Celsius(fDegrees) </SCRIPT>
или
<SCRIPTLANGUAGE="VBScript"> MsgBox "TheCelsiustemperatureis " & Celsius(fDegrees) & " degrees." </SCRIPT>
Для вызова процедуры из другой подпрограммы нужно просто указать имя процедуры вместе со значениями аргументов, разделенных запятыми. Выражение Call в данном случае не требуется, но если оно все-таки используется, то аргументы указываются в скобках. В следующем примере показаны оба варианта вызова процедуры:
<SCRIPTLANGUAGE="VBScript"> CallMyProc(firstarg, secondarg) MyProcfirstarg, secondarg </SCRIPT>
Программирование на SQL
SQL используется в диалоговом и пакетном режимах. Диалоговый режим предполагает интерпретацию каждой конструкции и ее выполнение. Пакетный режим предполагает написание программ, реализующих обработку базы данных в прикладных интересах. Двухрежимное использование SQL очень удобно для предварительной интерактивной отладки программ и реализации окончательной версии приложения в виде более быстродействующей программы. Структура языка и его возможности в основном идентичны в обоих режимах.
Для эффективной разработки приложений с использованием SQL существует несколько вариантов реализации языка и, соответственно, СУБД. Каждый из вариантов предполагает использование своей техники программирования. Наиболее распространен встроенный SQL, реализуемый в статическом и динамическом вариантах. Альтернативой встроенному SQL, заявившей о себе в последнее время, является внешний SQL, предполагающий взаимодействие приложений с базой данных в режиме клиент-сервер.
Встроенный SQL предполагает использование некоторого основного языка программирования (например, С, Pascal, Ada, Cobol, Fortran, Assembler) и SQL-процессора. Реализация встроенного SQL регламентирована стандартом фирмы IBM для SQL-продуктов.
Текст программы состоит из произвольной смеси команд основного языка и команд SQL со специальным префиксом, например, ExecSQL. Структура SQL-предложений расширена для использования переменных основного языка в SQL-конструкциях.
SQL-процессор видоизменяет текст программы в соответствии с требованиями компилятора основного языка программирования. При этом в предусмотренной форме расставляются обращения к процедурам и функциям библиотеки, реализующей обработку SQL и основных функций СУБД. После компиляции программы и ее компоновки приложение представляет собой самостоятельный модуль.
Для работы препроцессора необходимо в каждой программе определять структуру используемых таблиц, например, с помощью конструкции CREATETABLE. Вводится дополнительная инструкция DECLARE, предоставляющая возможность ссылаться на описание таблицы из нескольких SQL-предложений в разрабатываемых программах. Структура такой инструкции аналогична CREATE, но содержит только информацию, необходимую для работы SQL-препроцессора.
Обработка ошибок во встроенном SQL выполняется на шаге компиляции и при выполнении. На шаге компиляции программы ошибки в SQL-предложениях выявляются препроцессором. При выполнении приложения код завершения каждого SQL-предложения содержится в специальной переменной основного языка программирования SQLCODE.
Для обработки ошибок времени выполнения предусмотрено специальное SQL-предложение WHENEVER, определяющее действия, которые необходимо предпринять при возникновении ошибочной ситуации.
Встроенный SQL предлагает специфическую обработку запросов - получение результатов строка за строкой. Для этого выделяются однострочные и многострочные запросы. Определение однострочного запроса расширено позицией INTO, описывающей набор переменных основного языка, в которые будет направлена строка-результат запроса. Список таких переменных должен соответствовать списку колонок в целевой части SELECT по числу, порядку следования и типам значений.
Для получения значений многострочного запроса используется понятие курсора. Определение курсора с помощью DECLARECURSOR заключается в связывании имени курсора с определенным запросом - SELECT-предложением. Затем курсор открывается с помощью OPEN-предложения, с которым можно ассоциировать позиционирование к первой строке таблицы-результата. Предложение FЕTCH позволяет считать строку таблицы в указанные основные переменные и перейти к следующей строке. Это предложение выполняется в цикле до достижения конца таблицы-результата. При возникновении ситуации WHENEVERNOTFOUND необходимо закрыть курсор с помощью CLOSE.
Понятие курсора и текущей строки таблицы используется и для операций позиционированного обновления и удаления строк. В этом случае UPDATE и DELETE выполняются для текущей строки таблицы, с которой связан указанный курсор.
Язык структурированных запросов SQL является непроцедурным языком, ориентированным на работу с БД, и не содержит средств традиционных алгоритмических средств для описания логики приложения. Инструментарий для реляционных СУБД может включать алгоритмические процедурные расширения, оформленные в виде самостоятельных языков и соответствующих интерпретаторов и компиляторов. Примером такого языка является PL/SQL для СУБД Oracle.
OraclePL/SQL вводит следующие процедурные возможности для SQL:
операторы объявления и вызова процедурных модулей; блочные конструкции BEGIN-END для операторов; управляющие операторы:
IF-THEN-ELSE, EXIT, GOTO;
операторы циклов:
FOR-LOOP, WHILE-LOOP;
операторы объявления переменных; оператор присваивания с арифметическими выражениями.
Язык PL/ SQL широко используется при работе с различными программными продуктами Oracle:
при организации хранимых процедур сервера БД Oracle; блоки PL/SQL применяются в генераторах OracleForms и Reports; блоки применяются также во встроенных SQL для языков 3GL (например, в Pro*C).
Механизм PL/SQLEngine встраивается в различные компоненты и обеспечивает распознавание операторов и конструкций SQL и PL/SQL в смешанном потоке предложений. Конструкции и операторы PL/SQL исполняются внутри интерпретатора. Обнаруженный оператор SQL передается серверу БД, где производится его синтаксический разбор, связывание со значениями переменных, компиляция и выполнение запроса к БД.
Блоки и модули PL/SQL могут быть частично откомпилированы, что обеспечивает повышение скорости выполнения хранимых процедур и триггеров.
Программы просмотра (броузеры)
Первыми программами просмотра гипертекстовой информации в WWW были строковый броузер www и полноэкранный текстовыйLynx. Их следует использовать только при работе с алфавитно-цифровыми терминалами, при этом следует указать, что броузер www практически нигде не используется. Первым графическим броузером был Mosaic, написанный и распространяемый Национальным центром по применению суперЭВМ. Программа Mosaic - превосходный экземпляр высококачественных бесплатных ресурсов Internet. Наибольшее распространение получили NetscapeNavigator и MSInternetExplorer.
Протокол HTTP
Подобно всему в Internet, действия WWW зависят от протокола передачи гипертекста HTTP. Так же, как в протоколе FTP, почтовых протоколах POP и SMTP, в HTTP задан набор команд, передающийся посредством строк текста в формате ASCII. Транзакция HTTP состоит из четырех частей: установление соединения, запрос, ответ и завершение. Программа-клиент устанавливает TCP-соединение с официальным портом HTTP (80) на удаленном компьютере. Затем клиент посылает запрос к серверу HTTP. После того, как сервер HTTP высылает ответ, клиент или сервер закрывают соединение. Каждая транзакция HTTP подчиняется вышеописанной схеме.
В большинстве случаев клиент HTTP запрашивает сервер HTTP послать файл с гипертекстом (файл типа HTML) или файл с гипермедиа (например, изображение, видео, звук или файл с мультипликацией). В большинстве случаев ответ сервера состоит из передачи запрошенного файла потоком байтов в локальный порт протокола клиента.
Расширяемость
Возможность расширения предусмотрена с целью поддержки работы с автоматически определяемыми узлами, которые не являются частью стандарта. Например, если бы в стандарте отсутствовал узел типа "куб", его можно было бы вывести следующим образом:
Cube { fields[SFFloatwidth, SFFloatheight, SFFloatdepth]width 10 height 4 depth 3 }
Кроме этого, новые типы узлов можно задавать через уже существующие. В этом случае новые узлы определяются путем задания дополнительного параметра 'isA' поля MFString. Например, новый тип "Material" под названием "ExtendedMaterial", имеющий особые свойства отражения, может быть определен следующим образом:
ExtendedMaterial { fields[MFStringisA, MFFloatindexOfRefraction, MFColor ambientColor, MFColordiffuseColor, MFColor cpecularColor, MFColoremissiveColor, MFFloat shininess, MFFloattransparency]isA [ "Material" ]indexOfRefraction .34 diffuseColor .8 .54 1 }
Разделение данных.
SQL может координировать работу конкурирующих пользователей, обеспечивая их одновременную работу с базой данных.
Размножение
Узел может быть потомком более чем одной группы, поэтому в стандарте было введено понятие "размножение" или многократное использование одного и того же экземпляра узла в разных структурах. Данное понятие аналогично процедуре в универсальных языках программирования: конструкция "DEF" определяет имя размножаемого узла и создает его экземпляр, а с помощью команды "USE" происходит вызов (размножение) всех ранее созданных экземпляров. В результате выполнения следующего примера будет выведено три сферы: одна большая с именем Jack и две одинаковых поменьше с именем Kati.
Separator { DEFJackSphere { } Translation { translation 2 0 0 } Separator { DEFKatiSphere { radius .2 } Translation { translation 2 0 0 } } USEKati # radius .2 spherewillbeusedhere }
Разработка распределенных приложений
При помощи существующих средств разработки стало возможным создавать WWW-приложения, работающие не только в контексте одной HTML-страницы или одного WWW-клиента, но использующие распределенные ресурсы - и клиента, и сервера, а может быть и большего количества компьютеров. Добиться этого можно несколькими способами: воспользоваться мощностью языка Java в сопряжении с JavaScript, использовать выполнение скриптов на сервере (ASP компании Microsoft или LiveWire компании Netscape)
Редактирование и работа с проектами
Пакет VisualJ++ выполнен на базе более ранней разработки DeveloperStudio, которую уже несколько лет компания Microsoft поставляет разработчикам в комплекте с компиляторами VisualC++ и FortranPowerStation, вспомогательными инструментами работы с кодом VisualTest и VisualSourceSafe и библиотекой поддержки разработчиков MSDN.
Замечательной особенностью среды DeveloperStudio является возможность работать с несколькими проектами одновременно, при этом они могут быть созданы для разных языков программирования.
В VisualJ++ все проекты отображаются как иерархические деревья файлов. Кроме того, при генерации создаются два проекта вместо одного: отладочный вариант (debug) и вариант для распространения (release). Разница между ними состоит в том, что задаются разные ключи компиляции. Как правило, для варианта debug компилятор генерирует в выходной файл отладочную информацию, а release компилируется без оной. Переключение одного варианта на другой представляет собой смену выделенного пункта из выпадающего списка на основной линейке инструментов среды DeveloperStudio и занимает одну секунду.
Для создания приложения "с нуля" в J++ имеется единый со всеми другими компиляторами мастер генерации приложений AppWizard. При установке нового продукта в список возможных создаваемых проектов добавляются новые возможности.
Процесс генерации Java-приложений и апплетов предельно прост: ваша задача указать, куда AppWizard должен положить готовые файлы с исходным текстом, и ответить на некоторые наводящие вопросы. Мастер пытается узнать, одно- или многопоточное приложение вы желаете получить, будет ли ваш апплет осуществлять анимацию, и обработчики каких событий мыши вы хотите получить в результате генерации. Помимо исходных текстов AppWizard позволяет создавать одновременно апплет и самостоятельное приложение на базе одного и того же кода, экономя ваше время. В процессе генерации "каркаса" приложения вам будет предложено создать новую страницу в формате HTML со ссылкой на разрабатываемый вами апплет. Если вам это необходимо (а так оно и есть), то вам будет предложено задать имена и прочие атрибуты передаваемых через HTML-страницу параметров апплета.
Редактор ресурсов и мастер ресурсов
Строго говоря, программы на языке Java не имеют ресурсов и не рассчитаны на их использование: все элементы интерфейса создаются и размещаются программно. Подход Microsoft в этом вопросе схож с подходом Symantec: можно создать ресурсы обычным способом, а затем отконвертировать их в программные модули на языке Java. Первый этап, т. е. создание ресурсов, происходит, как обычно, с помощью редактора ресурсов, встроенного в среду DeveloperStudio и знакомого всем пользователям VisualC++. Когда шаблон ресурсов создан, наступает время второго этапа - генерации Java-кода. Этим занимается специальный инструмент под названием JavaResourceWizard. Полученный код нужно добавить в проект, а во все файлы классов, которые ссылаются на полученный код, добавить выражения import для корректной компиляции.
Редактор ресурсов, используемый в VisualJ++, работает по методу буксировки. Диалоговые панели формируются перетаскиванием элементов с палитры на шаблон ресурса.
Что же касается рисунков, то их создание несколько сложнее. Как известно, броузеры WWW не понимают никаких графических форматов, кроме GIF и JPEG, а редакторы ресурсов Windows, как назло, никогда не могли рисовать в этих форматах. В MicrosoftVisualJ++ этот недостаток исправлен, и можно сохранять графические изображения в файлах .JPG и .GIF.
К сожалению, JavaResourceWizard может конвертировать в Java-код только ресурсы меню и диалоговые панели. Причем из элементов диалоговых панелей конвертируются лишь те, для которых в Java имеются соответствующие классы. Более того, сгенерированный для диалоговой панели код создает лишь элементы интерфейса без панели. В своей программе вы сами зададите любой контейнер по своему усмотрению. Таким образом, для вашего интерфейса нет никакой разницы, куда будут переданы его элементы: в окно, панель или какой другой визуальный класс-контейнер. Как предполагается, по мере развития JavaResourceWizard будет распознавать все больше и больше ресурсов, предоставляя пользователю все больше и больше возможностей автоматизации разработки программ.
Санкционирование доступа к серверам
Самый распространенный метод обеспечения безопасности называется базовой аутентификацией (basicauthentication). Страницы с ограничением доступа защищаются пользовательскими именами и паролями. Клиентские адреса TCP/IP или имена узлов также могут использоваться для ограничения доступа.
Управление доступом осуществляется в той секции файлов настроек сервера, где прописываются режимы работы с директориями. Если в файле управления доступом указать разрешение доступа только для определенных пользователей, то сервер будет запрашивать идентификатор и пароль пользователя. Данный процесс аутентификации может быть построен на различных механизмах: стандартной системе шифрования пароля, ведения базы данных паролей в различных базах данных.
Сервер приложений BaikonurWebApplicationServer
Baikonur - программный продукт компании EpsylonTechnologies, предназначенный для быстрой разработки приложений, ориентированных на использование Web-броузеров в качестве клиентских мест для доступа к базам данных во внутрикорпоративных сетях Intranet, а также Internet. Собственно Baikonur представляет собой сервер приложений, частным случаем которого является Web-сервер приложений, в состав поставки входят еще и дополнительные библиотеки для различных средств программирования, в частности для BorlandDelphi (для C++, Java, JavaScript - в старших версиях).
BaikonurServer предназначен для построения Internet/Intranet-систем на платформе WindowsNT. Самое простое, что может делать BaikonurServer, - это служить в качестве обыкновенного Web-сервера, имеющего дело со стандартными HTML-документами. Однако, в отличие от стандартного Web-сервера, основные ресурсы, которыми оперирует Baikonur-сервер, - это информационные потоки и задачи. В результате при помощи сервера Baikonur появляется возможность построения функционально весьма сложных и разветвленных информационных систем.
Системы в архитектуре клиент-сервер устроены так, что исполняемый код одновременно находится и на сервере, и на клиенте. Как правило, серверной стороной выступает какой-либо SQL-сервер, например, от компании Oracle, Informix, Borland, Microsoft, IBM и др., а задачей клиентского места является диалоговая работа с пользователем, формирование запросов, получение и отображение результатов. В настоящее время существуют развитые средства скоростной разработки систем в такой архитектуре. Одним из наиболее удачных инструментов является BorlandDelphi. Компонентный подход к разработке клиентского места в Delphi существенно ускоряет проектирование всей системы в целом. В Delphi имеются визуальные и невизуальные компоненты. Визуальные компоненты предназначены для проектирования элементов интерфейса, а невизуальные - для сборки из готовых компонентов алгоритмической части, включая запросы, обработку таблиц и т. д.
В отличие от систем в архитектуре файл-сервер, обработка данных в системах с архитектурой клиент-сервер в основном происходит на серверной стороне. Однако клиентское место имеет доступ к метаданным, определяющим структуру таблиц и т. д. Запросы и получение данных в системах с архитектурой клиент-сервер происходят при помощи драйверов данных (в случае Delphi - SQLLinks), которые умеют работать с соответствующими SQL-серверами, посылая запросы, производя подключение, получая результирующие наборы данных.
Приложение динамически генерирует HTML-страницы. Однако, если хочется создавать изысканно выглядящие Internet-приложения, HTML придется освоить. Вы можете создавать свои собственные HTML-компоненты или подправлять внешний вид страниц, генерируемых вашим приложением, расставляя вручную в шаблоне соответствующие теги HyperTextMarkupLanguage.
В случае применения BaikonurWebAppServer между клиентом и сервером появляется дополнительное звено - сервер приложений. Теперь приложения, изготовленные при помощи средства ускоренной разработки (например Delphi), работают не на клиентской стороне, а под управлением сервера приложений Baikonur. В зависимости от необходимого количества одновременно работающих клиентов, таких серверов может быть несколько. SQL-сервер может работать либо на той же машине, где находится сервер приложений, либо быть выделенным в отдельный физический сервер. В случае SQL-сервера от компании Borland это может быть даже сервер, работающий с другой операционной системой, например какой-нибудь из наиболее удачных версий Unix (Solaris, AIX, HP/UX, DigitalUnix, IRIX).
Собственно клиентское место представляет собой теперь компьютер с достаточно произвольно выбираемой конфигурацией и операционной системой. Это может быть и Windows 3.11, и Macintosh, и Unix, и OS/2, и WindowsNT и др. Клиентское место может находиться в сети (стек TCP/IP) или связываться с сервером Baikonur через прямое модемное соединение, через провайдера Internet или по специализированной выделенной линии.
На каждом клиентском рабочем месте устанавливается либо Internet-броузер общего назначения, либо специализированный броузер. При помощи таких броузеров пользователь устанавливает соединение с Web-сервером, запускает одно или несколько приложений на сервере (визуально спроектированных в Delphi), может переключаться между ними, не теряя контекста, может получать оперативную информацию и т. д.
Рассмотрим, как устроена система на основе сервера Baikonur. Удаленные и неудаленные клиенты 1-N обслуживаются одинаковым образом, никаких различий для них не делается. Каждый запрос, поступающий от клиентского броузера на TCP-порт, обслуживается листенером - подзадачей обслуживания коммуникационного порта; этот компонент фактически является монитором соединений (connect), затем запрос попадает на парсер, который его разбирает и идентифицирует клиента. При возникновении соединения листенер инициирует работу IP-менеджера, который обслуживает подзадачи сессий клиентов. Парсер принимает решение, генерировать ли ему новую подзадачу сессии клиента или переключить информационный поток от клиента к его задаче. Таким образом, информационный поток попадает от клиентского броузера именно туда, куда необходимо. Идентификация клиента позволяет избежать потери контекста при переключении между задачами. На передаче информационного потока задаче обработка не заканчивается. Библиотека HTML-компонентов, написанная для Delphi, устроена так, что базовый компонент, присутствующий в каждой задаче (THTMLControl), умеет воспринимать поток информации, передаваемый ему с сервера Baikonur. Этот поток воспринимается и раздается активным визуальным компонентам для обработки. При передаче информации от приложения клиенту все происходит в обратном порядке, с тем лишь исключением, что соединение уже установлено, клиентский броузер идентифицирован. Поэтому остается лишь собрать информацию с визуальных компонентов в один поток и передать обратно клиенту.
Для функционирования системы строится довольно сложная структура. Сложность построения системы усугубляется еще и тем, что обработка всех процессов производится в параллельном режиме, это особенно заметно на многопроцессорных серверах. Все подзадачи Baikonur ведут обработку независимо друг от друга, и, хотя в целом сам сервер получился довольно компактным, логика его функционирования требует отдельного описания.
Для обработки запросов может использоваться параллельно несколько процессов по одному для каждого Web-клиента или один процесс, работающий в многопользовательском режиме. Так как протокол HTTP не ориентирован на сеансы, то Baikonur сам обеспечивает сохранение рабочего контекста пользователя, имитируя сеанс на сервере.
Серверные расширения IDC и ASP
Microsoft предоставляет расширение для Web-сервера -InternetDatabaseConnector, программу на базе ISAPI, обеспечивающую доступ к MicrosoftAccess, MicrosoftSQLServer, Oracle, Sybase, Informix и другим ODBC-совместимым базам данных.
IDC является примером достаточно давно и успешно используемого ISAPI-приложения. Он входит в состав MSIIS. С помощью вызовов функций ODBCAPIIDC обеспечивает прямую связь между полями HTML-формы и соответствующим ODBC-достижимым источником данных, например, базой данных MSSQLServer, без необходимости написания замысловатых CGI-скриптов.
Когда речь заходит о компонентах ActiveX, как правило, неявно подразумевается клиентская часть приложения. MicrosoftActiveServerPages (ASP) - активные серверные страницы - представляют собой инструмент для эффективной разработки серверных Web-приложений, интегрирующих в своем составе HTML-код, VBScript и компоненты ActiveX. Это означает, что в уже существующие наработки легко могут быть встроены фрагменты кода на VBScript или JavaScript, а также вызовы соответствующих объектов ActiveX.
InternetInformationServer принимает адрес URL.
Адрес URL посылается Web-броузером на InternetInformationServer.
IIS загружает библиотеку Httpodbc.dll и передает ей адрес URL.
Библиотека Httpodbc.dll загружается и извлекает из полученного от IISURL-адреса имя IDC-файла (и другие элементы).
Библиотека Httpodbc.dll читает IDC-файл.
IDC-файл содержит элементы в виде
field: value
Например, источник данных ODBC - Datasource: WebSQL,HTML-шаблон, в который будут размещены результаты SQL-запроса, - Template: sample.htx, имя пользователя, которое определяет, если это необходимо, имя для доступа к источнику данных ODBC - Username: sa,SQL-предложения, которые будут выполнены -
SQLStatement: SELECTau_lname, ytd_sales FROMpubs.dbo.titleview WHEREytd_sales>5000
Библиотека Httpodbc.dll
Соединение с источником данных ODBC осуществляется библиотекой Httpodbc.dll, которая загружает ODBC-драйвер (в примере, указанном выше, - ODBC-драйвер для SQLServer) и соединяется с сервером, указанном в описании источника данных. В продолжении примера, при установлении связи, SQL-предложения из IDC-файла пересылаются ODBC-драйверу SQLServer, который перенаправляет их в SQLServer.
Библиотека Httpodbc.dll выбирает данные из БД и отправляет их в HTX-файл.
После того, как SQL-предложения будут выполнены, Httpodbc.dll прочитывает HTX-файл, имя которого определено в IDC-файле. HTX-файл содержит специальные HTML-теги, которые Httpodbc.dll использует для определения, где и как разместить результирующие данные SQL-запроса.