package javacodebook.xml.transformation.xslt.servlet;
import java.io.*;
// JAXP Interfaces importieren
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
* Dieses Servlet unterstützt die http-Get-Methode und erwartet die 2
* obligatorischen Prameter xml und xsl. Sie müssen mit
* Dateinamen auf Pfaden relativ zu dem
* Home-Verzeichnis der Webapplikation belegt sein. Es bedient sich der
* JAXP-API, um das XML und das XSL zusammen zu führen und zum
* Client zurück zu schreiben.
* Desweiteren kann ein optionaler Parameter namens param übergeben werden
* der an das Stylesheet weitergereicht wird.
*/
public class XSLTServlet
extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOException {
PrintWriter out = res.getWriter();
String xslFile, xmlFile, xslParam;
// die Parameter werden ausgelesen
xslParam = req.getParameter("param");
xmlFile = req.getParameter("xml");
xslFile = req.getParameter("xsl");
if (xmlFile == null || xslFile == null) {
out.println(
"
Bitte die http-Parameter 'xml' und 'xsl' übergeben
");
return;
}
// Auslesen des Pfads zur Webapplikation
String path = getServletContext().getRealPath("") + "/";
try {
// Es wird ein TransformerFactory-Objekt erzeugt
TransformerFactory tFactory = TransformerFactory.newInstance();
// Über das Transformer-Factory-Objekt wird ein Transformer-Objekt
// auf Basis des StyleSheets bezogen.
Transformer transformer = tFactory.newTransformer(new StreamSource(path+xslFile));
// Setzen des Sylesheetparameters namens 'param'.
// Dies ermöglicht, dass im Style-Sheet z.B. nach bestimmten
// Kriterien gefiltert wird. Wie so ein Parameter
// im XSL wieder ausgelesen wird, zeigt das Beispiel showEmployee.xsl.
if (xslParam != null) {
transformer.setParameter("param", xslParam);
}
// Die Transformation wird durchgeführt und dabei das Resultat
// in das StreamResult-Objekt geschrieben.
transformer.transform(new StreamSource(path+xmlFile), new StreamResult(out));
}
catch (Exception e) {
// Eine eventuelle Fehlermeldung wird zum Client geschrieben.
out.println("Die Transformation konnte nicht durchgeführt werden: "+e+"
");
}
}
}