Базы данных Oracle - статьи

         

Создание сервлета на Java


Oracle XML DB поддерживает Java Servlet API версии 2.2 с некоторыми ограничениями, и с возможностью дополнительно установить сервлет поддержки JSP.

Подготовим текст сервлета в файле XMLDBServlet.java:

import java.io.PrintWriter; import java.io.IOException; import javax.servlet.GenericServlet; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.ServletException;

public class XMLDBServlet extends GenericServlet {

public void service ( ServletRequest request

, ServletResponse response

) throws ServletException, IOException {

String s = request.getParameter ( "rex" );

response.setContentType ( "text/xml" );

PrintWriter out = response.getWriter ( ); out.println ( "<?xml version=\"1.0\"?>" ); out.println ( "<html><head>" ); out.println ( "<title>My XMLDBServlet servlet demo</title>" ); out.println ( "</head><body>" ); out.println ( "<h2>Ave, " + s + " !</h2>" ); out.println ( "</body></html>" ); out.close ( ); } }

Пример ради общности рассматривает употребление суперкласса GenericServlet, а не HttpServlet.

Загрузим сервлет в БД одним из возможных способов:

>loadjava -grant public -u scott/tiger -r XMLDBServlet.java

Проверкой легко убедиться, что СУБД не только загрузит в БД исходный текст, но и получит из него класс.

Чтобы сервлет мог вызываться извне, сведения о нем требуется занести в ресурс-файл /xdbconfig.xml в репозитарии XML DB. Это файл с «объектно-реляционным» храненнем, и подправить его можно либо через WebDAV (системами, обеспечивающими такую правку), либо обычными функциями UPDATEXML и прочими. (Именно этот файл не допускает удаления из репозитария, поэтому выгрузить его, подправить и загрузить заново невозможно).

Однако при желании, для удобства правки файла /xdbconfig.xml можно использовать специально созданые для этого подпрограммы пакета DBMS_XDB. Выполним в SQL*Plus от имени пользователя XDB:




DECLARE xval XMLTYPE;

xnode1 XMLTYPE := XMLTYPE ( ' <servlet xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"> <servlet-name>XMLDBServletPrimer</servlet-name> <servlet-language>Java</servlet-language> <display-name>Oracle XML DB Servlet Primer</display-name> <servlet-class>XMLDBServlet</servlet-class> <servlet-schema>SCOTT</servlet-schema> </servlet> ');

xnode2 XMLTYPE := XMLTYPE ( ' <servlet-mapping xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"> <servlet-pattern>/xdbserv</servlet-pattern> <servlet-name>XMLDBServletPrimer</servlet-name> </servlet-mapping> ');

BEGIN SELECT DBMS_XDB.CFG_GET ( ) INTO xval FROM dual;

SELECT INSERTCHILDXML ( xval, '/xdbconfig//servlet-list', 'servlet', xnode1

) INTO xval FROM dual ; SELECT INSERTCHILDXML ( xval, '/xdbconfig//servlet-mappings', 'servlet-mapping', xnode2

) INTO xval FROM dual ;

DBMS_XDB.CFG_UPDATE ( xval ); COMMIT; END; /

Теперь обращение по адресу:

даст результат:

Выдача данных в формате HTML и обращение к БД делается как обычно.

Например, для перехода к HTML в данном случае даже необязательно пользоваться классом HttpServlet. Достаточно в описании сервлета заменить text/xml на text/html и изъять строку out.println ( "<?xml version=\"1.0\"?>" );. Перетранслировав сервлет, получим по тому же адресу:

Обращение в тексте сервлета к данным БД делается как обычно для Java, и оставляется для самостоятельного упражнения.


Содержание раздела