Uso de XML e XSL em JSPs

Explicaremos como combinar XML e XSL para formatar um documento XML no servidor com versões antigas de JSP.
Publicado em: 25/10/06

Valorize este artigo:
Utilizando JSP 2.0, podemos combinar JSP e XSL para formatar documentos XML no servidor.

Nem sempre é possível (nem conveniente) utilizar o último do último. Se observarem, as grandes organizações normalmente padronizam uma versão de Java, JSP, EJB, etc... e até que se não passe um tempo e se consolidam as tecnologias (e aparecem remendos) não se muda de versão.

Então, é possível que tenhamos que nos virar para fazer o mesmo ..... com versões anteriores de JSP.

Vocês verão que é bastante simples e lhes mostraremos como se faz passo a passo.... utilizando o patrono MVC.

Colocaremos os exemplos com NetBeans. Muita gente me pergunta por que o utilizo..... A razão é simples, parece muito intuitivo... embora haja outras opções mais potentes.

Criar o Projeto

Criamos em NetBeans um projeto


Vamos criar alguns documentos XML e XSL com os geradores de código.


Selecionamos dentro do grupo XML


Atribuímos um nome

Vamos utilizar este documento como base:

<?xml versao="1.0" encoding="UTF-8"?>
<tutoriais>
 <tutorial>
   <autor>rcanales@autentia.com</autor>
   <nome>JSP 2.0</nome>
   <link>jspel</link>
   <descricao>Novas caracteristicas de JSPs 2.0</descricao>
 </tutorial>
 <tutorial>
   <autor>alejandropg@autentia.com</autor>
  <nome>Struts e Eclipse</nome>
  <link>struts</link>
  <descricao>Configuração do ambiente Struts em Eclipse</descricao>
 </tutorial>
</tutoriais>

Repetimos, porém agora selecionamos um documento XSL


Escrevemos nosso XSL

<?xml versao="1.0" encoding="UTF-8" ?>

<xsl:stylesheet versao="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>

  <xsl:template match="/">
   <table border="1">
   <tr>
    <td><b>Autor</b></td>
    <td><b>Nome</b></td>
    <td><b>Link</b></td>
    <td><b>Descrição</b></td>
   </tr>
   <xsl:for-each select="//tutorial">
    <tr>
    <td><xsl:value-of select="autor"/></td>
    <td><xsl:value-of select="nome"/></td>
    <td><xsl:value-of select="link"/></td>
    <td><xsl:value-of select="descrição"/></td>
   </tr>
  </xsl:for-each>
  </table>
</xsl:template>
</xsl:stylesheet>

Provar a transformação em NetBeans

Vamos usar as características de NetBeans para provar como ficaria....

Selecionamos, clicando o botão direito sobre o XML ou XSL


Selecionamos os arquivos


E vemos o resultado


Ativamos nosso diretório como uma WebApp


Introduzir o código Java

Agora, vamos escrever uma classe Java que seja capaz de fazer uma transformação e retorna-la como uma cadeia.


Escrever a classe Java de prova

Neste caso, vamos utilizar uma interface para motores de transformação denominado JAXP (ver documentação em SUN)

Não temos que incluir nada extraordinário pela versão de Java que estamos usando.

import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.sax.*;
import javax.xml.transform.stream.*;
import org.xml.sax.*;
/**
*
* @author Roberto Canales
*/
public class transformador
{
 void depura (String pCadeia)
  {
  System.out.println("Mensagem: " + pCadeia);
 }

