16+
ComputerPrice
НА ГЛАВНУЮ СТАТЬИ НОВОСТИ О НАС




Яндекс цитирования


Версия для печати

Модуль поиска не установлен.

Создание Web-интерфейса для систем, использующих БД Oracle

25.03.2003

Антон Тульчинский <antontul@rambler.ru>

В последнее время достаточно часто при создании программных продуктов используют так называемый Web-интерфейс для построения диалога с пользователем. Естественно, что практически все системы, работающие в рамках глобальной сети Internet, используют такой тип диалога. Более того, сегодня многие распределенные системы, работающие в рамках локальной вычислительной сети, также используют Web-интерфейс, потому как он является удобным и гибким инструментом. Ни одна серьезная система сегодня не обходится без работы с базой данных. Часто в качестве таковой выступает БД Oracle. В данной статье речь пойдет о том, как создать Web-интерфейс для систем, которые используют в качестве БД Oracle.

Web-интерфейс или обычный windows-интерфейс?

При появлении глобальной сети Интернет возникла необходимость в браузере - универсальной программе, способной предоставить доступ к любому из тысяч сайтов Интернета. Со временем производители программного обеспечения поняли, что браузер - это не только средство просмотра информации, но это еще и платформа, позволяющая создавать приложения, доступные любому пользователю Интернета без необходимости установки дополнительного программного обеспечения.

Аналогично Windows-платформе для создания программ, способных работать на ней, также и браузер является платформой для приложений, доступных нам через сеть. Причем в последних можно не только получить информацию, но и произвести какие-либо действия, аналогично обычной Windows-программе.

Естественно, что браузер, несмотря на то что в последние годы появились такие технологии поддержки Web-интерфейса, как DHTML, Java Applets и другие, имеет менее мощные возможности по созданию пользовательского интерфейса.

Однако Web-интерфейс имеет ряд преимуществ перед windows-интерфейсом, что, как правило, и определяет выбор в пользу него. К Web-интерфейсу можно обратиться из браузера с любого компьютера в ЛС, и даже из Internet. Полномочия администратора проверяются при этом обычным способом через запрос имени и пароля, т.е. несанкционированный доступ исключен. Также Web-интерфейс, в отличие от графического, может настраиваться администратором без участия программиста, так как он основан на использовании html-шаблонов, таблиц стилей и т.п., поддающихся редактированию в обычном текстовом редакторе. То есть, имеется возможность изменить внешнее представление данных без перекомпиляции.

Формат транспортного документа

Итак, у нас есть БД в формате Oracle и Web-браузер, в котором мы хотим отображать данные и получать команды от пользователя на их модификацию и удаление. В данной статье мы не будем рассматривать операции, производимые между сервером БД и браузером клиентской части, потому как они всецело зависят от функциональной начинки системы. Позже мы лишь укажем, каким образом можно манипулировать содержимым транспортного документа.

Понятно, что нужно выбрать некий транспортный документ, связывающий между собой БД и Web-браузер. На сегодняшний день лучшим выбором является формат XML (расширяемый язык разметки, eXtensible Markup Language). Почему?

Основным назначением XML является описание структуры и семантики документа. Ключевым преимуществом XML перед другими форматами электронных документов является то, что в нем описание внешнего представления документа отделено от его структуры и содержания. XML является гибким языком, может использоваться для различных целей, при этом он способен обеспечить взаимодействие со многими системами и базами данных.

Применительно к современным мощным СУБД, таким как Oracle, XML-технология может быть использована для манипуляции с данными, содержащимися в таблицах БД, их [данных] отображения и других операций. Например, для записи большого объема информации в поля таблиц или представлений БД, XML-документ в качестве источника данных подходит лучше, чем другие электронные документы (мы не рассматриваем формат SQL, потому как он не пригоден для работы с Web-браузером и для манипуляции с данными).

Надеюсь, я сагитировал вас к использованию этого формата в качестве транспортного.

Поддержка работы с XML

Выбрали-то мы выбрали. Но смогут ли компоненты нашего программного продукта работать с документами этого формата?

Что касается Web-браузера, то тут можно быть спокойными. Сегодня практически все производители браузеров поддерживают формат XML, в том числе Microsoft и Netscape. Существует серия рекомендаций от W3C, в которых формулируется синтаксис XML, пригодный для использования в World Wide Web и построенный как подмножество уже имеющегося и широко используемого международного стандарта обработки текстов Standard Generalized Markup Language, SGML.

Теперь поговорим о поддержке XML БД Oracle. Корпорация Oracle поставляет набор компонентов, утилит и интерфейсов для организации работы с XML-документами. Этот набор включает:

- Программы-анализаторы XML-документов для Java, C, C++, PL/SQL (XML Parsers)

- XSLT-процессоры

- Генераторы XML-классов (Java и C++)

- XML SQL Utility for Java (XSU, выполняет отображение документа в объектно-реляционную базу данных, различные поисковые операции над данными, занесенными в базу данных)

- XSQL Servlet

- XML Transviewer Beans

Таким образом, видно, что и Oracle полностью поддерживает работу с XML-документами.

Работа с БД Oracle через XML-интерфейс

Утилита XSU (XML-SQL Utility) входит в состав набора средств Java для работы с XML компании Oracle (XDK, Oracle XML Developer's Kit for Java). XSU является надстройкой над JDBC(Java Database Connectivity, интерфейс доступа к базам данных из Java) и позволяет сохранять XML-данные в базе данных и извлекать их оттуда.

XSU позволяет выполнять все необходимые операции извлечения, вставки, обновления и удаления, используя в качестве источника/приемника данных XML-документ. Приведем перечень операций, которые может выполнять эта утилита (по сути, представляющая собой иерархию Java-классов):

- трансформация данных из таблиц и представлений (views) объектно-реляционной базы данных в формат XML;

- вставка данных из XML-документов в таблицы и представления;

- извлечение данных из XML-документов и обновление в соответствии с ними информации, хранящейся в БД; при этом задаются ключевые поля, указывающие, в каких именно строках необходимо обновить данные;

- удаление записей из таблицы или представления по ключевым полям, заданным в виде XML-документа.

Для работы с XSU необходимо иметь jar-файл, содержащий пакет oracle/xml. Он доступен адресам http://otn.oracle.com/software/content.html, http://otn.oracle.com/tech/xml/xdk_java/content.html). Также можно получить документацию по пакету XDK (в которой, само собой, содержится часть, относящаяся к XSU).

Манипулирование содержимым XML-документа

Теперь вернемся к вопросу о том, как манипулировать данными, находящимися в формате XML. Существует два основных способа работы с содержимым XML-документа: построение объектной модели документа (Document Object Model, DOM) и использование простого интерфейса прикладного программирования (Simple API for XML, SAX).

SAX-модель целесообразно применять в случаях, когда XML-документ является достаточно большим и необходимо извлечь из него лишь маленький фрагмент информации. Указанная модель "осуществляет мониторинг" событий (таких как начало документа, начало элемента, содержимое элемента, конец элемента, конец документа и т.д.) по мере их возникновения при анализе документа и может считывать в память только интересующие части документа. Например, можно определить обработчик события "начало тега". Функция-обработчик будет выполняться всякий раз, когда анализатор наткнется на новый тег.

DOM представляет документ как иерархию объектов типа узел (node). На вершине иерархии находится узел document, который представляет весь документ. В качестве узлов в DOM представлено все содержание документа. Навигацию по дереву документа можно начинать с любого узла-элемента, для которого известен идентификатор, присваиваемый ему в качестве значения атрибута ID или с узла, для которого известно имя соответствующего тега. Стартуя с некоторого узла, можно перемещаться по дереву в любом направлении, используя ряд свойств узлов (например, у каждого узла, кроме корневого, есть ссылка на родительский узел) и при этом выполнять необходимые действия. Обычно DOM используют, когда необходимо работать с документом целиком.

На рисунке 1, пояснения, как приложение взаимодействует с XML-анализатором.

Приведем простой пример обработки xml-документа на языке Java. Пусть файл "d:\xmlfile_in.xml" содержит XML-документ следующего вида:

<?xml version="1.0" encoding="UTF-8"?>
<sign_config_doc>
<flds_to_sign>
<simple_flds/>
<table_flds>
<ORG_LIST/>
<DOCUMENT_LIST/>
<GRAPHA_C/>
</table_flds>
</flds_to_sign>
</sign_config_doc>

После выполнения кода функции main из листинга 1,

import oracle.xml.parser.v2.XMLDocument;
import oracle.xml.parser.v2.DOMParser;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.File;
import java.io.FileOutputStream;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
public class testXML {
public static void main (String args[]) {
try {
XMLDocument xml = new XMLDocument();
// чтение XML-документа из файла "d:\\xmlfile_in.xml"
DOMParser parser2 = new DOMParser();
parser2.setPreserveWhitespace(true);
URL priorDocURL;
priorDocURL = createURL("d:\\xmlfile_in.xml");
parser2.parse(priorDocURL);
xml = parser2.getDocument();
// получаем ссылку на узел table_flds
Node tfNode = xml.getDocumen-tElement().getElementsByTagName("table_flds").-item(0);
// получаем родительский узел для table_flds (то есть flds_to_sign)
Node parentN = tfNode.getParentNode();
// удаляем узел table_flds и всех его потомков
parentN.removeChild(tfNode);
// создадим новый элемент "MODIFY_-COUNTER"
Element mC_el = xml.createElement-("MODIFY_COUNTER");
// добавим к flds_to_sign дочерний узел "MODIFY_COUNTER" со значением "12345"
mC_el.appendChild(xml.createTextNode("12345"));
parentN.appendChild(mC_el);
// сохраним изменения в отдельном файле "d:\\xmlfile_out.xml"
FileOutputStream os=new FileOutputStream("d:\\xmlfile_out.xml");
xml.print(os);
os.close();
} catch(Exception e) {
System.out.println("Error: " + e);
}
}
private static URL createURL(String fileName) {
URL url = null;
try {
url = new URL(fileName);
} catch (MalformedURLException ex) {
File f = new File(fileName);
try {
String path = f.getAbsolutePath();
String fs = System.getProperty-("file.separator");
if (fs.length() == 1) {
char sep = fs.charAt(0);
if (sep != '/')
path = path.replace(sep, '/');
if (path.charAt(0) != '/')
path = '/' + path;
}
path = "file://" + path;
url = new URL(path);
} catch (MalformedURLException e) {
System.out.println ("Cannot create url for: " + fileName);
System.exit(0);
}
}
return url;
} // private static URL createURL(String fileName)
} // class testXML

Листинг 1. Пример работы с XML-документами

получим выходной XML-файл ("d:\\xmlfile_out.xml") следующего вида:

<?xml version="1.0" encoding="UTF-8"?>
<sign_config_doc>
<flds_to_sign>
<simple_flds/>
<MODIFY_COUNTER>12345</MODIFY_COUNTER>
</flds_to_sign>
</sign_config_doc>

Спецификации W3C модели DOM доступны по адресам: http://www.w3.org/TR/DOM-Level-2-Core/, http://www.w3.org/TR/DOM-Level-2-Views/, http://www.w3.org/TR/DOM-Level-2-Events/, http://www.w3.org/TR/DOM-Level-2-Style/, http://www.w3.org/TR/DOM-Level-2-Traversal-Range/.

Архитектура системы с Web-интерфейсом

Можно придумать множество вариантов построения нашей системы. Например, на основе CGI (Common Gateway Interface - общий шлюзовой интерфейс) или ISAPI (Microsoft Internet Server Application Program Interface - интерфейс приложений Internet-сервера фирмы Microsoft). Мы же остановимся на способе, основанном на языке программирования Java.

Проектируемая нами система использует в качестве моста, соединяющего БД Oracle и Web-браузер, формат XML. Теперь подробнее разберемся, каким образом данные вынимаются (модифицируются) из (в) БД Oracle и каким образом XML преобразуется в вид, приемлемый для отображения в браузере?

Для сохранения XML-данных в БД Oracle и извлечения их оттуда (в виде XML-документов) на языке Java применяется утилита XML-SQL (XML SQL Utility for Java, XSU), которая входит в состав набора средств Java для работы с XML компании Oracle (XDK, Oracle XML Developer's Kit for Java). XSU является надстройкой над JDBC (Java Database Connectivity, интерфейс доступа к базам данных из Java), который позволяет выполнять предложения SQL. Поэтому, используя XSU, мы можем в любой момент программным образом получить часть данных из БД в виде XML-документа и вставить (а также изменить и удалить) XML-данные в БД.

Теперь перейдем к ответу на второй вопрос: как XML преобразуется в вид, приемлемый для отображения в браузере? Очень просто. Есть много способов такого преобразования. Например, для задания внешнего представления документов можно использовать язык XSL (eXtensible Stylesheet Language). Он позволяет создавать стили, служащие для перевода XML-документов в другие форматы, например, HTML (Hypertext Markup Language).

Архитектура системы с Web-интерфейсом, описанная выше, схематично изображена на рисунке 2.

Обмен информацией между Web-клиентом и сервером

Теперь давайте поговорим о том, как сервер БД передает информацию на сторону клиента, и о том, какие существуют способы работы с объектно-реляционной базой данных (такой как Oracle).

Основным протоколом при работе браузера c Internet (и Intranet) является протокол HTTP (HyperText Transfer Protocol - протокол передачи гипертекста). Этот протокол предполагает взаимодействие браузера (Web-клиента) c HTTP-сервером по принципу "вопрос - ответ". Так, браузер посылает запрос HTTP-серверу на информацию, а Web-сервер отсылает клиенту сформированную HTML-страницу и "забывает" о клиенте.

В свою очередь, работа клиентов с базами данных также строится либо по принципу "вопрос - ответ" (например, в случае одиночного SQL-запроса), либо ориентирована на поддержание постоянного соединения "Login - Logout".

Обычно такие системы, как поисковые, справочные, работают по принципу "вопрос - ответ". При этом пользователи подают запросы на Web-сервер, который обрабатывает их и отсылает ответ клиенту.

Принцип поддержания постоянного соединения обычно предполагает проверку паролей пользователей и применяется в системах, где важным является разграничение прав доступа к информации. Например, такой принцип применяется в системах электронной почты, основанных на Web (например, http://www.mail.ru/). При таком подходе Web-сервер вынужден на протяжении всего сеанса работы с базой данных хранить информацию о подключенном пользователе. По запросу Web-клиента "Logout" Web-сервер "отключает" пользователя. Подобный подход позволяет производить однократную проверку пароля при подключении с последующей передачей (при работе с базой) уникального идентификатора, однозначно определяющего конкретного пользователя на время всего сеанса работы. Такой уникальный идентификатор присваивается клиенту сервером и передается серверу при каждом запросе к базе данных. Если пользователь забудет отключиться от системы, через некоторое время Web-сервер сам его отключит.

Ссылки

По следующим адресам можно найти информацию об Oracle XML Developer's Kit for Java (XDK):
http://otn.oracle.com/tech/xml/xdk_java/content.html
http://otn.oracle.com/software/content.html

Спецификация Extensible Markup Language (XML):
http://www.w3.org/TR/REC-xml

Спецификация Extensible Stylesheet Language (XSL):
http://www.w3.org/TR/xsl/

Спецификация XSL Transformations (XSLT):
http://www.w3.org/TR/xslt20/



статьи
статьи
 / 
новости
новости
 / 
контакты
контакты