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&y=2&z=3&x=4&y=5&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&y=2&z=3&x=4&y=5&z=6</td>
</tr>
</table>
<h1>Request parameters</h1>
<table>
<tr>
<td>z</td>