• Nenhum resultado encontrado

ManualdeJSP-Manualcompleto

N/A
N/A
Protected

Academic year: 2021

Share "ManualdeJSP-Manualcompleto"

Copied!
21
0
0

Texto

(1)

M anual de JSP  

M a n u a l  p o r :  C riar Web, manuais e recursos para desenvolvimento web  Ve r s ã o  o n ­ li ne :  http://www.criarweb.com/manuais/35 

O q ue é JSP  

JSP é a abreviaç ão de Java Server Pages, que em português seria algo c omo Páginas de Servidor  Java. É então, uma tec nologia orientada a criar páginas web c om programaç ão em Java. 

Bi b l io g r a f ia : Esta descrição de JSP está extraída de um PDF em inglês muito completo que introduz  a tecnologia, que pode ser encontrada na página corporativa de Java de Sun Microsystems, em sua  seção de aprendizado on­line. Por sua vez, tal manual provém do portal Java j Gur u. 

jGuru: Introduction to JavaServer Pages technology 

Com JSP podemos criar aplic ações web que se exec utam em vários servidores web, de múltiplas  plataformas, já que Java é em essênc ia uma linguagem multiplataforma. As páginas JSP estão  c ompostas de código HTML/XML misturado c om etiquetas especiais para programar sc ripts de  servidor em sintaxe Java. Portanto, poderemos escrever as JSP c om nosso editor HTML/XML  habitual. 

Motor JSP  

El motor das páginas JSP está baseado nos servlets de Java ­ programas em Java destinados a se  exec utar no servidor­, embora o número de desenvolvedores que podem afrontar a programaç ão  de JSP é muito maior, dado que é muito mais simples de aprender que os servlets. 

Em JSP criamos páginas de maneira parecida a como se criam em ASP ou PHP ­ outras duas 

tec nologias de servidor. Geramos arquivos c om extensão .jsp que inc luem, dentro da estrutura de  etiquetas HTML, as sentenças Java a executar no servidor. Antes que os arquivos sejam 

func ionais, o motor JSP realiza uma fase de tradução dessa página em um servlet, implementado  em um arquivo c lass (Byte c odes de Java). Esta fase de traduç ão se realiza habitualmente 

quando se rec ebe a primeira solic itação da página .jsp, embora exista a opção de pré­ compilar em  c ódigo para evitar esse tempo de espera na primeira vez que um c liente solic ita a página. 

Ex e m plo de  página JSP  

Na imagem seguinte pode­se ver um exemplo extremamente simples de uma página JSP e o  esquema de c onversão dessa página em um servlet. 

(2)

Pré ­ re quis itos 

Para aprender JSP, a parte de c onhecer HTML, será nec essário compreender e ter algo de 

experiência na programaç ão em Java, que é uma Linguagem de Programação Orientada a Objetos 

por c ompleto. Uma vez conhec ida a programaç ão em Java pode­ se estudar por alto o sistema de  Servlets, o que nos dará uma melhor idéia do funcionamento interno do motor JSP. 

Ademais, nec essitaremos baixar e instalar Tomc at, o c ontêiner de servlets usado na referênc ia  oficial de implementaç ão de JSP. Podemos acessar a um exerc íc io para aprender a realizar esta  instalação, disponível também na referência de aprendizagem da página de Java. 

Informe de Mi g u e l A n g e l  A lv a r e z  ­  T r a d u ç ã o  d e  J ML  Mail: j u li a n a @c r ia r w e b .c o m 

Comparan do JSP  com A SP  

JSP e ASP servem para fazer, mais ou menos, o mesmo tipo de aplic ações web. Entretanto, no  fundo têm bastantes diferenç as. Depois de minha experiência no trabalho c om JSP, um dia, um  c liente me perguntou por que não programava a página em ASP no lugar de JSP, já que havia  esc utado falar que o sistema de Microsoft tinha umas carac terísticas muito apropriadas para seu  modelo de negóc io. A partir desta sugestão, e para que meu c liente fic asse satisfeito c om a  tec nologia JSP ­que é a que prefiro utilizar­ , preparei uma lista de vantagens de utilizar páginas  dinâmic as Java frente às de Mic rosoft. 

Plataform a e  inde pe ndê nc ia do se rv idor 

JSP segue a filosofia da arquitetura JAVA de "esc reve uma vez, executa onde quiser". A  implantação de ASP está limitada para arquiteturas baseadas em tec nologia Mic rosoft. 

Assim, JSP pode ser executado nos sistemas operativos e servidores web mais populares, c omo  por exemplo, Apac he, Netscape ou Microsoft IIS. Enquanto que ASP só tem suporte nativo para  os servidores IIS e Personal Web Server, que são os dois servidores web para sistemas Microsoft, 

(3)

o primeiro c om tecnologia NT e o segundo para sistemas Windows 98 e similares.  Proc e s so de  de s e nv olv im e nto abe rto (ope n s ourc e ) 

O API JSP se beneficia da extensa comunidade JAVA existente, pelo c ontrário a tecnologia ASP é  específic a de Microsoft que desenvolve seus processos internamente. 

TAGS 

Enquanto que tanto JSP c omo ASP usam uma combinação de tags e sc ripts para criar páginas  web dinâmicas, a tecnologia JSP permite aos desenvolvedores c riar novas tags. Assim os  desenvolvedores podem criar novas tags e não depender tanto dos sc ripts. 

Re us abilidade  e ntre  plataformas . 

Os componentes JSP são reusáveis em distintas plataformas (UNIX, Windows).  A  v antage m  Jav a 

A tecnologia JSP usa Java como linguagem de Sc ript enquanto que ASP usa VBSc ript ou Jsc ript.  Java é uma linguagem mais potente e c om mais esc alas que as linguagens de Sc ript. As páginas  JSP são c ompiladas em Servlets pelo qual atuam c omo uma porta a todos os serviços Java de  Servidor e livrarias Java para aplic aç ões http. Java faz o trabalho do desenvolvedor mais fác il p.  e. ajuda a proteger o sistema c ontra as "caídas" enquanto que as aplic aç ões ASP sobre sistemas  NT são mais susc etíveis a sofrê­las, também ajuda no manejo da memória protegendo c ontra  falhas de memória e o duro trabalho de busc ar os falhos de perda de ponteiros de memória que  podem tornar mais lento o funcionamento de uma aplicaç ão. 

Manute nç ão 

As aplicaç ões que usam JSP têm uma manutenção mais fác il que as que usam ASP. 

As linguagens de Sc ript estão bem para pequenas aplic aç ões, mas não se enc aixam bem  para aplic ações grandes. Java é uma linguagem estruturada e é mais fác il de c onstruir e  possui manutenç ões grandes c omo aplicaç ões modulares. 

A tec nologia JSP faz maior ênfase nos c omponentes do que nos Sc ripts, isto faz c om que  seja mais fác il revisar o c onteúdo sem que afete a lógic a ou revisar a lógic a sem mudar o  conteúdo. 

A arquitetura EJB encapsula a lógica de p. e.: ac esso a BD, seguranç a, integridade  transacional e isolamento da aplicaç ão. 

Devido a que a tec nologia JSP é aberta e multiplataforma, os servidores web, plataformas e  outros c omponentes podem ser fac ilmente atualizados ou mudados sem que afete às 

aplic aç ões baseadas na tec nologia JSP.  Conclusão 

As vantagens sobre utilizar a tecnologia Java em relaç ão à proprietária de Mic rosoft (ASP) são,  c omo se pode ver, diversas e interessantes. Entretanto, podemos apontar uma vantagem da  programação em ASP, pois é bastante mais fác il de aprender que JSP, pelo menos se não se tem  uma experiênc ia prévia em programação. Isto é devido a que Java é uma linguagem muito 

