/**
* Основной метод сервлета
*/
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(
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
, примет приблизительно следующий вид.
<Request>
<General>
<ServerName>aphrodite.fzi.de</ServerName>
<ServerPort>80</ServerPort>
<RemoteAddr>127.0.0.1</RemoteAddr>
<Protocol>HTTP/1.1</Protocol>
<Method>GET</Method>
<RequestURI>/servlet/example1</RequestURI>
<QueryString>x=1&y=2&z=3&x=4&y=5&z=6
p>
</QueryString>
</General>
<Param>
<z>3</z>
<z>6</z>
<y>2</y>
<y>5</y>