Ejemplo completo
Código XSP
demo.xsp
<?xml version="1.0" encoding="UTF-8"?>
<?cocoon-process type="xsp"?>
<!-- Instrucción que indica que se debe procesar como XSP -->
<?cocoon-process type="xslt"?>
<!-- Instrucción que indica que después se debe aplicar una transformación XSLT -->
<?xml-stylesheet type="text/xsl" href="demo.xsl"?>
<xsp:page language="java" xmlns:xsp="http://www.apache.org/1999/XSP/Core">
<!-- La lógica no tiene por qué estar en Java -->
<!-- Se debe cargar el espacio de nombres para las etiquetas de control XSP -->
<xsp:structure>
<xsp:include>java.text.SimpleDateFormat</xsp:include>
</xsp:structure>
<xsp:logic>
<!-- Esta lógica va a nivel de clase-->
private Date start = new Date();
private static SimpleDateFormat dateFormat = new SimpleDateFormat();
private String getStartDate(){
return dateFormat.format(start);
}
</xsp:logic>
<output><!--Elemento raíz del resultado-->
<xsp:logic><!--Esta lógica va en el método populateDocument() -->
String a = request.getParameter( "a");
String b = request.getParameter( "b");
Date now = new Date();
<xsp:content>
<titulo> Esto es una demostración de XSP</titulo>
<parrafo>Se han introducido los parámetros a=[<xsp:expr>a</xsp:expr>]
y b=[<xsp:expr>b</xsp:expr>]</parrafo>
<parrafo>El proceso de la pagina comenzó en el instante:
<xsp:expr>getStartDate()</xsp:expr></parrafo>
</xsp:content>
</xsp:logic>
</output>
</xsp:page>
Clase generada por Cocoon para esa XSP
_demo.java
package _D_._Allaire._JRun31._servers._web_construplaza._default_app._admintool;
// Paquete generado por Cocoon
import java.io.*;
import java.net.*;
import java.util.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.cocoon.parser.*;
import org.apache.cocoon.producer.*;
import org.apache.cocoon.framework.*;
import org.apache.cocoon.processor.xsp.*;
import org.apache.cocoon.processor.xsp.library.*;
/* User Imports */
import java.text.SimpleDateFormat;
public class _demo extends XSPPage {
/* User Class Declarations */
private Date start = new Date();
private static SimpleDateFormat dateFormat = new SimpleDateFormat();
private String getStartDate(){
return dateFormat.format(start);
}
public void populateDocument(
HttpServletRequest request,
HttpServletResponse response,
Document document
)
throws Exception
{
// Node stack logic variables
Node xspParentNode = null;
Node xspCurrentNode = document;
Stack xspNodeStack = new Stack();
// Make session object readily available
HttpSession session = request.getSession(false);
document.appendChild(
document.createProcessingInstruction(
"cocoon-process",
"type=\"xslt\""
)
);
document.appendChild(
document.createProcessingInstruction(
"xml-stylesheet",
"type=\"text/xsl\" href=\"demo.xsl\""
)
);
xspParentNode = xspCurrentNode;
xspNodeStack.push(xspParentNode);
xspCurrentNode =
document.createElement("output");
xspParentNode.appendChild(xspCurrentNode);
xspCurrentNode.appendChild(
document.createTextNode("\n\t\t")
);
String a = request.getParameter( "a");
String b = request.getParameter( "b");
Date now = new Date();
xspCurrentNode.appendChild(
document.createTextNode("\n\t\t\t\t")
);
xspParentNode = xspCurrentNode;
xspNodeStack.push(xspParentNode);
xspCurrentNode =
document.createElement("titulo");
xspParentNode.appendChild(xspCurrentNode);
xspCurrentNode.appendChild(
document.createTextNode(" Esto es una demostración de XSP")
);
((Element) xspCurrentNode).normalize();
xspCurrentNode = (Node) xspNodeStack.pop();
xspCurrentNode.appendChild(
document.createTextNode("\n\t\t\t\t")
);
xspParentNode = xspCurrentNode;
xspNodeStack.push(xspParentNode);
xspCurrentNode =
document.createElement("parrafo");
xspParentNode.appendChild(xspCurrentNode);
xspCurrentNode.appendChild(
document.createTextNode("Se han introducido los parámetros a=[")
);
xspCurrentNode.appendChild(
xspExpr(a, document)
);
xspCurrentNode.appendChild(
document.createTextNode("] y b=[")
);
xspCurrentNode.appendChild(
xspExpr(b, document)
);
xspCurrentNode.appendChild(
document.createTextNode("]")
);
((Element) xspCurrentNode).normalize();
xspCurrentNode = (Node) xspNodeStack.pop();
xspCurrentNode.appendChild(
document.createTextNode("\n\t\t\t\t")
);
xspParentNode = xspCurrentNode;
xspNodeStack.push(xspParentNode);
xspCurrentNode =
document.createElement("parrafo");
xspParentNode.appendChild(xspCurrentNode);
xspCurrentNode.appendChild(
document.createTextNode("El proceso de la pagina comenzó en el instante: ")
);
xspCurrentNode.appendChild(
xspExpr(getStartDate(), document)
);
((Element) xspCurrentNode).normalize();
xspCurrentNode = (Node) xspNodeStack.pop();
xspCurrentNode.appendChild(
document.createTextNode("\n\t\t\t")
);
xspCurrentNode.appendChild(
document.createTextNode("\n\t")
);
((Element) xspCurrentNode).normalize();
xspCurrentNode = (Node) xspNodeStack.pop();
}
}
XML generado por la XSP
Petición demo.xsp?a=1111&b=2222
<output>
<titulo> Esto es una demostración de XSP </titulo>
<parrafo>
Se han introducido los parámetros a=[1111] y b=[2222]
El proceso de la pagina comenzó en el instante: 5/07/01 14:31
</parrafo>
</output>
Hoja de estilo
demo.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- ********************************************************************-->
<xsl:template match="output">
<html>
<head>
<title>Demo XSP</title>
</head>
<body bgcolor="#FFFFFF">
<h1><xsl:value-of select="titulo"/></h1>
<hr/>
<xsl:apply-templates select="parrafo"/>
</body>
</html>
</xsl:template>
<!-- ********************************************************************-->
<xsl:template match="parrafo">
<h3><xsl:value-of select="."/></h3>
</xsl:template>
<!-- ********************************************************************-->
</xsl:stylesheet>
Resultado en HTML
Petición demo.xsp?a=1111&b=2222
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REChtml40/
strict.dtd">
<html>
<head>
<title>Demo XSP</title>
</head>
<body bgcolor="#FFFFFF">
<h1> Esto es una demostración de XSP</h1>
<hr>
<h3>Se han introducido los parámetros a=[1111] y b=[2222]</h3>
<h3>El proceso de la pagina comenzó en el instante: 5/07/01 14:31</h3>
</body>
</html>
Vista en el navegador:
Con este ejemplo da una idea de cómo son las XSP y para qué sirven (sobre todo si el
lector tiene conocimientos de XML, XSL y JSPs). Para aprender más sobre XSPs véase la sección
de referencias al final del capítulo, aunque la documentación a fecha de hoy es más bien
escasa.