Технология XSLT
Шрифт:
Второй вариант того же самого сервлета, который мы предложим ниже, демонстрирует, как в данном случае при помощи XSLT можно разделить данные и их презентацию. Идея очень проста: вместо того, чтобы в жестко заданном виде выводить информацию в выходящий поток, можно создать XML-документ в виде DOM-объекта и затем применить к нему XSLT-преобразование, которое создаст для него требуемое HTML-представление.
В этом варианте сервлета мы будем использовать Java-версию XML-библиотеки Oracle XDK (Oracle XML SDK, платформа разработки XML-приложений, созданная в Oracle Corp.). В данном примере из этой библиотеки мы будем использовать только XSLT-процессор (класс
XSLProcessor
) и реализацию DOM-модели XML-документа (класс XMLDocument
).
Листинг 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,
HttpServletResponse response)
throws ServletException, IOException {
// Выставляем тип содержимого
response.setContentType("text/html");
// Инициализируем выходящий поток
OutputStreamWriter o_sw =
new OutputStreamWriter(response.getOutputStream);
PrintWriter out = new PrintWriter(response.getOutputStream);
// Получаем объекты
cookie Cookie[] cookies = request.getCookies;
// Создаем выходящий документ
XMLDocument doc = new XMLDocument;
//
Создаем корневой элемент
Request Element elRequest = doc.createElement("Request");
doc.appendChild(elRequest);
// Создаем элемент General
Element elGeneral = addElement(elRequest, "General", null);
// Создаем элементы, содержащие общую информацию
addElement(elGeneral, "ServerName", request.getServerName);
addElement(elGeneral, "ServerPort",
Integer.toString(request.getServerPort));
addElement(elGeneral, "RemoteAddr", request.getRemoteAddr);
addElement(elGeneral, "Protocol", request.getProtocol);
addElement(elGeneral, "Method", request.getMethod);
addElement(elGeneral, "RequestURI", request.getRequestURI);
addElement(elGeneral, "QueryString", request.getQueryString);
// Создаем элемент Param
Element elParam = addElement(elRequest, "Param", null);
// В элементе Param создаем элементы, описывающие параметры запроса
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++)
addElement(elParam, name, values[i]);
}
// Создаем элемент Session
Element elSession = addElement(elRequest, "Session", null);
// Получаем объект HTTP-сессии
HttpSession session = request.getSession(true);
// Получаем имена параметров сессии
String[] names = session.getValueNames;
// В элементе 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(
Поделиться с друзьями: