на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



Листинг 9.22. Традиционный вариант сервлета

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

import java.util.*;


public class example extends HttpServlet {

 /**

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

 */

 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 osw =

   new OutputStreamWriter(response.getOutputStream());

  PrintWriter out = new PrintWriter (response.getOutputStream());

  // Выполняем вывод HTML-страницы

  out.println("");

  // Выводим головную часть HTML-документа

  out.println(" ");

  out.println("  Request information");

  out.println(" ");

  // Выводим тело документа

  out.println(" ");

  // Выводим общую информацию о запросе

  out.println(" 

General information

");

  out.println(" 

");

  // Выводим имя сервера

  out.println("  

");

  out.println("   

");

  out.println("   

");

  out.println("  

");

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

  out.println("  

");

  out.println("   

");

  out.println("   

");

  out.println("  

");

  // Выводим адрес запрашивающей стороны

  out.println("  

");

  out.println("   

") ;

  out.println("   

");

  out.println("  

");

  // Выводим название протокола запроса

  out.println("  

");

  out.println("   

");

  out.println("   

");

  out.println("  

");

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

  out.println("  

") ;

  out.println("   

");

  out.println("    

");

  out.println("  

");

  // Выводим URI запроса

  out.println("  

");

  out.println("   

");

  out.println("   

");

  out.println("  

");

  // Выводим строку запроса

  out.println("  

");

  out.println("   

");

  out.println("   

");

  out.println("  

");

  out.println("  

Server name " + request.getServerName() + "
Server port " + request.getServerPort() + "
Remote address " + request.getRemoteAddr() + "
Protocol " + request.getProtocol() + "
Method " + request.getMethod() + "
Request URI " + request.getRequestURI() + "
Query String " + request.getQueryString() + "
");

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

  out.println(" 

Request parameters

");

  out.println(" 

");

  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("  

");

    out.println("   

");

    out.println("   

");

    out.println("  

");

   }

  }

  out.println(" 

" + name + " " + values[i] + "
");

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

  out.println(" 

Session parameters

");

  out.println(" 

");

  HttpSession session = request.getSession(true);

  String[] names = session.getValueNames();

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

   String name = session.getValueNames()[i];

   out.println("  

");

   out.println("   

");

   out.println("   

");

   out.println("  

");

  }

  out.println(" 

" + name + " " +

   session.getValue(name).toString() + "

");

  // Выводим cookies

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

  out.println(" 

Cookies

");

  out.println(" 

");

  Cookie[] cookies = request.getCookies();

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

   out.println("  

");

   out.println("   

");

   out.println("   

");

   out.println("  

");

  }

  out.println(" 

" + cookies[i].getName() + " " + cookies[i].getValue() + "
");

  out.println(" ");

  out.println("");

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

  out.close();

 }

}

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

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

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

Технология XSLT

Рис. 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-документом на уровне модели: создавать и включать друг в друга узлы элементов, текстовые узлы и так далее.


Выполнение XSLT-преобразований в Java | Технология XSLT | Листинг 9.23. Вариант сервлета, использующий XSLT