Технология XSLT — страница 49 из 66

  // В элементе Session создаем по элементу

  // для каждого из параметров сессии

  for (int i=0; i < names.length; i++)

   addElement(elSession, session.getValueNames()[i],

    session.getValue(session.getValueNames()[i]).toString());

  // Создаем элемент Cookie

  Element elCookie = addElement(elRequest, "Cookie", null);

  // Создаем по элементу для каждого из объектов cookies

  for (int i=0; i < cookies.length; i++)

   addElement(elCookie, cookies[i].getName(), cookies[i].getValue());

  // Преобразовываем созданный документ и выводим результат

  try {

   // Загружаем преобразование

   XSLStylesheet stylesheet = new XSLStylesheet(

    new URL("http://localhost/stylesheet.xsl"), null);

   // Выполняем преобразование

   XMLDocumentFragment fragment =

    (XMLDocumentFragment)doc.transformNode(stylesheet);

   // Выводим результат

   fragment.print(out);

  }

  catch (MalformedURLException mue) {} 

  catch (XSLException xsle) {}

  // Закрываем выходящий поток

  out.close();

 }

}

В этом сервлете вместо того, чтобы просто печатать в выходящий поток данные и HTML-разметку, в переменной

doc
мы генерируем DOM-объект XML-документа. После того как все текстовые узлы и узлы элементов будут сгенерированы, документ, содержащийся в переменной
doc
, примет приблизительно следующий вид.

Листинг 9.24. XML-документ, сгенерированный в сервлете

aphrodite.fzi.de

80

127.0.0.1

HTTP/1.1

GET

/servlet/example1

x=1&y=2&z=3&x=4&y=5&z=6

3

6

2

5

1

4

4

apple jam

aaenbyjqc0

После того как генерация документа завершена, к нему применяется преобразование

stylesheet.xsl
, которое создает его HTML-представление.

Листинг 9.25. Преобразование stylesheet.xsl

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


Request information



General information


Request parameters


Session parameters


Cookies




Server name


Server port


Remote address


Request URI


Query string

Результатом этого преобразования является следующий HTML-документ, внешний вид которого полностью идентичен документу, показанному на рис. 9.13.

Листинг 9.26. Результирующий HTML-документ

Request information

General information

Server nameaphrodite.fzi.de
Server port80
Remote address127.0.0.1
ProtocolHTTP/1.1
MethodGET
Request URI/servlet/example1
Query stringx=1&y=2&z=3&x=4&y=5&z=6

<