Programación en castellano
Inicio > Tutoriales > APIS Java > El sistema de publicación en web Cocoon
-Tutoriales

El sistema de publicación en web Cocoon


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&oacute;n de XSP</h1>
<hr>
<h3>Se han introducido los par&aacute;metros a=[1111] y b=[2222]</h3>
<h3>El proceso de la pagina comenz&oacute; en el instante: 5/07/01 14:31</h3>
</body>
</html>

Vista en el navegador:

Resultado

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.

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados