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

"); } } }