Чтение онлайн

на главную

Жанры

Технология XSLT

Валиков Алексей Н.

Шрифт:

out.println(" <table>");

for (Enumeration e = request.getParameterNames;

e.hasMoreElements;) {

String name = e.nextElement.toString;

String[] values = request.getParameterValues(name);

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

out.println(" <tr>");

out.println(" <td>" + name + "</td>");

out.println(" <td>" + values[i] + "</td>");

out.println(" </tr>");

}

}

out.println(" </table>");

//
Выводим параметры HTTP-сессии

out.println(" <h1>Session parameters</h1>");

out.println(" <table>");

HttpSession session = request.getSession(true);

String[] names = session.getValueNames;

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

String name = session.getValueNames[i];

out.println(" <tr>");

out.println(" <td>" + name + "</td>");

out.println(" <td>" +

session.getValue(name).toString + "</td>");

out.println(" </tr>");

}

out.println(" </table>");

// Выводим cookies

response.addCookie(new Cookie("content", "apple jam"));

out.println(" <h1>Cookies</h1>");

out.println(" <table>");

Cookie[] cookies = request.getCookies;

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

out.println(" <tr>");

out.println(" <td>" + cookies[i].getName + "</td>");

out.println(" <td>" + cookies[i].getValue + "</td>");

out.println(" </tr>");

}

out.println(" </table>");

out.println(" </body>");

out.println("</html>");

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

out.close;

 }

}

Результатом обращения к этому сервлету по URL вида

http://localhost/servlet/example?x=1&y=2&z=3&x=4&y=5&z=6

будет документ, аналогичный представленному на рис. 9.13.

Рис. 9.13. Результат обращения к сервлету

Несложно видеть, насколько жестко в этом сервлете закодирована презентация данных: для минимального изменения генерируемого документа придется в обязательном порядке

изменять сам сервлет, что в современных системах может быть непозволительной роскошью, — все равно, что перебирать мотор для того, чтобы перекрасить автомобиль.

Второй вариант того же самого сервлета, который мы предложим ниже, демонстрирует, как в данном случае при помощи XSLT можно разделить данные и их презентацию. Идея очень проста: вместо того, чтобы в жестко заданном виде выводить информацию в выходящий поток, можно создать XML-документ в виде DOM-объекта и затем применить к нему XSLT-преобразование, которое создаст для него требуемое HTML-представление.

В этом варианте сервлета мы будем использовать Java-версию XML-библиотеки Oracle XDK (Oracle XML SDK, платформа разработки XML-приложений, созданная в Oracle Corp.). В данном примере из этой библиотеки мы будем использовать только XSLT-процессор (класс

XSLProcessor
) и реализацию DOM-модели XML-документа (класс
XMLDocument
). Во всем остальном мы будем полагаться на Java-реализацию стандартных интерфейсов объектной модели документа DOM, разработанной Консорциумом W3. DOM-интерфейсы позволят нам манипулировать XML-документом на уровне модели: создавать и включать друг в друга узлы элементов, текстовые узлы и так далее.

Листинг 9.23. Вариант сервлета, использующий XSLT

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;

import java.net.*;

import oracle.xml.parser.v2.*;

import org.w3c.dom.*;

public class example extends HttpServlet {

 /**

 * Функция, создающая в элементе parent элемент с именем name и

 * текстовым значением value. Если value имеет значение null,

 * текст не создается.

 */

 public static Element addElement(Element parent, String name, String value) {

Element child = parent.getOwnerDocument.createElement(name);

parent.appendChild(child);

if (value != null) {

Text text = parent.getOwnerDocument.createTextNode(value);

child.appendChild(text);

}

return child;

 }

 /**

 * Инициализация.

 */

 public void init(ServletConfig config) throws ServletException {

super.init(config);

 }

 /**

 * Основной метод сервлета

 */

 public void service(HttpServletRequest request,

Поделиться:
Популярные книги

Дворянская кровь

Седой Василий
1. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Дворянская кровь

Газлайтер. Том 16

Володин Григорий Григорьевич
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 16

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Стрелок

Астахов Евгений Евгеньевич
5. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Стрелок

Шатун. Лесной гамбит

Трофимов Ерофей
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Шатун. Лесной гамбит

Проклятый Лекарь V

Скабер Артемий
5. Каратель
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Проклятый Лекарь V

На границе империй. Том 3

INDIGO
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 3

Новый Рал

Северный Лис
1. Рал!
Фантастика:
фэнтези
попаданцы
5.70
рейтинг книги
Новый Рал

Его наследник

Безрукова Елена
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Его наследник

Венецианский купец

Распопов Дмитрий Викторович
1. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
7.31
рейтинг книги
Венецианский купец

Мастер темных Арканов

Карелин Сергей Витальевич
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных Арканов

Всплеск в тишине

Распопов Дмитрий Викторович
5. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Всплеск в тишине

Начальник милиции

Дамиров Рафаэль
1. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2