potente, mas um pouc o mais complic ada de usar porque é orientada a objetos e a maneira de  esc rever os programas é mais rígida. 

(4)

Mail: j u li a n a @c r ia r w e b .c o m 

Conexão a um database server com J SP  

Neste artigo trataremos o tema da conexão a uma database desde uma página JSP, para isto,  c riaremos uma classe (ConnectionCreator) , que será usada por nossa página. Em primeiro lugar  nos conec taremos a um SQL Server, logo poderemos ver c omo modific ando um pouc o a classe  também se pode usar para MySql. 

Começ amos então esc revendo o código da primeira versão da classe, para logo explic a­la c om  mais detalhes: 

Linha 1: definiç ão do pac kage que conterá a classe, nec essário para logo importar a classe dentro  da página. 

Linhas 3 e 4: Importamos duas c lasses standard de Tomc at. 

Linha 6 : Definiç ão da c lasse, c omo públic a, c om o nome Connec tionCreator. 

Linha 8: Definição do único método da classe, getSqlServerConnection, que rec eberá como  parâmetros uma lista de valores, para devolver logo, um objeto java.sql.Connec tion. 

Os parâmetros que a c lasse recebe são: database (nome do database), servername (nome ou ip  do database server), port (porta de c onexão, no c aso de SQL geralmente é 1433), username e  password. 

(5)

Linha 10: try, é o começ o do bloco de código que exec utaremos 

Linha11: Instancia­se o driver de SQL, que obviamente deve estar presente já seja nas  bibliotec as de Tomcat ou nas de nosso site (pasta \WEB­INF\lib). Estes drivers se baixam  gratuitamente da Internet e vêem empac otados sob a forma de arquivos JAR. 

Linhas 12 a 14: Construímos uma c adeia de c aracteres c hamada url, que será utilizada logo para  abrir a c onexão. A estrutura deste texto é standard, só há que interc alar os parâmetros 

recebidos. 

Linha 15: Finalmente chegamos ao c oraç ão da classe, instanc iamos um objeto Connec tion e,  através do DriverManager, tratamos de nos c onectar ao servidor, passando c omo parâmetro a url  c onstruída anteriormente. 

Linhas 16 a 19: Não são estritamente nec essárias, porém servem c omo ajuda ao programador.  Controlamos que a c onexão tenha sido bem­suc edida e que esteja aberta (por padrão sempre  está) e mandamos à c onsole de Tomcat a mensagem correspondente. O mesmo no c aso de que o  proc esso tenha falhado. 

Linha 21: a função devolve o objeto. 

Linhas 23 a 26: No c aso de que se produza um erro dentro da estrutura try, o mesmo é  proc essado pela estrutura catc h, que imprime a mensagem de erro produzido. 

A esta altura o método terminou, e não nos resta mais do que ver c omo se utiliza dentro da  página JSP. 

Vejamos: 

<%@ page language="java" %> 

<%@ page import = "notas.C onnectionC reator"%>  <%@ page import = "java.sql.C onnection"%>  <% 

C onnection minhaC onexao = C onnectionC reator.getSqlServerC onnection("Orders", "127.0.0.1",1433,"sa", "");  if (minhaC onexao.isC losed()) 

out.print("FUNC IONA !");  /* C ORPO DA PAGINA */ 

miC onexion.close(); /* nao se esquecer de fechar as conexoes. */  %> 

Aqui simplesmente c riamos um objeto Connec tion e , através do método getSqlServerConnection  de nossa classe, nos c onectamos ao database. 

Ao final da página, fec hamos a c onexão. 

No caso de querer c onec tar um servidor MySql, c onvém agregar um segundo método à c lasse,  específic o para este tipo de server. Por suposto que deverão existir também os drivers de MySql  em nosso site. 

(6)

