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/35O 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 online. 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 podese ver um exemplo extremamente simples de uma página JSP e o esquema de c onversão dessa página em um servlet.
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,
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.
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 ala 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.
Linha 10: try, é o começ o do bloco de código que exec utaremos
Linha11: Instanciase o driver de SQL, que obviamente deve estar presente já seja nas bibliotec as de Tomcat ou nas de nosso site (pasta \WEBINF\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 bemsuc 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.
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>");
} } }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:
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 edese 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 riase modificando o arquivo autoexec .bat
loc alizado em c :\ (está c omo arquivo oculto). Sua modificaç ão se faz agregandolhe 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\jspapi.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).
c ) Uma vez feito o anterior, para agregar o primeiro servlet ao site, buscase 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> <servletname>novo_servlet</servletname> <servletclass>novo_servlet</servletclass> </servlet> <servletmapping> <servletname>novo_servlet</servletname> <urlpattern>novo_servlet</urlpattern> </servletmapping>
Porém, c omo o arquivo já tem esc rito, ac omodase de tal maneira que fic ará assim:
<servlet> <servletname>org.apache.jsp.index_jsp</servletname> <servletclass>org.apache.jsp.index_jsp</servletclass> </servlet> <servlet> <servletname>novo_servlet</servletname> <servletclass>novo_servlet</servletclass> </servlet> <servletmapping> <servletname>org.apache.jsp.index_jsp</servletname> <urlpattern>/index.jsp</urlpattern> </servletmapping> <servletmapping> <servletname>novo_servlet</servletname> <urlpattern>novo_servlet</urlpattern> </servletmapping>
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.
Criar o Proje to
Criamos em NetBeans um projeto
Vamos c riar alguns documentos XML e XSL com os geradores de c ódigo.
Atribuímos um nome Vamos utilizar este doc umento como base: <?xml versao="1.0" encoding="UTF8"?> <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>
Repetimos, porém agora selecionamos um doc umento XSL Esc revemos nosso XSL <?xml versao="1.0" encoding="UTF8" ?> <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:foreach select="//tutorial"> <tr> <td><xsl:valueof select="autor"/></td> <td><xsl:valueof select="nome"/></td> <td><xsl:valueof select="link"/></td> <td><xsl:valueof select="descrição"/></td> </tr> </xsl:foreach> </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
Selecionamos os arquivos
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
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>
<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>
</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 é:
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 substituilos 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;
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){ /**
* 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 agregala 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); /** * fechase 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 mudalos 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 = "";
/** * 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