Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВСхнология XSLTΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 95

Автор АлСксСй Π’Π°Π»ΠΈΠΊΠΎΠ²

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(

    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-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, сгСнСрированный Π² сСрвлСтС

<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&amp;y=2&amp;z=3&amp;x=4&amp;y=5&amp;z=6

  </QueryString>

 </General>

 <Param>

  <z>3</z>

  <z>6</z>

  <y>2</y>

  <y>5</y>

  <x>1</x>

  <x>4</x>

 </Param>

 <Session>

  <v>4</v>

 </Session>

 <Cookie>

  <content>apple jam</content>

  <JServSessionIdroot>aaenbyjqc0</JServSessionIdroot>

 </Cookie>

</Request>

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ гСнСрация Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, ΠΊ Π½Π΅ΠΌΡƒ примСняСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ stylesheet.xsl, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ создаСт Π΅Π³ΠΎ HTML-прСдставлСниС.

Листинг 9.25. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ stylesheet.xsl

<xsl:stylesheet

 version="1.0"

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


 <xsl:template match="Request">

  <html>

   <head>

    <title>Request information</title>

   </head>

   <body><xsl:apply-templates mode="table"/></body>

  </html>

 </xsl:template>


 <xsl:template match="*" mode="table">

  <h1><xsl:apply-templates select="." mode="header"/></h1>

  <table><xsl:apply-templates mode="row"/></table>

 </xsl:template>


 <xsl:template match="General" mode="header">

  <xsl:text>General information</xsl:text>

 </xsl:template>


 <xsl:template match="Param" mode="header">

  <xsl:text>Request parameters</xsl:text>

 </xsl:template>


 <xsl:template match="Session" mode="header">

  <xsl:text>Session parameters</xsl:text>

 </xsl:template>


 <xsl:template match="Cookie" mode="header">

  <xsl:text>Cookies</xsl:text>

 </xsl:template>


 <xsl:template match="*" mode="row">

  <tr>

   <td><xsl:apply-templates select="." mode="name"/></td>

   <td><xsl:value-of select="."/></td>

  </tr>

 </xsl:template>


 <xsl:template match="*" mode="name">

  <xsl:value-of select="name()"/>

 </xsl:template>


 <xsl:template match="General/ServerName" mode="name">

  <xsl:text>Server name</xsl:text>

 </xsl:template>


 <xsl:template match="General/ServerPort" mode="name">

  <xsl:text>Server port</xsl:text>

 </xsl:template>


 <xsl:template match="General/RemoteAddr" mode="name">

  <xsl:text>Remote address</xsl:text>

 </xsl:template>


 <xsl:template match="General/RequestURI" mode="name">

  <xsl:text>Request URI</xsl:text>

 </xsl:template>


 <xsl:template match="General/QueryString" mode="name">

  <xsl:text>Query string</xsl:text>

 </xsl:template>

</xsl:stylesheet>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этого прСобразования являСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, внСшний Π²ΠΈΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π½Π° рис. 9.13.

Листинг 9.26. Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

<html>

 <head>

  <title>Request information</title>

 </head>

 <body>

  <h1>General information</h1>

  <table>

   <tr>

    <td>Server name</td>

    <td>aphrodite.fzi.de</td>

   </tr>

   <tr>

    <td>Server port</td>

    <td>80</td>

   </tr>

   <tr>

    <td>Remote address</td>

    <td>127.0.0.1</td>

   </tr>

   <tr>

    <td>Protocol</td>

    <td>HTTP/1.1</td>

   </tr>

   <tr>

    <td>Method</td>

    <td>GET</td>

   </tr>

   <tr>

    <td>Request URI</td>

    <td>/servlet/example1</td>

   </tr>

   <tr>

    <td>Query string</td>

    <td>x=1&amp;y=2&amp;z=3&amp;x=4&amp;y=5&amp;z=6</td>

   </tr>

  </table>

  <h1>Request parameters</h1>

  <table>

   <tr>

    <td>z</td>