  public static void main(String [] args) {
 transformador p = new transformador();

  try
 {
  p.depura("Comecamos transformacao");
   p.depura(p.transformar());
   p.depura("Terminamos");
 }
 catch(Exception e)
 {
  p.depura("Erros em aplicacao");
  e.printStackTrace();
  }
}

public String transformar() throws Exception
{
  String xmlOrigem = "C:\\exemplos\\jaxpjsp\\xmlbase.xml";
   String xslOrigem = "C:\\exemplos\\jaxpjsp\\xslbase.xsl";

  Source xmlSource = new StreamSource(new File(xmlOrigem));
  Source xsltSource = new StreamSource(new File(xslOrigem));

  StringWriter cadeiaSaida = new StringWriter();

  Result bufferResultado = new StreamResult(cadeiaSaida);

  TransformerFactory fabricaTrans = TransformerFactory.newInstance();
  Transformer transformador = fabricaTrans.newTransformer(xsltSource);

  transformador.transform(xmlSource, bufferResultado);

  return cadeiaSaida.toString();
}
}
Se executamos este código, veremos na tela de saída:

Mensagem: Começamos transformação
Mensagem: <table border="1">
<br>
<tr>

<td><b>Autor</b></td><td><b>Nome</b> </td><td><b>Link</b></td><td><b>Descrição</b></td>

</tr>

<tr>

<td>rcanales@autentia.com</td><td>JSP 2.0</td><td>jspel</td><td>Novas caracteristicas de JSPs 2.0</td>
</tr>
<tr>
<td>alejandropg@autentia.com</td><td>Struts e Eclipse</td><td>struts</td><td>Configuração do ambiente Structs em Eclipse</td>
</tr>
</table>
Mensagem: Terminamos

Ou seja, funciona......

Criar o MVC

Agora, vamos criar um servlet, que gerará um XML e o passará (em MVC) a um JSP. Vamos introduzir diretamente o XML em uma cadeia de caracteres.... dando por suposto que se obteria de outro modo (por exemplo, usando um Banco de Dados XML)

Este JSP, pode executar o código da transformação com diferentes técnicas:

  • Scriplet (Código Java no JSP)
  • Um Java Bean
  • Um TAG de usuário
  • Usando JSTL de JSP 2.0

Mostraremos como fazê-lo com um JSP com Scriplet... o resto dos métodos é muito simples.

O servlet

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class controlador extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
  try
  {
    String elXML = "<tutoriais><tutorial><autor>rcanales@autentia.com</autor>

<nome>JSP 2.0</nome><link>jspel</link><descricao>Novas características de JSPs 2.0</descricao>

</tutorial><tutorial><autor>alejandropg@autentia.com</autor><nome>Struts e Eclipse</nome>

<link>struts</link><descricao>Configuração do ambiente Structs em Eclipse</descrição>

</tutorial></tutoriais>";

    request.setAttribute ("xml",elXML);
    getServletConfig().getServletContext().getRequestDispatcher("/apresentacao.jsp").forward(request, response);
   }
  catch (Exception ex)
   {
    ex.printStackTrace ();
  }
  }
}

O JSP

<%@page contentType="text/html" import="java.io.*,javax.xml.transform.*,javax.xml.transform.sax.*, javax.xml.transform.stream.*,org.xml.sax.*"%>
<html>
<head><title>JSP Page</title></head>
<body>

<center>
<H1>JSP, transformando XML com XSL</h1>
<br>

<%
  String xmlOrigem = (String)request.getAttribute("xml");
  String xslOrigem = "C:\\exemplos\\jaxpjsp\\xslbase.xsl";

  Source xmlSource = new StreamSource(new StringBufferInputStream(xmlOrigem));
  Source xsltSource = new StreamSource(new File(xslOrigem));

   StringWriter cadeiaSaiida = new StringWriter();

  Result bufferResultado = new StreamResult(cadeiaSaida);

  TransformerFactory fabricaTrans = TransformerFabrica.newInstance();
  Transformer transformador = fabricaTrans.newTransformer(xsltSource);

  transformador.transform(xmlSource, bufferResultado);
   out.print(cadeiaSaida.toString());
%>
</center>

</body>
</html>


A saída é:


Bom, já sabem como fazer ..... e com Struts.... seria também assim de simples!



Informe de Roberto Canales Mora
URL: http://www.adictosaltrabajo.com



Usuários :    login / registro
Manuais relacionados
Categorias relacionadas

Home | Sobre nós | Copyright | Anuncie | Entrar em contato