Basic amente a lógic a é a mesma, muda obviamente o driver iniciado, e a estrutura da url, já que  neste c aso não c ontém nem usuário e nem password, dados estes que são passados diretamente  ao DriverManager. 

Informe de F e r n a nd o  A r tur i  Mail: fe r n a n d o .a r tu r i@g m a il .c o m  URL: http :/ / w w w .a r tur i .c o m .a r 

Constru ção d inâmica de menus de seleção utilizan do JSP  

Ac ontec e quando temos que gerar menus de seleção dentro de páginas HTML. Muitas vezes estes  menus são idêntic os ou muito parec idos, e pode oc orrer de oc uparem muito lugar dentro de nossa  página web. 

A idéia é passar a esta função os parâmetros que nos interessam, e deixar que ela se oc upe do  resto. Vejamos o c ódigo da página, c om uma breve explic aç ão abaixo de cada bloc o de c ódigo. 

<%@ page language="java"%>  <%!  private void writeMenu(javax.servlet.jsp.JspWriter out, int startValue,  int endValue, int selectedValue){  try{  // esta linha eh opcional...  out.println("<option value=\"­1\" selected>  Selecione uma opcao</option>");  // comeco o ciclo com a classe de valores dado.  for (int i=startValue; i<(endValue+1); i++){  // se o valor atual corresponde ao valor do ciclo,  //faco aparecer como selecionado  if (i == selectedValue){  out.println("<option value=\""+i+"\"  selected>"+i+"</option>");  }  else{  out.println("<option value=\""+i+"\">"+i+"</option>"); 

(7)

}  } }catch(java.io.IOException e1){  System.out.println(e1);  }  }  %> 

Esta é a funç ão que gera o menu, recebe c omo parâmetros o valor inic ial, o valor final, o valor  atual e o objeto JspWriter, que permite escrever dinamic amente sobre a página. 

<% 

java.util.GregorianC alendar cal = new java.util.GregorianC alendar();  int day = cal.get(cal.DAY_OF_MONTH);  int month = (cal.get(cal.MONTH)) + 1;  int year = cal.get(cal.YEAR);  %>  Criamos variáveis de página, que nos servirão somente para provar a funç ão.  <html>  <head>  <title>C onstrução dinâmica de menus de seleção</title>  </head>  <body>  <table>  <h1>construcao dinamica de menus de selecao</h1>  <tr>  <td>Dia:  <select>  <% writeMenu(out,1,31,day); %>  </select>  </td>  <td>Mes:  <select>  <% writeMenu(out,1,12,month); %>  </select>  </td>  <td>Ano:  <select>  <% writeMenu(out,2000,2010,year); %>  </select>  </td>  </tr>  </table>  </body>  </html>  Finalmente o html, muito simples, que mostra como se usa a func ao.  Uma variante deste proc edimento seria, por exemplo, ler dados de uma database. Por exemplo, se  quisermos gerar um clássico menu c om a lista de países do mundo, poderemos fazer uma funç ão  deste tipo: 

(8)

javax.servlet.jsp.JspWriter out, int currentValue){  try{ 

String sqlString = " SELEC T id,Name from T_C ountries order by orderview ";  Statement stmt = connection.createStatement();  ResultSet rs = stmt.executeQuery(sqlString);  while (rs.next()){  String selected = "";  int countryId = rs.getInt("id");  if (countryId==currentValue)  selected = "SELEC TED";  out.print("<option value=\""+countryId+"\" "+selected+">"+rs.getString("Name")+"</option>");  }  rs.close();  stmt.close();  }catch(Exception e){  System.out.println(e);  } }  Neste caso obviamente temos que passar uma c onexão a um database (pode ser MsSQL, MySql,  etc .) no qual temos a tabela T_c ountries, com os c ampos id, name e orderview. 

Informe de F e r n a nd o  A r tur i  Mail: fe r n a n d o .a r tu r i@g m a il .c o m  URL: http :/ / w w w .a r tur i .c o m .a r 

I nstalação de Tomcat para u tilizar servlets ou J SP  

Este processo é bastante simples, porém consta de uma série de pasos que devem ser realizados  ao pé da letra:  a) Instalar o servidor Tomcat e alguma versão do J2SDK (recomenda­ se 1.4.01 ou a Enterprise  Edition), indicando o lugar onde se encontra instalada a JVM (Java Virtual Mac hine), e de  preferência, deixando c omo porto o 4848 para o ac esso do servidor. 

b) Posteriormente, proc ede­se a c onfigurá­ lo no c omputador. Para isto c ria­ se uma "variável de  ambiente". Se usar Windows 95/98/2000/XP, c ria­se modificando o arquivo autoexec .bat 

loc alizado em c :\ (está c omo arquivo oculto). Sua modificaç ão se faz agregando­lhe a seguinte  linha: 

set classpath = "rota" 

Onde "rota" é a localizaç ão dos arquivos jsp­ api.jar e servlet­ api.jar que se encontram na pasta:  rota_de_instalac ao_do_servidor_tomc at/common/lib. 

A seguir um exemplo de linha para agregar ao autoexec .bat, supondo que o servidor tomc at se  instalou em c :\arquivos de programa: 

SET C LASSPATH= C :\Arquivos de programa\Apache Software Foundation\Tomcat 5.0\common\lib\jsp­  api.jar;C :\Arquivos de programa\Apache Software Foundation\Tomcat 5.0\common\lib\jsp­api.jar 

Lembrando que também se agrega ao claspath o endereç o da rota onde se enc ontra a pasta \bin  do j2sdk (c ompilador de java). 

(9)

c ) Uma vez feito o anterior, para agregar o primeiro servlet ao site, busca­se o arquivo web.xml, o  qual se enc ontra em rota_de_instalac ao_do_servidor_tomc at\Apache Software 

Foundation\Tomc at 5.0\webapps\ROOT\WEB­ INF\ e se agrega à pasta webapps o 

novo_servlet.c lass (que é o resultado da c ompilação do novo_servlet.java). Além disso, há que  ac resc entar estas linhas ao arquivo web.xml:  <servlet>  <servlet­name>novo_servlet</servlet­name>  <servlet­class>novo_servlet</servlet­class>  </servlet>  <servlet­mapping>  <servlet­name>novo_servlet</servlet­name>  <url­pattern>novo_servlet</url­pattern>  </servlet­mapping> 

Porém, c omo o arquivo já tem esc rito, ac omoda­se de tal maneira que fic ará assim: 

<servlet>  <servlet­name>org.apache.jsp.index_jsp</servlet­name>  <servlet­class>org.apache.jsp.index_jsp</servlet­class>  </servlet>  <servlet>  <servlet­name>novo_servlet</servlet­name>  <servlet­class>novo_servlet</servlet­class>  </servlet>  <servlet­mapping>  <servlet­name>org.apache.jsp.index_jsp</servlet­name>  <url­pattern>/index.jsp</url­pattern>  </servlet­mapping>  <servlet­mapping>  <servlet­name>novo_servlet</servlet­name>  <url­pattern>novo_servlet</url­pattern>  </servlet­mapping> 

d) Por último prova­ se o servlet esc revendo no explorador http:\\localhost:484\novo_servlet e  pronto! Com isso voc ê deverá ver o resultado. 

Informe de J u lio  N. A r g o ta  Qu ir o z  Mail: b e a tl s w o r ld @y a h o o .c o m .m x 

U so de X M L e X SL em J SP s 

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 c onsolidam as tec nologias (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 c omo se faz passo a passo.... utilizando  o patrono MVC. 

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

(10)

Criar o Proje to 

Criamos em NetBeans um projeto 

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

(11)

Atribuímos um nome  Vamos utilizar este doc umento como base:  <?xml versao="1.0" encoding="UTF­8"?>  <tutoriais>  <tutorial>  <autor>[email protected]</autor>  <nome>JSP 2.0</nome>  <link>jspel</link>  <descricao>Novas caracteristicas de JSPs 2.0</descricao>  </tutorial>  <tutorial>  <autor>[email protected]</autor>  <nome>Struts e Eclipse</nome>  <link>struts</link>  <descricao>C onfiguração do ambiente Struts em Eclipse</descricao>  </tutorial>  </tutoriais> 

(12)

Repetimos, porém agora selecionamos um doc umento XSL  Esc revemos 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> 

Prov ar a trans form aç ão e m  Ne tB e ans 

Vamos usar as c aracterístic as de NetBeans para provar como ficaria....  Selecionamos, c lic ando o botão direito sobre o XML ou XSL 

(13)

Selecionamos os arquivos 

(14)

Ativamos nosso diretório c omo uma WebApp 

Introduz ir o c ódigo J av a 

Agora, vamos esc rever uma c lasse Java que seja capaz de fazer uma transformaç ão e retorna­ la  c omo uma c adeia. 

Es c re v e r a c las s e  Jav a de  prov a 

(15)

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 C anales  */  public class transformador  {  void depura (String pC adeia)  {  System.out.println("Mensagem: " + pC adeia);  }  public static void main(String [] args) {  transformador p = new transformador();  try  {  p.depura("C omecamos 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 exec utamos este c ódigo, veremos na tela de saída:  Mensagem: Começ amos transformaç ão 

Mensagem: <table border="1">  <br> 

(16)

<td><b>Autor</b></td><td><b>Nome</b> 

</td><td><b>Link</b></td><td><b>Desc rição</b></td>  </tr> 

<tr> 

<td>[email protected]</td><td>JSP 2.0</td><td>jspel</td><td>Novas c aracteristic as de  JSPs 2.0</td> 

</tr>  <tr> 

<td>[email protected]</td><td>Struts e Ec lipse</td><td>struts</td><td>Configuraç ão  do ambiente Struc ts em Eclipse</td>  </tr>  </table>  Mensagem: Terminamos  Ou seja, func iona...  Criar o MVC  Agora, vamos c riar um servlet, que gerará um XML e o passará (em MVC) a um JSP. Vamos  introduzir diretamente o XML em uma c adeia de c aracteres.... dando por suposto que se obteria  de outro modo (por exemplo, usando um Banc o de Dados XML) 

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

Scriplet (Código Java no JSP)  Um Java Bean 

Um TAG de usuário  Usando JSTL de JSP 2.0 

Mostraremos c omo fazê­lo c om um JSP c om Sc riplet... o resto dos métodos é muito simples.  O s e rv le t  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>[email protected]</autor>  <nome>JSP 2.0</nome><link>jspel</link><descricao>Novas características de JSPs 2.0</descricao>  </tutorial><tutorial><autor>[email protected]</autor><nome>Struts e Eclipse</nome>  <link>struts</link><descricao>C onfiguração do ambiente Structs em Eclipse</descrição> 

(17)

</tutorial></tutoriais>"; 

request.setAttribute ("xml",elXML); 

getServletC onfig().getServletC ontext().getRequestDispatcher("/apresentacao.jsp").forward(request,  response);  } catch (Exception ex)  {  ex.printStackTrace ();  }  }  }  O J SP   <%@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 é: 

(18)

Bom, já sabem c omo fazer ... e c om Struts.... seria também assim de simples!  Informe de Ro b e r to  Ca na le s  Mo r a 

Mail: r c a na le s @a d i c to s a l tr a b a j o .c o m  URL: http :/ / w w w .a d ic to s a ltr a b a j o .c o m 

M anejo de arqu ivos com J SP  

Os comentários esc ritos dentro do c ódigo, explic am passo a passo que coisa está sendo  exec utada em c ada momento. 

A funç ão readFile, dado um nome de arquivo (com o "c aminho" inc luído. Ex. 

D:\files\prova.txt), devolve um objeto de tipo StringBuffer c om o c onteúdo do mesmo.  O método saveFile , toma c omo primeiro parâmetro o nome do arquivo que se deseja gerar  ou modific ar, o segundo parâmetro é o conteúdo que se deseja introduzir no tal arquivo. Por  fim, o terc eiro parâmetro é uma variável do tipo boolean, que se rec ebe o valor "true" ,  agrega a informação recebida no final do arquivo (si este arquivo existir). Se, em troca,  rec ebe "false" como parâmetro, apaga o c onteúdo atual do arquivo e o substitui com o  segundo parâmetro. 

Finalmente a terceira funç ão serve para busc ar um ou mais valores dentro de um arquivo de  uma c adeia de texto e substitui­los por uma série de valores dados.  Por exemplo, poderia ser usado deste modo:  String[] busca = {"NOME","SOBRENOME"};  String[] substituo = {"FERNANDO","ARTURI"};  FileManager fm = new FileManager();  String resultado = fm.replaceValues("D:\myFiles\prova.txt", busca, substituo); 

A seguir o c ódigo da c lasse: 

package notas;  import java.io.File; 

(19)

import java.io.FileReader;  import java.io.FileWriter;  import java.io.BufferedReader;  import java.io.BufferedWriter;  import java.io.IOException;  import java.io.FileNotFoundException;  /**  * <p>Title: FileManager</p>  *  * <p>Description: Manejo de arquivos de texto</p>  *  * <p>C opyright: C opyright (c) 2006</p>  *  * @author Fernando Arturi  * @version 1.0  */  public class FileManager {  public void FileManager(){}  /**  * O metodo readFile le um arquivo de texto e retorna seu conteudo em  * formato de StringBuffer  * @param filename String  * @return StringBuffer  */  public StringBuffer readFile(String filename){  StringBuffer sb = new StringBuffer();  try{  /**  * Aqui criamos um objeto File que representa o arquivo de texto que  * queremos ler  */ File file = new File(filename);  /**  * Variavel temporaria que usaremos para ler cada uma das linhas do  * arquivo de texto  */  String line = null;  /**  * BufferReader ­ Eh o encarregado de ler o arquivo de texto.  * O construtor recebe como parametro um objeto FileReader, que  * a s vez recebe o objeto File criado precedentemente.  */  BufferedReader br = new BufferedReader(new FileReader(file));  /**  * Atraves deste ciclo o BufferReader le todo o arquivo, e vai acumulando (sb.append) em um StringBuffer  */ while ((line = br.readLine()) != null) {  sb.append(line);  } /**  * No final da leitura fechamos o objeto  */  br.close();  } catch (FileNotFoundException fnfe){  /** 

(20)

* Se damos um nome de arquivo que nao existe o sistema gera automaticamente um erro.  */  System.out.println("Nao foi possivel encontrar o arquivo "+ filename);  }  catch (IOException ioe){  /**  * Foi produzido um erro durante a leitura do arquivo  */  System.out.println("Foi produzido um erro durante a leitura do arquivo "+ filename);  } return sb;  }  /**  * Este metodo permite, dada uma cadeia de caracteres determinada,  * salvar a mesma como um arquivo de texto, ou agrega­la a um arquivo ja existente  *  * @param filename String  * @param dataToWrite String  * @param append boolean  */  public void saveFile(String filename, String dataToWrite, boolean append) {  try { /**  * C riacao do objeto FileWriter dado um nome de arquivo determinado  * O segundo parametro (append) contem um valor booleano que  * indica se a informacao recebida deve ser agregada no final do  * arquivo ou, caso contrario, substituir a informacao ja  * existente.  */  FileWriter fw = new FileWriter(filename, append);  /**  * Escritura da informacao no arquivo  */ fw.write(dataToWrite);  /**  * fecha­se o arquivo  */  fw.close();  } catch (IOException ioe) {  /**  * Foi produzido um erro durante a leitura/escritura do arquivo  */  System.out.println(  "Foi produzido um erro durante a leitura do arquivo " + filename);  }  }  /**  * Esta funcao permite, dado um arquivo em particular, buscar dentro o mesmo  * determinados valores e muda­los por uma serie de novos valores dados,  * gerando um objeto de tipo String com o resultado  *  * @param path String  * @param valuesToSearch String[] Ejemplo {"NOME", "SOBRENOME"}  * @param valuesToReplace String[] Ejemplo {"Fernando Augusto", "Arturi"}  * @return String  */  public String replaceValues (String path, String [] valuesToSearch, String [] valuesToReplace){  String line;  StringBuffer textC omplete = new StringBuffer();  String tempText = ""; 

(21)

/**  * Leitura do arquivo de texto dado  */  try { BufferedReader br = new BufferedReader(new FileReader(path));  while ((line = br.readLine()) != null){  textC omplete.append(line);  }  br.close();  } catch (FileNotFoundException fnfe){  /**  * Se damos um nome de arquivo que nao existe o sistema  * gera automaticamente um erro.  */ System.out.println("Nao foi possivel encontrar o arquivo "+ filename);  }  catch (IOException ioe) {  /**  * foi produzido um erro durante a leitura/escritura do arquivo  */  System.out.println(  "Foi produzido um erro durante a leitura do arquivo " + filename);  }  /**  * Uma vez completada a fase de leitura do arquivo, passamos a  * busca e substituicao dos valores dados.  * Para isto geramos um ciclo que percorremos tantas vezes como valores  * que tivermos que processar.  */  for (int i=0; i<valuesToSearch.length; i++){  int position = textC omplete.indexOf(valuesToSearch[i]);  if (position>0 ){  tempText = textC omplete.substring(0,position);  /**  * busca e substituicao da cadeia.  */  tempText = tempText + valuesToReplace[i] + 

textC omplete.substring(position+valuesToSearch[i].length(),textC omplete.length());  textC omplete = new StringBuffer(tempText);  } }  return tempText;  }  } 

Informe de F e r n a nd o  A r tur i  Mail: fe r n a n d o .a r tu r i@g m a il .c o m  URL: http :/ / w w w .a r tur i .c o m .a r 

Todos los direitos de reproduç ão e difusão reservados 

Referências

Documentos relacionados

Os valores finais de atribuição dos apoios de âmbito não financeiro à concretização do Programa definido na Cláusula Primeira, por parte da Câmara Municipal de Lisboa,

A fim de evitar ou, quando tal não for praticável, reduzir as emissões para o solo e para a água provenientes do armazenamento de estrume sólido, a MTD consiste em utilizar

A fiscalização quanto ao cumprimento do disposto neste Decreto, com competência para proceder o exercício de Poder de Polícia Administrativa, no tocante ao

A) A intenção proeminente dos povos árabes de tentar erradicar os judeus do Oriente Médio. C) A busca dos judeus pela Terra Prometida, nos arredores de Jerusalém, com a

constante do Anexo IV, por meio de SEDEX, endereçada à Comissão de Concurso de Estágio, exclusivamente para o endereço da Procuradoria do Trabalho no Município de

Usar um respirador com suprimento de ar com pressão positiva se existir alguma possibilidade de ocorrer liberação descontrolada, os níveis de exposição não forem conhecidos ou

A inclusão de pessoas com deficiência no âmbito profissional pode ser considerada uma temática recente para as empresas, por isso se fez o uso de

Na perspectiva do enunciador, tanto para os alunos como para o professor, o modo de eficiência, isto é, a forma de penetração do objeto no campo de presença do sujeito, estaria