programaÇÃo dinamica para internet

Upload: thiago-silva-resende

Post on 19-Jul-2015

191 views

Category:

Documents


0 download

TRANSCRIPT

1

SumrioIntroduo .......................................................................................................................................... 5 Conhecendo o Java Server Pages ................................................................................................ 5 Ambiente JSP ................................................................................................................................... 6 Instalando o JDK .......................................................................................................................... 6 Varivel ambiente ......................................................................................................................... 8 Instalao do TOMCAT ............................................................................................................. 13 Estrutura de Pastas .................................................................................................................... 13 Tag(s) ............................................................................................................................................... 15 Tag(s) orientadas a criao de script ...................................................................................... 15 Tag(s) baseadas em XML ......................................................................................................... 15 Primeiro cdigo ............................................................................................................................... 15 Formulrio........................................................................................................................................ 19 Declaraes..................................................................................................................................... 21 Declaraes de varivel ............................................................................................................ 21 Declarao de mtodos............................................................................................................. 22 Estrutura condicional ..................................................................................................................... 23 Estrutura condicional IF ............................................................................................................. 23 IF com ELSE ........................................................................................................................... 23 IF com ELSE IF e ELSE ........................................................................................................ 24 Estrutura condicional Switch..................................................................................................... 25 Interao .......................................................................................................................................... 29 Loop usando o for....................................................................................................................... 29 Loop usando while ..................................................................................................................... 31 Loop com do while ..................................................................................................................... 32 Tratamento de excees ............................................................................................................... 33 Varivel Composta ......................................................................................................................... 35 Array unidimensional ................................................................................................................. 35 Array multidimensionais ............................................................................................................ 36 Escopo de varivel ......................................................................................................................... 37 Modularizao ................................................................................................................................. 38 Funo (mtodos) ...................................................................................................................... 39 2

Funo que no retorna valor .............................................................................................. 40 Passagem de parmetro ....................................................................................................... 40 Orientao ao Objeto ..................................................................................................................... 41 Class ............................................................................................................................................. 42 Atributos ................................................................................................................................... 42 Mtodos ................................................................................................................................... 43 Herana........................................................................................................................................ 43 Encapsulamento ......................................................................................................................... 43 Polimorfismo................................................................................................................................ 43 Arquivo ............................................................................................................................................. 45 Escrevendo em Arquivo ............................................................................................................ 45 Leitura de Arquivo ...................................................................................................................... 47 Diretrios.......................................................................................................................................... 48 Criar diretrio............................................................................................................................... 48 Testar se o diretrio existe ........................................................................................................ 49 Exibir contedo do diretrio ...................................................................................................... 50 Excluir ........................................................................................................................................... 51 Excluir arquivo......................................................................................................................... 51 Excluindo diretrio .................................................................................................................. 53 Include ............................................................................................................................................... 54 Include Esttico ............................................................................................................................. 55 Include dinmico ........................................................................................................................... 57 Session............................................................................................................................................... 58 Criar Sesso ................................................................................................................................... 58 Exibir Sesso .................................................................................................................................. 61 Tempo de vida da sesso .............................................................................................................. 63 Remover ........................................................................................................................................ 63 Outras operaes com sesso....................................................................................................... 64 Administrao de e-mails .................................................................................................................. 64 Enviando e-mail............................................................................................................................. 65 Banco de Dados ................................................................................................................................. 65 Modelos de Dados......................................................................................................................... 66 3

Modelo Relacional..................................................................................................................... 66 Modelo Orientado ao Objeto .................................................................................................... 66 Instalando o Banco de Dados ........................................................................................................ 67 Instalando o MYSQL .................................................................................................................. 67 Configurando MYSQL ................................................................................................................ 70 Conectividade com o Banco de Dados .......................................................................................... 74 Linguagem SQL .............................................................................................................................. 75 Criando Bando de dados ............................................................................................................... 75 Criando tabela ............................................................................................................................... 78 Inserir dados .................................................................................................................................. 79 Recuperando Dados ...................................................................................................................... 81 Alterar Campo ............................................................................................................................... 83 Excluir ............................................................................................................................................ 84 Finalizando banco de dados .......................................................................................................... 85 XML.................................................................................................................................................... 85 Estrutura de um documento XML ................................................................................................. 86 Sintaxe XML ................................................................................................................................... 87 Todo elemento XML deve ter um tag de fechamento .............................................................. 88 As tags XML so case sensitives ................................................................................................ 88 Elementos XML devem estar aninhados ................................................................................... 89 Documentos XML precisam ter um elemento Raiz ................................................................... 89 Valores do atributo em aspa ..................................................................................................... 90 Declarao do Tipo de Documento ............................................................................................... 91 Tipos de declaraes ................................................................................................................. 91 Concluso .......................................................................................................................................... 95

4

Introduo O incio da internet em nada lembra a internet como conhecemos. Na dcada de 1960 a internet surgiu como uma rede hbrida e descentralizada. No entanto, foi na dcada de 1990 que Tim Berners-Lee criou o protocolo HTTP e a linguagem de marcao HTML, possibilitando, assim, a criao de Home Page com interface de visual agradvel semelhante s Home Pages atuais. Contudo o HTML no foi planejado como linguagem de programao e sim apenas para apresentao de contedo. Desta forma, as primeiras Home Pages eram totalmente estticas no podendoarmazenar informao ou realizar alguma atividade de programao. Essas home pages nada mais eram do que documentos HTML ligados entre si. Com o passar dosanos a internet cresceu e ganhou fora comercial com isso surgiu a necessidade de maior interao com o usurio. Foi nesta poca que surgiram as linguagens scripts e a pgina web deixou de ser apenas esttica. Nascem as pginas dinmicas. Pginas dinmicas so pginas desenvolvidas utilizando a linguagem de marcao HTML e alguma linguagem de programao. Desta forma, possvel realizar tratamento de dados eacessar base de dados entre outras funcionalidades. Atualmente existem diversas linguagens que podem ser utilizadas para tornar a Home Page dinmica. Dentre elas pode-se citar o ASP, PHP, JSP e outras mais. Para nosso estudo utilizaremos a linguagem JSP ou Java server pages. Conhecendo o Java Server Pages O JavaServer Pages (JSP) uma tecnologia baseada na linguagem de programa Java trazendo com si as principais vantagens da Java. Dentre elas pode-se destacar a portabilidade. Sendo assim, possvel executararquivosJSP em diversas plataformas sem que haja a necessidade de alterar o cdigo, em outras palavras, qualquer sistema operacional que disponha de um servidor para linguagem JSP poder interpretar pginas webs feitas nesta linguagem.O JSP funciona como um compartimento (container) que incorpora elementos dinmicos. No se deve confundir JSP com Javascritp. O JSP uma linguagem interpretada no servidor e o cliente s ir receber o resultado desta interpretao que ser cdigo HTML. J o javascritp depende do navegador do cliente para sua interpretao. Caso a API do java no esteja habilitado no navegador o cdigo javascript no funcionar. Por ser uma linguagem que trabalha no lado do servidor, o JSP tem algumas vantagens em relao ao javascript. Uma delas o fato do cdigo no ser visto pelo usurio. Como toda interpretao feita no servidor o cliente s recebe o cdigo final que em HTML. Desta forma, o cdigo JSP fica protegido. Uma segunda vantagem a garantia da interpretao do cdigo. Por ser do lado do servidor no necessrio que o cliente autorizea interpretao do cdigo. Diferentemente o javascript tem a necessidade de ser autorizado. Fato que pode no ocorrer pelo cliente relutar em autorizar por medo de ativar um malware.5

O desenvolvedor de aplicaes JSP deve ter um conhecimento mnimo de algumas especificaes J2EE. Ambiente JSP Para que o JSP possa funcionar necessrio que exista um ambiente preparado para a linguagem. No caso, a primeira coisa a ser feita instalar um servidor que interprete o cdigo JSP. No nosso estudo utilizaremos o servidor TOMCAT que pode ser baixado no endereo http://tomcat.apache.org. Escolha a verso mais adequada para seu uso. Contudo no basta apenas ter o tomcat na mquina. Para utilizar o servidor necessrio que tenha o JDK instalado. O JDK um kit de desenvolvimento Java fornecido livremente pela Sun. Constitui um conjunto de programas que engloba compilador, interpretador e utilitrios, fornecendo um pacote de ferramentas bsicas para o desenvolvimento de aplicaes Java. Pode ser encontrado no site http://www.oracle.com/technetwork/java/index.html. Instalando o JDK Para iniciar a instalao do JDK no Windows XP d dois cliques no arquivo JDK que foi baixo do site http://www.oracle.com/technetwork/java/index.html. Aps iniciar a instalao uma tela semelhante Figura 1 ir surgir.

Figura1 - Tela inicial da instalao do JDK

6

Basta clicar no boto Next para que a instalao possa seguir at chegar na tela da Figura 2. Nela ser apresentado o boto Change... que a opo para escolher a pasta onde o JDK ser instalado. Caso nada seja escolhido a instalao ser na pasta padro.

Figura2 - Escolhendo onde instalar

Ao concluir a instalao uma tela semelhante Figura 3 ser apresentada. Clique em Finish e sua instalao ser concluda.

7

Figura3 - Final da instalao do JDK

Varivel ambiente Terminada a instalao ainda necessrio conFigurar as variveis ambientes para que o JDK funcione adequadamente na mquina. Para isso, clique com o boto direito em Meu Computador depois em propriedade e por fim na aba avanados (no Windows 7, escolha conFiguraes avanada do sistema). Veja a Figura 4.

8

Figura4 - Variveis de Ambiente

Ao chegar na tela de propriedades avanadas clique no boto variveis de ambiente. Neste ponto ser aberto a tela para criao de variveis ambientes semelhante Figura 5. Neste ponto permitido escolher que tipo de varivel se deseja criar. As opes so variveis de usurio e variveis de sistema. No primeiro caso um tipo de varivel que est acessvel apenas para um usurio, j no segundo a varivel estar acessvel para qualquer usurio do sistema. Para nosso estudo iremos utilizar a opo VARIVEIS DO SISTEMA. Sendo assim, clique no boto nova para criar uma nova varivel de sistema. Aps o clique uma nova tela ir surgir semelhante Figura 6. Na parte do nome digite o nome da sua varivel de sistema. Para o nosso exemplo ser JAVA_HOME e na parte de valor da varivel digite o caminho onde o JDK foi instalado. Por fim, para terminar, ainda necessrio alterar a varivel de sistema PATH. Selecione a varivel e clique em editar (Figura 7). Acrescente ao final do valor da varivel o seguinte valor: ;%JAVA_HOME%in conforme apresentando na Figura 8. Pronto, termina a configurao das variveis de ambiente. Agora hora de testar para saber se tudo est funcionando. Abra o prompt de comando e digite o java version. Se tudo estiver correto ser apresentado uma tela semelhante Figura 9. Outras variveis poderiam ser criadas, mas para nosso estudo no ser necessrio.9

Figura5 - Tela para criao de variveis ambientes

Figura6 - Nova varivel de sistema

10

Figura7 - Varivel de Sistema PATH

11

Figura8 - Adicional JAVA a varivel PATH

Figura9 - Teste do funcionamento da varivel

12

Instalao do TOMCAT A ltima etapa da configurao a instalao do servidor Tomcat. Para isso,ative o arquivo executvel para iniciar a instalao do Tomcat. Siga a configurao padro at finalizar a instalao.Caso o servidor no inicie automaticamente clique no arquivo startup.bat localizado na pasta bin do tomcat. Pronto, a instalao foi concluda. Para testar se o servidor est funcionando, abra o navegador e digite o endereo: http://localhost:8080 . Caso esteja funcionando ser apresentado uma tela semelhante Figura 10.

Figura10 - Teste do tomcat

Estrutura de Pastas Para que as aplicaes JSP funcionem de maneira satisfatria necessrio respeitar a seguinte estrutura de pastas: Todos os arquivos JSP devem ser inseridos dentro da pasta webapps que se encontra dentro da pasta tomcat. Alm dos arquivos JSP ainda deve existir uma pasta de nome WEB-INF que ser usada pelo projeto para armazenar o arquivo de controle XML e duas pastasjava e lib. Na pasta java ficaro armazenados todos os arquivos class que sero utilizados na aplicao. Por fim, na pasta lib devem ser colocados todos os arquivos jar. Seguindo a estrutura de pasta o seu servidor jsp deve ficar semelhante Figura 11.

13

Figura11 - Estrutura de pastas

Ateno fundamental que o nome da pasta seja exatamente como apresentando na Figura 11. Desta forma, a pasta WEB-INF deve ser escrita usando letra maiscula e as pastas classes e lib escritas usando letra minscula. Boa prtica Como uma forma de organizar suas aplicaes possvel criar uma pasta para cada projeto. Desta forma, seu ambiente de trabalho ter maior organizao. Veja a Figura 12.

Figura12 - Estrutura de pastas

14

Tag(s) A tag(s) ou etiquetas tem a funo de aplicar algum tipo de ao ou formatao ao cdigo. O JSP trabalhar basicamente com dois tipos de tag(s) as orientadas a criao de scripts e as baseadas em XML. Tag(s) orientadas a criao de script Toda tag de script JSP delimitada por , podendo existir um caracter adicional que vem logo aps o Digite seu nome:


19

O cdigo acima cria um formulrio HTML que ir receber um nome e enviar para a nossa pgina JSP via varivel super global. Vamos analis-lo rapidamente para lembrar alguns conceitos. As linhas1 e 2 so tags de abertura para documentos web escritos em HTML. Da linha 3 a 27 so cdigos de formatao CSS. Da linha 28 a 33 codificao HTML que inicia o corpo do documento web e diviso para aplicao da formatao CSS. A linha 34 merece um pouco mais de ateno. Nela criado um formulrio onde a forma de enviar dados ser a POST e o arquivo que receber ser o exemplo2.jsp. Desta forma possvel coletar dados do usurio e enviar para um arquivo jsp onde podemos manipular os dados que foram coletados. A linha 36 outra linha que merece destaque. Nela criada uma caixa de texto denominada nome a qual receber o nome digitado pelo usurio. A linha 38 cria um boto para enviar a informao coletada pela caixa de texto. O restante das linhas so codificaes HTML que no necessitamos debater pelo fato de j ter sido trabalhado na disciplina de HTML. A Figura 16 mostra o resultado da nossa codificao. Salve este arquivo com a extenso .htm ou .html na mesma pasta que estiver o arquivo exemplo2.jsp.

20

Figura16: Formulrio para leitura de nome

Ateno Embora o arquivo HTML possa ser aberto diretamente no navegador recomendado que seja abertoda mesma forma que se abre o arquivo JSP, ou seja, digitando o endereo completo na barra de endereo do navegador. Isso importante para o servidor TOMCAT no perder a informao que ser enviada para o arquivo exemplo2.jsp.

Declaraes Utilizam-se as declaraes para criar variveis e mtodos especficos que podero ser referenciados por outros elementos JSP. A sintaxe para declaraes : . Declaraes de varivel Variveis so espaos reservados na memria que possuem nome, tipo e seu tamanho definido de acordo com o tipo de dado que ser armazenado. As variveis definidas como declaraes so variveis de instncia. Sendo assim, seu valor especfico ao objeto e no classe. Veja os exemplos: Varivel21

Teste de varivel
Este exemplo simples e de pouca utilidade, mas serve para nosso estudo sobre varivel. Na linha 8 feita uma declarao de varivel pblica do tipo inteiro e atribuido o valor 18. A linha 10 exibe o valor dessa varivel. Por fim, a linha 11 exibe o dobro do valor da varivel. Modifique esse cdigo e faa novos testes. Use outros tipos de variveis. O JSP segue os mesmo tipos de variveis do JAVA, boolean, byte, char, short, int, long, float, double... Declarao de mtodos Os mtodos so instrues que realizam alguma atividade a qual lhe foi programada. Para outras linguagens os mtodos seriam a mesma coisa que funes. Uma vez declarado o mtodo esse pode ser acessado por qualquer elemento do script. Veja o exemplo abaixo: JSP Page Teste de varivel = 16) return "J pode votar"; else return "Ainda no pode votar"; } %> A linha 8 do cdigo acima inicia o mtodo pblico do tipo string voto. Ele recebe em seu argumento um valor inteiro referente a idade de um indivduo e retorna se o mesmo j tem idade para votar ou no. A linha 15 a chamada do mtodo voto22

passando para seu argumento a idade de 15 e exibindo a mensagem de retorno da funo.

Estrutura condicional As estruturas condicionais realizam operaes lgicas para decidir se um determinado cdigo ser ou no executado. Nesta apostila falaremos de duas estruturas os IF e os CASE. Estrutura condicional IF O IF testa uma determinada condio e recebe um valor lgico desse teste. As instrues presentes no bloco de instrues do IF sero executadas apenas se o resultado do teste for verdade. Veja o cdigo: Al, ! Esse cdigo j conhecemos. No entanto, agora podemos analisar o papel do if. Ele testa se a varivel visitante tem valor nulo. Caso tenha ela receber o valor Mundo. IF com ELSE Uma variao do if o if com else. Assim como o IF simples, o IF com ELSE testa uma determinada condio. A diferena que se o resultado do teste for verdade executar um conjunto de instrues e se o resultado for falso executar outro conjunto de instrues diferentes do primeiro. Assim, embora existam dois conjuntos de instrues apenas um ser executado. Veja o cdigo: ... if (idade>= 16) out.print("J pode votar"); else out.print("Ainda no pode votar"); } ... Esse um trecho de cdigo que tambm j conhecemos. Nele o if testa se o contedo da varivel idade maior que 16. Caso seja o output receber a mensagem de que j pode votar e caso no seja o output receber a mensagem

23

de que ainda no pode votar. Note que impossvel executar uma das duas instrues. IF com ELSE IF e ELSE A ltima variao do IF seria o IF com ELSE IF e ELSE. Neste caso executado um ou mais testes lgicos. Se o primeiro teste lgico for verdadeiro ser executado as instrues do primeiro bloco de comando do IF e no ser executado mais testes lgicos. Caso o resultado do primeiro teste lgico seja falso o primeiro bloco de instrues desprezado e um segundo teste lgico realizado. Se o resultado do teste for verdade o bloco de instrues que fica logo abaixo do teste ser executado. Caso seja falso ser realizado o terceiro teste lgico e assim por diante at que seja encontrado o comando ELSE. Quando o ELSE encontrado o procedimento adotado no IF com ELSE ser usado novamente. Vamos fazer um exemplo? Imagine que existiu uma eleio entre trs candidatos. Para que um dos candidatos seja declarado como vencedor ser necessrio que este possua mais de 50% dos votos. Caso nenhum dos trs candidatos obtenha a quantidade de votos necessrios uma mensagem informando que haver segundo turno ser exibida. JSP Page Exemplo de IF ( Total_de_Votos/2)){ out.println("O candidato A foi o vencedor"); } else if(Votos_de_B > ( Total_de_Votos/2)){ out.println("O candidato B foi o vencedor"); } else if(Votos_de_C > ( Total_de_Votos/2)){ out.println("O candidato C foi o vencedor"); } else{ out.println("No existem vencedores. Haver segundo turno"); } %> 24

Estrutura condicional Switch Assim como o IF o Switch realiza teste lgico para escolher qual bloco de instruo ser executado. No entanto, sua funcionalidade um pouco diferente. Veja abaixo a estrutura: switch(argumento_de_teste){ casevalor_0: out.print("Sada 0"); break; casevalor_1: out.print("Sada 1"); break; casevalor_2: out.println("Sada 2"); break; } Vamos analisar cada etapa: A primeira linha switch(argumento_de_teste) o inicio da estrutura. Nele tem a chamada do switch e o argumento_de_teste que ser testado com cada um dos casos at encontrar um caso que seja igual ao argumento. Quando o caso encontrado as instrues presentes no bloco de instrues desse caso sero executadas. Os demais casos sero desprezados. J os case valor_0: o cabealho de cada caso. Nele fica o valor que ser comparado ao argumento_de_teste no nosso caso seriam osvalor_0, valor_1, valor_2. Lembrando que apenas um dos casos ser executado. Isso porque ao final de cada bloco de instrues existe a instruo break. Quando o comando break ativado ele faz com que o fluxo de execuo saia da estrutura para a prxima linha aps a estrutura. Vamos fazer um exemplo? Veja abaixo: Que tal aprender um pouco de ingls? No nosso exemplo iremos ler do usurio um nmero que pode ser de 0 a 9 e informaremos como esse nmero escrito em ingls. Vejamos o cdigo. Formulrio para escolha do nmero * Escrito em ingls *


Escolha um nmero: 01 02 03 04 05 06 07 0826

09 10 O cdigo acima cria um formulrio para que o usurio escolha um nmero entre 0 e 9 para que seja escrito em ingls. Veja a Figura 17:

Figura17 - Coleta do nmero escolhido

Aps selecionar o nmero ele ser enviado para o arquivo switch.jsp. O cdigo do arquivo o apresentado abaixo: Exemplo de Switch No caso, a sada seria a apresentada na Figura 18.

28

Que tal trabalhar um pouco? Invente um novo aplicativo usando o switch. No vale ser a dos nmeros em ingls. Bom trabalho

Interao Muitas vezes ao logo do desenvolvimento do sistema encontramos a necessidade de repetir a ao realizando interaes com o mesmo cdigo. O JSP apresenta trs tipos de estrutura para iteraes ou loop. So o for, o while e o do while. Abaixo iremos conhecer cada uma delas. Loop usando o for O for uma estrutura que deve ser utilizada quando existe um conhecimento prvio do nmero de interaes que necessitam ser feitas. Sua estrutura padro apresentada abaixo: for (Inicializao; condio; incremento){29

comandos; }

Onde: Inicializao ser o espao onde a varivel utilizada para ser o contador receber o valor inicial. Condio a condio de parada do loop. Incremento a operao que ser feita na varivel que serve como contador. Todos os comandos presentes no bloco de comandos do for iro ser repetidos a quantidade de vezes que for definida na condio de parada. Vamos fazer um exemplo prtico do for para ajudar na nossa compreenso. Veja abaixo: JSP Page - for Tamanho da Letra Analisando o cdigo acima podemos notar que a varivel contador do for foi inicializada com o valor 1 e a condio de parada que essa varivel seja menor que 8. Como o incremento de uma unidade por iterao ento o cdigo presente no bloco de comando do for ser repetido por 7 vezes. A Figura 18 mostra o resultado desse cdigo.

30

Figura18 - Utilizando o for

possvel fazer interao decrescente. Veja o cdigo: JSP Page - for Tamanho da Letra

0; contador--){ out.println(" Letra de tamanho"); out.println(contador); out.println("
"); } %> Loop usando while

31

O while utilizado quando no existe conhecimento prvio de quantas interaes sero necessrias para finalizar o cdigo. Veja abaixo a estrutura bsica do while: while(condio){ comandos; } Onde: Condio a condio de parada do loop. importante que exista no bloco de comandos alguma ao que possa mudar o argumento da condio de parada. Do contrrio seria criado um loop infinito. Vamos fazer um exemplo de while? 10){ out.println(numero); numero = numero/2; } out.println(
Fora do while); %> Embora simples esse exemplo mostra a utilizao do while. Inicialmente a varivel nmero recebe o valor 200. Como a condio do inicial que o nmero seja maior que 10 ento o bloco de comandos do while ser executado. Caso o valor inicial da varivel nmero fosse menor ou igual a 10 o bloco de comando do while no seria executado. Desta forma, podemos notar que no existe garantia de que o cdigo dentro do while seja executado. Para isso, necessrio satisfazer o argumento. Loop com do while A interao usando do while semelhante interao utilizando o while. A diferena que o bloco de comandos executado e s depois testa-se o argumento da instruo. Desta forma, fica garantido ao menos uma vez a execuo do bloco de comandos. Sua estrutura : do{ bloco de comandos; }while(condio)

32

Observe que a condio ser testada no final do while. Caso ela seja verdade continua a interao. Se for falsa o foco segue para a prxima linha aps o do while. Veja um exemplo: JSP Page - for Tamanho de do while

No exemplo acima possvel observar que o loop s funcionar uma vez, pois o nmero no menor que 10.Vamos fazer exerccio? Crie um sistema que utilize as trs opes de loop presentes no JSP.

Tratamento de excees Durante a programao possvel encontrarmos falhas ou excees no nosso cdigo que se no forem tratadas podem simplesmente travar sua pgina e fechar tudo. Imaginemos um caso simples para esse tipo de erro. Suponhamos que o33

usurio ir informar dois nmeros inteiros e o sistema dever exibir o resultado da diviso do primeiro pelo segundo. Realmente um sistema simples, mas tem um detalhe em especial. Se o segundo numero for zero o sistema ir travar ou fechar. Afinal, no existe diviso por zero. Essa questo poderia ser solucionada de vrias maneiras, mas para nosso exemplo vamos testar a estrutura try. A forma geral do try a apresentada abaixo: try{ Comando; } catch(Exception ex) { excesso; } No bloco de comando do try inserido o cdigo que se deseja para execuo normal. Caso exista uma falha no cdigo em tempo de execuo ser apresentado o que estiver no bloco de comando do catch. Agora que compreendemos a estrutura bsica do try vamos voltar para o exemplo da diviso. Veja abaixo como seria o cdigo: JSP Page Tratamento de excesso Caso o divisor tenha o valor 0 ser mostrado a mensagem Erro na diviso. Voc pode comentar: Por que no diz uma mensagem tipo No existe diviso por 0? A34

resposta simples:embora o erro esperado seja o de diviso por 0, o try tratar qualquer exceo em tempo de execuo.

Varivel Composta Variveis so espaos reservados na memria RAM que possuem nome e tipo. Como o prprio nome j diz elas so variveis e, sendo assim, podem ter o contedo modificado ao longo do programa. No entanto, s vezes desejamos armazenar novos valores sem que haja perda do contedo anterior. Tarefa que seria impossvel para variveis simples, mas algo fcil para variveis compostas. Grosso modo podemos dizer que a varivel composta tem as mesmas caractersticas de uma varivel s que podemos armazenar mais de uma informao, ou seja, varivel composta pode ser considerada um conjunto de variveis simples. Existem dois tipos de variveis compostas que so array unidimensional e array multidimensional. Array unidimensional Array unidimensional nada mais do que vetores, ou seja, possui uma linha e variveis colunas. O espao definido para armazenar dados ser o indicado no ndice do vetor. Em JSP o array pode ser criado usando duas metodologias. A primeira seria criar o array j cadastrando seus elementos e a segunda seria criar o array adicionando elementos quando necessrio. Veja os exemplos abaixo: Exemplo 1: No exemplo 1 criado um array unidimensional denominado Nomes e do tipo String. No momento da sua criao j so inseridos os elementos do array. Neste caso em especial quatro nomes de pessoas. Aps a criaoutiliza-se um for para exibir o contedo do array. Exemplo 2 O exemplo 2 tambm tem a funcionalidade de armazenar nome de pessoas. No entanto, primeiro criado o array Pessoas com a capacidade de armazenar 4 elementos. Posteriormente os elementos so atribudos uma a um. Array multidimensionais Os array multidimensionais so semelhantes ao unidimensional. Sua maior diferena que seu crescimento no apenas no nmero de colunas, mas em linha, pginas e assim por diante. O caso mais comum de array multidimensional a matriz. Vejamos o cdigo abaixo: O cdigo acima importa a classe io do pacote java. Maiores detalhes sobre o cdigo ser mostrado quando falarmos de arquivos. Arquivo Todos os dados armazenados em variveis ou arrays so perdidos quando o sistema encerrado. Desta forma, toda informao que no possa ser perdida aps o termino do sistema deve ser armazenada em algum dispositivo permanente. Entre as opes de armazenamento de dados permanente encontram-se os arquivos. Os arquivos texto so o tipo mais simples de armazenamento de dados. Ideal para quem tem a necessidade de guardar informaes que no necessitam de segurana ou regras de manipulao avanada como o banco de dados. Para manipular arquivo texto no JSP necessrio fazer a importao do pacote java.io. No JSP a importao feita utilizando a diretiva onde o nome seria o nome do pacote que ser importado. Para o nosso caso o cdigo ficaria desta forma: . A diretiva import pode ser utilizada para importao de qualquer pacote java que seja necessrio no cdigo. Agora que j conhecemos como importar o pacote java.io vamos iniciar nossa codificao sobre arquivos. Escrevendo em Arquivo 45

O cdigo acima cria um arquivo de nome arquivo.txt e escreve em seu interior a mensagem Curso de Java Server Pages. Vamos analisar cada linha para compreendermos melhor. Na primeira linha, , feita a importao do pacote java.io. Sem ele no teramos como fazer a manipulao do arquivo. A terceira linha, File NovoArquivo = new File("c:/CursoJSP.txt");,cria o objeto de nome NovoArquivo do tipo file (arquivo) com o caminho do arquivo definido pelo usurio. Caso no exista um arquivo no caminho especificado esse ser criado e caso j exista o arquivo antigo ser substitudo por um novo. Para adicionar dados a um arquivo existentes utilize true aps o nome do arquivo. Veja como ficaria a linha: FileWriter NovoArquivo = new FileWriter("c:/CursoJSP.txt",true); A quarta linha, PrintWriter saida = new PrintWriter(NovoArquivo);,cria o objeto de nome salvar que ser utilizado para escrever no arquivo texto. Observe que o argumento do objeto salvar ser o objeto NovoArquivo. Desta forma, possvel informar qual arquivo desejamos manipular. Uma possvel variao para a essa linha seria utilizar a palavra true aps o nome do objeto que iremos manipular. Veja a linha: PrintWriter saida = new PrintWriter(NovoArquivo,true); desta forma os dados sero enviados para o arquivo sempre que for chamado o mtodo print ou println. Se utilizar o true os dados s sero enviandos quando o arquivo for fechado, atualizado ou quando enviar uma quebra de linha. Na quinta e sexta linhas estamos escrevendo no arquivo. possvel variar entre o println e o print. No primeiro caso escreve-se no arquivo e pula uma linha. J no segundo escreve-se no arquivo e o cursor permanece na mesma linha. A stima e a oitava tem o mesmo efeito da linha cinco e seis respectivamente. A diferena que os dados so enviados para o navegador e no para um arquivo. O motivo de utiliz-las para que o usurio receba alguma informao do sistema. Sem elas o arquivo receberia a informao normalmente, mas o usurio apenas iria visualizar o navegador como uma pgina em branco. A nona linha, saida.close();, o fechamento do arquivo. importante fechar o arquivo quando no mais utiliz-lo.

46

Leitura de Arquivo Agora que j criamos um arquivo e escrevemos dados nele, chegou o momento de aprendermos a ler um arquivo.Veja o cdigo: O cdigo acima l linha a linha at chegar ao final do arquivo. Veja que a codificao semelhante a escrita no arquivo. Vamos analis-lo: A primeira linha faz a importao do pacote java.io. A terceira linha cria o objeto leitura que armazenar o endereo fsico do arquivo que ser lido. A quarta linha cria o objeto leitor que ser usado para manipular o arquivo na codificao. Na quinta linha criada uma varivel do tipo string que receber cada linha que for lida do arquivo. A stima linha merece um pouco mais de ateno. Nela extrada a linha corrente do arquivo e atribuda a varivel string linha. Por fim, a dcima segunda linha e a dcima terceira so linhas para fechar o arquivo aberto. As demais linhas j so conhecidas nossa e por isso no voltei a falar sobre o que cada uma faz. Agora que aprendemos a criar e ler arquivos em JSP procure praticar. Receba informaes do usurio e escreva para um arquivo. Uso seu conhecimento acumulado para essa tarefa.

47

O cdigo para leitura de um arquivo funciona perfeitamente. No entanto, ser o mais otimizado? Se voc acha que sim no precisa fazer nada. Se achar que no use seu conhecimento para mostrar outra maneira para ler um arquivo.

Diretrios Diretrios so pastas utilizadas para separar arquivos ou at mesmo sistemas. A grande vantagem de se utilizar diretrios garantir uma melhor organizao dos seus projetos. Criar diretrio O processo de se criar um diretrio utilizando JSP bastante simples. Veja o cdigo abaixo: O cdigo acima cria um diretrio (pasta) na raiz da unidade C denominado JSP. Vamos analisar algumas linhas para melhor compreender a codificao. A primeira linha importa o pacote java.oi. A terceira linha cria uma varivel do tipo string denominada endereo e atribui-se a ela o endereo onde se deseja criar o diretrio. A quarta linha cria um objeto do tipo arquivo que ser manipulado no sistema para criar o diretrio. Por fim, a quinta linha cria o diretrio desejado. importante lembrar que o usurio precisa ter permisso de criar diretrios no sistema operacional para que esse cdigo funcione adequadamente. O mtodo mkdir();retorna o valor booleano true quando o diretrio for criado e falso quando houver uma falha na criao do diretrio. possvel utilizar esse valor de retorno para informar ao usurio se o diretrio foi criado com sucesso. Embora o cdigo acima funcione perfeitamente, nenhuma mensagem enviada ao usurio. Sendo assim, o usurio apenas ir visualizar uma pgina em branco no navegador. Algo que pode ser frustrante para o usurio. Uma boa prtica seria informar se o48

diretrio foi ou no criado. Vamos reescrever o cdigo assim para que o usurio possa receber a mensagem.

Desta forma, o usurio saber se o diretrio foi ou no criado. Testar se o diretrio existe Agora que aprendemos a criar um diretrio vamos testar se ele existe mesmo. Para isso utilizaremos o mtodo exists(). Esse testa se o arquivo ou diretrio existe. Veja a codificao: Para no ficarmos redundantes iremos comentar apenas as linhas de maior importncia ou que ainda desconhecemos. Vamos a elas: A terceira linha cria uma varivel do tipo string de nome caminho que receber o endereo do diretrio para teste. A quinta linha testa se o diretrio existe. Caso positivo o mtodo exists() retornar true caso no exista o valor de retorno ser false.49

Exibir contedo do diretrio Criamos o diretrio e testamos se ele existe. Chegou a hora de exibir o contedo de um diretrio. Para o nosso exemplo utilizaremos o diretrio JSP que se encontra na raiz da unidade C. Veja a Figura 20.

Figura20 - Diretrio exemplo

Nossa funo ser exibir todo o contedo do diretrio. Para isso veja o cdigo abaixo: Aprendendo JSP 50

O resultado da codificao ser uma pgina com a lista de cada arquivo e diretrios presentes no interior do diretrio JSP. Veja a Figura 21.

Agora que j vimos o diretrio e o resultado da codificao chegou a hora de fazermos uma anlise das principais linhas dessa codificao. Vamos comear? A linha 10 cria um array do tipo string e de nome arquivos onde cada campo ir armazenar o nome de um arquivo ou diretrio presente no interior do diretrio informado. O mtodo list() retorna um array com o nome dos arquivos e diretrio do diretrio indicado. As linhas 11 e 12 so as responsveis por exibir o array arquivo na pgina web. O que no novidade para a gente. Apenas o mtodo length merece comentrio. Ele retorna o tamanho do arquivo indicado. Para o nosso caso esta retornando o tamanho do array arquivos. Excluir Depois de criar tantos arquivos e diretrios chegou o momento de aprendermos a excluir. Afinal no podemos deixar nosso computador cheio de arquivos desnecessrios. Utilizaremos o mtodo delete() para excluirmos arquivos ou diretrio da unidade fsica. Excluir arquivo51

Para excluir arquivo de um diretrio basta criar o cdigo abaixo: Excluindo arquivos usando JSP A nica novidade do cdigo acima est na linha 8. Nela tenta-se excluir o arquivo indicado na string caminho. O mtodo delete retornar true se o arquivo tiver sido excludo com sucesso ou retornar false em caso de falha. A Figura 21 apresenta o diretrio original e a Figura 22 apresenta o diretrio aps o uso da codificao acima. Observem que o arquivo array.jsp foi excludo.

Figura21 - Diretrio original

52

Figura22 - Diretrio com arquivo excludo

Excluindo diretrio Para excluir um diretrio qualquer se utiliza o mesmo cdigo de excluso de arquivos. Apenas um detalhe deve ser observado. S ser possvel excluir diretrios que estejam vazios.Veja o cdigo: Aprendendo JSP O cdigo acima exclui o diretrio exemplo que se encontra no diretrio JSP. A Figura23 mostra o diretrio original e a Figura 24 mostra o diretrio aps a excluso. Observe na Figura 24 que o subdiretrio exemplo no existe mais.53

Figura23 - Diretrio original

Figura24 - Diretrio aps excluso de pasta

IncludeA linguagem JSP oferece a possibilidade de incluir arquivo em uma pgina. Isso possvel utilizando a diretiva include que ter a seguinte estrutura:54

Onde o nome do arquivo ser o arquivo que deseja-se incluir na codificao. possvel incluir arquivosestticos ou dinmicos em uma pgina JSP. No entanto, o resultado da incluso ser especfico para o tipo de arquivo includo.

Include EstticoQuando a incluso de um arquivo esttico o resultado s ser visualizado na apresentao da pgina JSP. Veja o exemplo: Inicialmente temos uma pgina esttica com o seguinte cdigo: IFPE A nica coisa que esse cdigo faz colocar a Figura ifpe.jpg como plano de fundo da pgina. Veja a Figura 25.

Figura25 - Pgina com plano de fundo do IFPE

55

O segundo cdigo de uma pgina JSP. A funo do cdigo ser apenas apresentar a mensagem Al, mundo!. Veja o cdigo: Observe que um cdigo simples que j temos familiaridade. O resultado deste cdigo o apresentado na Figura 26.

Figura26 - Pgina exemplo para o include esttico

Agora que j conhecemos as duas codificaes que usaremos neste exemplo, iremos incluir o arquivo htm na pgina JSP. Veja como ficaria o cdigo: 56

A linha 3 mostra que um arquivo est sendo includo no cdigo. No caso em especial o arquivo includo o ifpe.htm. Veja na Figura 27 como fica o resultado desta incluso.

Figura27 - Pgina JSP com arquivo esttico includo.

Embora no exista nenhuma referncia ao background na codificao JSP esse foi includo no momento que usamos a codificao da pgina ifpe.htm.

Include dinmicoA forma de incluir arquivo dinmico em pginas JSP idntica incluso de arquivos estticos, mas o efeito ser diferente. Quando o arquivo dinmico includo este realiza todas as aes previstas no arquivo devolvendo o controle para o a pgina JSP que o incluiu. Funciona semelhante a chamada de uma funo. Veja o exemplo: metodo.jsp

57

O cdigo acima apresenta a codificao presente no arquivo metodo.jsp. Observe que um cdigo simples para criar um mtodo que ir receber em seu argumento dois nmeros inteiros e retorna a soma destes nmeros. Include_dinamico.jsp J o segundo cdigo extrado do arquivo Include_dinamico.jsp este arquivo faz a incluso do arquivo dinmico metodo.jsp e apartir deste momento pode utilizar todas as funcionalidades do cdigo que foi includo. No caso, o arquivo Include_dinamico.jsp utiliza o mtodo soma mesmo sem ter o mtodo declarado em sua pgina. Isso foi possvel pelo fato do mtodo ter sido includo no momento da incluso do arquivo metodo.jsp.

SessionUma sesso um objeto associado ao usurio. Informaes do usurio podem ser armazenadas em uma sesso e resgatadas posteriormente. Diferente do cookie nas sesses, as informaes armazenadas permanecem no servidor. Basicamente podemos imaginar que sessesso variveis criadas na primeira vez que o usurio acessa a pgina e podem ou no serem atualizadas nos demais acessos. Desta forma existir uma sesso para cada usurio.

Criar SessoBom, chega de papo! Vamos criar uma sesso.Neste primeiro cdigo iremos fazer uma sesso para armazenar o nome de um time de futebol. Veja abaixo: escolher_Time.htm Time de Futebol Digite o nome do seu time de futebol favorito:


Esse primeiro cdigo cria apenas uma formulrio, em HTML, que ser usado para receber o nome do time de futebol favorito do usurio e enviar para a pgina criar_sessao.jsp. A Figura 28 apresenta a pgina resultante desse cdigo.

59

Figura28 - Escolher time para sesso

criar_sessao.jsp A novidade que encontramos no cdigo da pgina criar_sessao.jsp a linha 4, session.setAttribute ("sessaotime", nome);, nela criamos verdadeiramente uma sesso de nome sessaotime e que ir armazenar o contedo da varivel nome. Caso a sesso seja criada a mensagem Sesso Criada ser apresentada. Caso exista erro a mensagem Falha na criao da sesso ser apresentada. Veja a Figura 29.

60

Figura29 - Sesso criada com sucesso

Exibir SessoCriamos nossa sesso mais no tem sentido criar sem que se possa resgatar o valor atribudo. Est a funo do cdigo da pgina exibir_sessao.jsp. Veja abaixo: exibir_sessao.jsp Time de Futebol Time Escolhido




J um cdigo bem conhecido. A exceo seria a linha 37, . Nesta linha resgatado o contedo da sesso sessaotime e posteriormente exibido na tela. Veja a Figura 30.

Figura30 - Exibir sesso

Da mesma forma que a informao foi exibida na tela ela poderia ter sido armazenada em uma varivel para que fosse possvel realizar manipulaes. No foi to complicado criar uma sesso simples, foi? Modifique o cdigo acima e crie sua prpria sesso.62

Tempo de vida da sessoAs sesses que criamos at agora no tinham um prazo de validade, ou seja, no existia limite de tempo para que elas estivessem ativas. Contudo ser que desejamos manter uma sesso infinitamente? Uma alternativa para esse problema seria utilizar o mtodo session.setMaxInactiveInterval(tempo). Ele define o tempo de vida da sesso, ou seja, quanto tempo a sesso estar ativa. Seu argumento ser sempre um valor inteiro que representar o tempo (em segundos) de durao da sesso. Veja o exemplo: Sessao.jsp PginaSessao.jsp criar uma sesso de nome dados que ir armazenar as informaes presentes na varivel nome. Algo que j aprendemos a fazer no cdigo anterior. A diferena neste cdigo est na linha 4, session.setMaxInactiveInterval(60);, nela chamado o mtodo session.setMaxInactiveIntervaldefinindo que o tempo de vida da sesso ser de 60 segundos, ou seja, um minuto. Exibir.jsp A pgina Exibir.jsp ir exibir o contedo da sesso dados. Rodo a pgina Exibir.jsp antes de completar um minuto de ter atualizado a pgina Sessao.jsp. Observe que o valor apresentado ser Teste de sesso. Espere um minuto e atualize a pgina Exibir.jsp e note que o valor apresentado ser null, ou seja, no existe a sesso dados.

RemoverExistem momentos que no desejamos esperar o tempo necessrio para que o tempo de vida da sesso seja concludo. Seja para liberar espao na memria ou simplesmente porque a sesso deixou de ter utilidade. Para remover a sesso podemos utilizar o mtodo session.removeAttribute("nome da sesso"). Vamos testar? Lembra da nossa sesso de nome dados? Vamos remover? Veja o cdigo:

63

Aps chamar uma pgina com o cdigo acima pea para visualizar a sesso dados. Voc ver que o valor resultante ser null. Isso porque a sesso no mais existe.

Outras operaes com sessoAntes de concluirmos nosso assunto sobre sesso gostaria de apresentar trs mtodos. So eles:

out.println("A sesso foi criada em: " + session.getCreationTime()); out.println("O ultimo acesso a sesso foi em: " + session.getLastAccessedTime()); out.println("O id da sesso : " + session.getId()); O mtodo session.getCreationTime()informa (em milissegundos) quando a sesso foi criada. J o mtodo session.getLastAccessedTime()informa (em milissegundos) quando foi o ltimo acesso a sesso. Por fim, o mtodo session.getId()informa o identificador nico da sesso. Cada sesso possui seu identificador. Vamos fazer um exerccio? Que tal converter o valor de retorno dos mtodos para hora, minuto e segundo? Desta forma, pode trabalhar todo seu conhecimento de JSP.

Administrao de e-mailsDificilmente uma empresa pode dizer que sobrevive no mercado atual sem utilizar e-mail. O correio eletrnico uma importante ferramenta de comunicao on-line. Alm de ser um bom meio de troca de arquivos. Para trabalhar com e-mails no JSP necessrio que utilizar a API javamail. Essa API pode ser baixada no site64

http://javamail.kenai.com/nonav/javadocs/index.htmlque tambm contm dicas para sua instalao.

Enviando e-mailPara enviar qualquer e-mail necessrio ter um servidor de e-mails. Como ser mostrado no cdigo abaixo: Analisando o cdigo podemos notar que: A linha 4, propriedade.put("mail.smtp.host", "smtp.seuservidor.com.br"); , recebe o servidor de e-mail que ser usado para transmisso do e-mail. A linha 7, InternetAddress from = new InternetAddress("[email protected]");, cria o objeto from atribuindo o endereo de e-mail de quem est enviando. A linha 9, InternetAddress to = new InternetAddress("[email protected]");, cria o objeto to atribuindo o endereo de quem receber o e-mail. As linhas 11 e 12 recebem o assunto do e-mail e o texto do corpo. A linha 13,Transport.send(message);, responsvel pela transmisso do e-mail. Teste esse cdigo no seu servidor de e-mail. Envie um e-mail para seu colega de turma falando como legal estudar JSP. S no crie SPAMs.

Banco de DadosAssim como os arquivos o banco de dados uma forma de armazenamento de dados permanentes, ou seja, que no sero perdidos quando a mquina for desligada. No entanto, o banco de dados oferece diversas vantagens em relao aos arquivos. Dentre elas podemos citar a segurana, organizao, velocidade de65

acesso entre tantas outras. Nesta etapa do nosso estudo vamos conhecer um pouco sobre banco de dados e como utiliz-lo no JSP.

Modelos de DadosPodemos compreender como modelos de dados um conjunto de conceitos que descrevem a estrutura do banco. Dentre os modelos podemos destacar o modelo relacional e o modelo orientado ao objeto.Modelo Relacional

O modelo relacional foi criado tendo como base a teoria dos conjuntos e a lgebra relacional. til na soluo de problemas no nvel de concepo e implementao do banco de dados. Sua estrutura a tabela que pode se relacionar com outras tabelas atravs dos seus campos. Veja o exemplo: Tabela Pessoa Cod_Pessoa 1 2 3 Tabela Produto Produto 1 2 3 Tabela Venda Cod_Venda 1 2 3 Cod_produto 2 3 2 Cod_Pessoa 1 1 3 Quantidade 2 5 1 Nome Mouse Teclado Cabo Quantidade 21 33 50 Nome Pedro Paulo Joo Cidade Recife Caruaru Garanhuns

Observem que as tabelas se relacionam. Veja vendas. Para a venda ser feita necessrio o cdigo do produto que foi vendido e o cdigo do vendedor. Essas informaes chegam tabela vendas como chaves estrangeiras.Modelo Orientado ao Objeto

66

O modelo relacional pode tornar-se complicado de utilizar quando os dados so muito complexos. Como alternativa a esse modelo surge o modelo orientado a objeto. Que a unio dos modelos de dados tradicionais e a orientao a objeto. Este modelo passou a ter identidade de objeto, herana, encapsulamento e polimorfismo. A manipulao do bando de dados orientado a objeto atravs de mtodos presentes nas classes que estejam o objeto. Sua modelagem feita utilizando a linguagem UML.

Instalando o Banco de DadosExistem diversas bases de dados que podem ser utilizadas por aplicaes JSP. Seria pouco produtivo citar aqui, pois cada um pode ter sua preferncia. No entanto, para o nosso curso utilizaremos o sistema de gerenciamento de banco de dados (SGBD) MYSQL. Dentre os fatores que levaram a sua escolha est o fato de ser um software livre e de fcil utilizao. Esse SGBD pode ser baixado no sitehttp://www.mysql.com/downloads/ Instalando o MYSQL

Aqui iremos apresentar como instalar o MYSQL no Windows XP. Os demais sistemas seguem o mesmo princpio dessa instalao. 1 Baixe o arquivo mysql-essential-5.1.45-win32.msi ou semelhante para seu sistema operacional. Aps baixar execute o arquivo e siga as opes padres conforme apresentado nas Figuras de 31 a 36.

Figura31 - Inicio da instalao do MYSQL

67

Figura32 - Instalao Typical

Figura33 - Seguindo a configurao padro

68

Figura34 - Instalando o MYSQL

Figura35 - Instalando o MYSQL

69

Figura36 - Final da instalao do MYSQL

Configurando MYSQL

Concluda a instalao do banco de dados chega o momento de configurar. Escolha a opo Standard. Veja Figura 37.

Figura37 - Escolhendo a configurao Standard

Nas prximas etapas basta seguir a configurao padro. Conforme apresentado nas Figuras 38 e 39.

70

Figura38 - Configurando MYSQL

Figura39 - Configurando MYSQL

Seguindo todos os passos apresentados acima chega o momento de inserir a senha do banco. Escolha uma senha adequada. Para nossos estudos utilizarei a senha 12345.

71

Figura40 - Definindo senha do MYSQL

Aps insero da senha e clicado na tela prximo ser aberta a tela que ir testar toda a configurao. Caso toda configurao esteja correta ser apresentada uma tela semelhante Figura 41, mas se existir alguma falha no processo ser apresentada uma tela semelhante aFigura 42. Caso exista falha leia onde foi encontrado o erro e repita o processo.

72

Figura41 - Configurao concluda com sucesso

73

Figura42 - Falha na configurao

Conectividade com o Banco de DadosConcluda toda instalao e configurao do banco chegou o momento de conectar ao sistema. Para utilizar o banco de dados no JSP preciso instalar o drive que far a ligao entre o MYSQL e o JSP. Esse drive o mysqlconnector-java que se encontra no site http://dev.mysql.com/downloads/connector/j/ Quando baixar o drive copie o arquivo mysql-connector-java-5.1.18-bin.jar para a pasta ...Tomcat 7.0\lib Feito isto feche a pasta e crie o cdigo abaixo para saber se o conector est funcionando. Teste do Driver

74

Se o drive estiver funcionando a mensagem Driver Funcionando!serapresentada. Caso no esteja funcionando a mensagem Erro no funcionamento do drive e o motivo do erro ser exibido. Est a ultima etapa para instalao e configurao da base de dados. Nos prximos tpicos iremos aprender como manipular a base de dados.

Linguagem SQLA linguagem SQL (Structured Query Language) surgiu no final dos anos 70. Hoje em dia praticamente todos os SGBD aceitam o SQL. Toda manipulao de dados feita atravs de consultas declarativas.Nossos cdigos JSP sero todos construdos utilizando o SQL para manipulao dos dados.

Criando Bando de dadosA primeira tarefa para nosso estudo de banco de dados em JSP ser criar um banco de dados. Afinal como manipular o banco se ele no existir? Para nosso estudo criaremos o banco JSP. O comando SQL para criao de um bando de dados CREATE DATABASE`JSP` ; onde JSP o nome da base de dados que desejamos criar. Apenas esse cdigo seria perfeitamente aceitvel se estivssemos trabalhando dentro do MYSQL (Command Line Client), mas no nosso caso. Estamos trabalhando o MYSQL atravs do JSP e por isso necessrio conectar ao SGBD e s depois utilizar o cdigo SQL. Veja como ficaria o cdigo: O cdigo acima tenta conectar-se ao SGBD e caso no haja falha na conexo ser criado um banco de dados chamado JSP. Vamos analis-lo: A linha 1, , importa o pacote sql. Ela necessria para utilizar todo cdigo de manipulao do banco de dados. A linha 3, String url = "jdbc:mysql://localhost";, cria uma varivel do tipo String de nome url que ir armazenar o endereo do SGBD o qual desejamos manipular. A linha 4, String usuario = "root";, cria uma varivel do tipo String de nome usurio que ir armazenar o login do usurio que est tentando acessar o SGBD. A linha 5, String senha = "12345";, cria uma varivel do tipo String de nome senha que ir armazenar a senha do usurio que est tentando acessar o SGBD. A linha 6, Connection conn = null;, cria uma varivel do tipo Connection de nome conn. Essa varivel ser utilizada para conexo ao SGBD. A linha 8, Class.forName("com.mysql.jdbc.Driver").newInstance();, carrega os drives de manipulao do MYSQL. Os mesmo drives que instalamos no TOMCAT para manipulao do SGBD MYSQL. A linha 9, conn = DriverManager.getConnection(url, usuario, senha);, tenta conectar-se ao SGBD e os dados da conexo so atribudos a varivel conn. A linha 11,catch(SQLException ex), realiza o tratamento para excees no cdigo SQL. A linha 12, out.println("SQLException: " + ex.getMessage() + "
");, exibe uma mensagem com o erro encontrado ao se tentar executar a instruo SQL. A linha 13, out.println("Cdigo do Erro: " + ex.getErrorCode() + "
");, exibe o cdigo do erro encontrado ao se tentar executar a instruo SQL. A linha 16,out.println("Problemas ao tentar conectar com o SGBD");, exibe uma mensagem de erro para falhas em geral. A linha 18,if(conn != null), testa se a varivel conn contm os dados de conexo do SGBD.76

A linha 19, Statement query = conn.createStatement();, cria um objeto para receber comandos SQL. A linha 20,query.executeUpdate("CREATE DATABASE `JSP` ;");, executa o comando SQL que o argumento do mtodo executeUpdate do objeto query. As demais linhas no foram citadas por j serem conhecidas nossa. Execute esse cdigo e um banco de dados de nome JSP ser criado. Acesse o MYSQL via Command Line Client e digite Show databases;. Observe que ir exibir a lista de todos os bancos de dados presentes no SGBD. Se tudo deu certo voc dever encontrar o banco JSP nesta lista. Veja a Figura 43.

Figura43 - Lista de todos os bancos presente no SGBD

Agora que voc aprendeu a criar um banco de dados vamos executar o cdigo novamente. Veja que dessa vez ser exibido uma mensagem de erro. Isso ocorre pelo fato do banco de dados que desejamos criar j existir. Como no inserimos nenhum tipo de tratamento para erro a pgina no exibida. Reescreva seu cdigo como o apresentando abaixo: Observe que desta vez nossa tentativa de criar um banco de dados est dentro de um try. Sendo assim, se no for possvel criar o banco ser exibida uma mensagem informando que no foi possvel e o cdigo de erro.

Criando tabelaUm banco de dados sem tabelas teria pouco ou nenhuma utilidade, no verdade? O processo para criar tabelas semelhante criao de um banco de dados. A diferena que iremos informar cada campo da tabela. Para o nosso exemplo iremos criar uma tabela com trs campos: ID, Nome e Idade. Utilizando apenas instruo do SQL o cdigo seria este: create table pessoa(id int(3) unsigned not null auto_increment, nome varchar (200), idade int(3), primary key (id));Observem que o campo id no permite dado nulo, auto incremento e foi definido como chave primria. No entanto, vamos inserir esse cdigo em uma pgina JSP. Veja como ficaria:

not

null

O cdigo acima criou um de nome Pessoa com os campos cdigo do tipo inteiro, nome do tipo varchar(string) de tamanho 200 e idade do tipo inteiro. Observe que o cdigo idntico ao cdigo de criao de um banco de dados. Apenas duas diferenas nas linhas 3 e 20. A primeira informa que iremos manipular a base de dados JSP e no o SGBD como feito anteriormente. J a segundo mostra a alterao do cdigo SQL.

Inserir dadosAgora que j criamos nossa base de dados e nossa tabela chegou o momento de inserirmos informaes (dados). Essa a funo do INSERT no SQL. Para o nosso caso iremos inserir um nome e a idade no nosso campo. INSERT INTO Pessoa (id, nome, idade) VALUES (1, 'Joo', 15);. Observem que para cada campo criado existe um dado para ser inserido. No caso, id recebe 1, nome recebe Joo e idade recebe 15. Veja como ficaria utilizando esse cdigo no JSP: Execute o cdigo acima e veja que ele funciona perfeitamente, mas s uma vez. Isso pelo fato do campo id ser nico, ou seja, no devem existir dois campos com o mesmo valor no id. Como no nosso cdigo o id sempre recebe 1 isso torna o cdigo invlido na segunda vez que utilizamos. Reescreva o cdigo conforme apresentado abaixo:

80

Analisando o cdigo podemos notar que o INSERT da linha 21 no apresenta dados para o campo id. Realmente no necessrio informar qual o valor do campo id. Isso pelo fato do campo ter sido definido como auto incremento. Desta forma ele adiciona uma unidade no seu valor cada vez que for inserido dado nos demais campos. Execute o cdigo anterior e ver que pode adicionar dados vontade na tabela, no importando quantos Joo de 15 anos existam. Todos tero id diferente das demais, fato que permite utilizarmos o campo id como chave primria.

Recuperando DadosTodas as operaes que fizemos at o momento s puderam ser confirmadas atravs de meio externo de acesso ao banco, ou seja, para visualizar todas as modificaes que eram feitas na base de dados precisamos utilizar o Command Line Client do MYSQL para visualizar o resultado. Vamos mudar isso? O objeto ResultSet. quando executa uma instruo de consulta ao banco de dados o resultadoda consulta ser uma tabela, deixando um apontador posicionado na primeira linha desta tabela.O mtodo Next() move o apontador para as demais linhas da tabela retornando false quando no existir mais linhas. Para ajudar na nossa compreenso modifiquei a tabela pessoa do banco JSP. Vejam como ela ficou: ID 1 2 3 4 5 6 7 8 9 Nome Joana Maria Paulo Rafael Lucia Taisa Flvia Pedro Lucas Idade 15 30 10 1 45 20 29 18 9

Agora que temos uma tabela completa vamos criar um cdigo que permita visualizar seus elementos. Veja abaixo:

O resultado do cdigo acima pode ser visto na Figura44. Conforme foi dito, esse cdigo exibe todos os nomes e suas respectivas idades da tabela pessoa. Vamos analis-lo: A linha 18, String query = "SELECT nome, idade FROM pessoa";, cria uma varivel do tipo string de nome query que ir armazenar nossa consulta SQL. Neste caso em especial feito a seleo dos campos nome e idade da tabela pessoa. A linha 19, Statement stmt = conn.createStatement();, cria o objeto stmt do tipo Statement. Dela so tirados os mtodos para consultar a tabela. A linha 20, ResultSet rs = stmt.executeQuery(query);, executa a consulta SQL com o mtodo executeQuery. O resultado da consulta armazenado na varivel rs. A linha 21, while (rs.next()), inicia um lao que ir executar enquanto existir linhas para serem lidas na tabela pessoa. A linha 22, String nomes = rs.getString("nome");, utiliza o mtodo getString para retirar a informao do campo nome convertendo em uma string aceita pelo JSP e armazenando na varivel nomes. A linha 23, int idades = rs.getInt("idade");, tem ao semelhante a linha 22. A diferena que a informao ser retirada do campo idade e convertida no tipo inteiro aceito pelo JSP. Seria possvel converter em outros tipos vlidos como o getFloat ou at mesmo o getString. As demais linhas do cdigo j fazem parte de tudo que aprendemos no JSP e por isso no irei comentar. A consulta tabela pessoa pode ser modificada apenas modificando a instruo SQL. Teste mudar. Por exemplo, tente realizar uma consulta para exibir apenas o nome e a idade da pessoa que possui o cdigo 3. Para isso, basta escreve a consulta SQL: SELECT nome, idade FROM pessoa where id = 3.82

Figura44 - Tabela pessoa

Alterar CampoOutra importante ao a ser realizada em uma base de dados a opo de alterar um determinado campo ou toda uma tabela. Para realizar a alterao de qualquer campo na tabela utilizamos o mesmo cdigo que foi visto na opo de inserir dados. A nica mudana a escrita do SQL. Veja o cdigo abaixo: Comparando com o cdigo que insere dados em uma tabela a nica mudana est na linha 21 onde o SQL deixou de ser a instruo INSERT para utilizarmos a instruo UPDATE. Observe que o cdigo acima modifica o nome e a idade da pessoa que possui cdigo 2. Conforme pode ser visto na Figura 45 em comparao com a Figura 44.

Figura45 - Tabela atualizada

ExcluirPor fim, podemos encontrar situao em que alguma informao deixou de ser necessria e por isso no necessitamos mais armazen-la na nossa base de dados. Para deletar uma linha no nosso banco iremos utilizar a instruo DELETE do SQL. Veja o cdigo abaixo: O cdigo acima exclui a linha que tem id = 5 da nossa tabela. Mais uma vez observe que no existe mudana no cdigo JSP. Toda modificao feita na linguagem SQL.

Finalizando banco de dadosConcluindo a etapa do nosso estudo sobre banco de dados em JSP gostaria de deixar uma dica. Embora seja possvel manipular dados dentro da base de dados deixamos como sugesto que toda manipulao seja feita usando a linguagem de programao. Essa ao facilitar seu domnio sobre qualquer tipo de dado. Por fim, voc conheceu como manipular sua base de dados. Chegou o momento de utilizar seu conhecimento para criar um pequeno sistema que utilize todo conceito aprendido. Faa formulrios de cadastro, atualizao, excluso e consulta.

XMLA internet foi um marco na comunicao mundial. No entanto, da sua criao at os dias atuais muita coisa mudou. Surgiu a banda larga e com ela o aumento da85

transmisso de dados. Alm da transmisso de texto hoje j se envia vdeo, som, fotos entre outros formatos. Muita coisa, no mesmo? Contudo existe um problema neste grande volume de transmisso de dados. a falta de padro para comunicao neste mundo cada vez mais globalizado. Como resposta a essa necessidade de padro surge a linguagem XML (Extensible Markup Language). Assim como o HTML o XML uma linguagem de marcao derivada do SGML (Standard Generalized Markup Language). Recomendada pela W3C para criao de documentos com dados organizados hierarquicamente.O XML no descreve nem aparncia nem aes, mas sim o que cada trecho de dados ou representa, ou seja, ele descreve o contedo do documento.Seu propsito principal a facilidade de compartilhamento de informaes atravs da internet. No entanto, pode ser utilizada para padres fora da rede mundial.

Estrutura de um documento XMLComo foi dito acima o XML usado para criar estruturas para formatao de dados. Desta forma a comunicao entre quem envia e quem recebe passa a seguir o padro definido no XML. Veja o cdigo abaixo: Estudo sobre XML Desconhecido Informtica Estudo sobre JSP Desconhecido Informtica Clculo Desconhecido Matemtica O cdigo mostra uma estrutura XML para envio de informaes de livros para uma biblioteca. Vamos analis-lo: A linha 1, , informa qual a verso da linguagem XML. Todo documento XML deve comear por essa linha. O segundo atributo, encoding, informa que sero usados caracteres especiais. No caso esses caracteres so presentes no isso-8859-1. Utilizamos para que possamos trabalhar com acentuao no idioma portugus. Seria possvel escrever86

a linha sem o encoding: , contudo no seria possvel trabalhar com caracteres no ASCII. A linha 2 a raiz da estrutura. Todo documento XML possui uma raiz. Dela podemos saber qual o tema do documento. No caso, estamos escrevendo um documento XML para enviar informaes de uma biblioteca. A linha 3 inicia o elemento livro. E as prximas trs linhas (4,5 e 6) passam informao do livro. A linha 7 fecha o elemento livro. Da linha 8 em diante repete-se o elemento livro com informaes de outros livros. Concluindo com o final do documento na linha 18 onde fechamos a raiz. A estrutura do XML ficaria semelhante a apresentada na Figura 46.

Figura46 - Documento XML

Essa seria a idia bsica para uma estrutura XML. Observe que o objetivo no criar um efeito visual, mas apenas organizar e padronizar os dados.

Sintaxe XMLComo qualquer linguagem, o XML possui regras que precisam ser obedecidas para funcionar. Diferente do HTML o XML no tolerante a falhas, sendo assim, se existir falhas na estrutura o XML simplesmente no funcionar.

87

Todo elemento XML deve ter um tag de fechamento

Diferentemente do HTML, no XML no existe tag sem seu par. Veja o cdigo abaixo: Estudo sobre XML Desconhecido Informtica
Observe que na linha 7 a tag
no foi fechada. Quando tentamos ativar o documento XML encontramos a mensagem de erro semelhante aFigura 47.

Figura47 - Falta tag de fechamento

Para enviar o erro ocorrido no cdigo acima basta inserir uma tag de fechamento para tag
. No entanto, como a tag
uma tag vazia de informao poderamos escrever desta forma
. Modifique o cdigo acima com qualquer uma das duas formas de se escrever e veja o resultado.As tags XML so case sensitives

As tag XML so case sensitives, logo diferenciam caracteres maisculos de caracteres minsculos. Veja o cdigo:88

Estudo sobre XML Desconhecido Informtica Observe que na linha 4,Estudo sobre XML, Titulo diferente de titulo e por isso esse cdigo no funciona. Teste e veja o resultado.Elementos XML devem estar aninhados

Os elementos XML devem respeitar a ordem de abertura. Sendo assim, tags mais internas devem ser finalizadas antes que as tags mais externas. Veja o cdigo: Estudo sobre XML Desconhecido Informtica Observe a linha 5, Desconhecido, veja que a tag mais externa que a tag , logo no poderia ser finalizada antes. Em HTML no existiria problema, mas o XML no aceita essa desordem no alinhamento. A linha ficar correta se for escrita desta forma: Desconhecido.Documentos XML precisam ter um elemento RaizTodo documento XML necessita possuir um elemento raiz que indica seu comeo e fim. Veja o cdigo: Estudo sobre XML Desconhecido Informtica
89Estudo sobre JSP Desconhecido Informtica Clculo Desconhecido Matemtica No cdigo no encontramos um elemento raiz. Tente executar e veja a mensagem de erro. Esse cdigo ficaria correto escrito da seguinte forma: Estudo sobre XML Desconhecido Informtica
Estudo sobre JSP Desconhecido Informtica Clculo Desconhecido Matemtica Observe que no cdigo acima o elemento raiz a tag Biblioteca.Valores do atributo em aspaNa linguagem HTML as aspas para o valor do atributo eram opcionais. J na linguagem XML obrigatrio as aspas para o valor do atributo. Pode-se utilizar aspas simples ou duplas sem nenhum problema ou diferena no resultado. Veja o cdigo: Estudo sobre XML90Desconhecido Informtica
No cdigo acima a linha 3 apresenta o atributo preo sem aspas. Isso gera um erro na hora de executar esse arquivo XML. Para solucionar basta reescrever a linha usando aspas simples ou aspas duplas para o atributo preo. Veja abaixo: Estudo sobre XML Desconhecido Informtica
Siga as regras de sintaxe apresentadas acima para garantir que seu documento XML est well-formed (bem formatado). Caso uma dessas regras seja ignorada seu documento no poder ser utilizado.Declarao do Tipo de DocumentoO DTD (declarao do tipo de documento) define as regras de um documento XML. Essas regras ajudam a validar os dados quando a aplicao que os recebe no possui descrio do dado interno. Sendo assim, o DTD um conjunto de regras que define a estrutura do documento indicando os elementos que podem ser usados e onde podem ser aplicados. O documento XML construdo em conformidade com sua DTD conhecido como documento vlido.Tipos de declaraesComo dito anteriormente as declaraes do tipo de documento definem as regras de um documento XML. Existem quatro tipos de declaraes: declaraes de tipo de elementos, declaraes de entidades, declaraes de notaes e declaraes de atributo. A seguir vamos conhecer cada uma delas.Declaraes de tipo de elementosAs declaraes de tipo de elemento identificam o nome do elemento e especificao o contedo permitido. Veja o exemplo:91 No cdigo acima definido o elemento captulo e deve conter no seu contedo titulo e seo deixando ler como opcional. As vrgulas entre os contedos indicam que eles devem ocorrer em seqncia. O + indica em que secao pode ocorrer uma ou mais vezes. A ?indica que ler opcional. Sendo assim, ele pode ocorrer uma vez ou nenhuma. J titulo no possui pontuao o que significa que ele ir ocorrer apenas uma vez. Tambm podemos utilizar a string reservada #PCDATA para indicar dados de caracter. PCDATA tem como significado dado de caracter analisvel. Elementos que possuem apenas outros elementos so conhecidos por contedo de elementos. J elementos que possuem outros elementos e #PCDATA so conhecidos por contedo misturado. Veja abaixo: O smbolo | indica que o relacionamento opcional. J o * indica que o contedo opcional. Pode no ocorrer ou ocorrer uma ou mais vezes. Em qualquer elemento misturado o #PCDATA deve ser o primeiro, todos os elementos devem ter uma relao opcional ( | )e o grupo inteiro deve ser opcional ( * ). Alm dos modelos apresentados acima ainda podemos utilizar EMPTY para indicar que o elemento no possui contedo e ANY para indicar que qualquer contedo aceito. Veja o exemplo: O modelo ANY deve ser evitado, pois desabilita toda a verificao do contedo deste elemento. til durante a converso de documentos.Declaraes de atributoComo o prprio nome j diz as declaraes de atributos indicam que elementos podem ter atributos, quais atributos eles podem ter, o valor do atributo e o valor padro. Veja o exemplo: No cdigo acima nome um atributo do tipo ID e obrigatrio (#REQUIRED). J email uma cadeia de caracteres e no obrigatrio (#IMPLIED) e Sexo que pode ser Masculino ou Feminino, mas se nada for informado o padro ser Masculino. Note que cada atributo tem trs partes: nome, tipo e valor.92Tipos de atributosExistem seis tipos de atributos possveis. Vamos conhec-los?CDATAAtributos CDATA so strings (cadeias de caracteres).IDCada elemento pode ter apenas um atributo ID. Seu valor deve ser um nome diferente de qualquer outro ID. Lembra a idia de chave primaria do banco de dados.IDREFIDREF ou IDREF semelhante do ID. Pode conter valores mltiplos separados por espaos em branco. Deve ser o valor de um nico atributo ID.ENTITYENTITY ou ENTITIES deve ser o nome de uma nica entidade. Pode ter valores de entidades mltiplos em seu atributo, todos separados por espaos em branco.NMTOKENNMTOKEN ou NMTOKENS deve ser uma nica palavra. O valor do atributo pode ter valores mltiplos separados por espao em branco.Lista de nomes possvel definir que o valor de um atributo deve ser pego de uma lista de nomes.Valores PadroAinda possvel utilizar quatro valores padro. Vamos conhec-los?93#REQUIREDDefine que o atributo deve ter um valor especificado para cada ocorrncia do elemento no documento.#IMPLIEDNo necessita de valor para o atributo. Nenhum valor padro fornecido."valor" possvel informar qualquer valor vlido para um atributo como padro. O valor do atributo no solicitado em cada elemento no documento. Caso exista ser dado a ele o valor padro.#FIXED"value" Pode definir um valor fixo. O atributo no requerido, porm se ele ocorrer ter o valor especificado. Caso no esteja presente receber uma valor padro.Declaraes de entidadesPermitem associar um nome com algumoutro fragmento de contedo. Pode ser uma parte de texto normal, uma parte de declarao de tipo de documento ou uma referncia a arquivo externo. Veja o exemplo: H trs tipos de entidades: Internas, Externas e ATIlogo. Vejamos cada uma:Entidades InternasAssociam um nome a uma seqncia de caracter. Permitemdefinir atalhos para textos digitados com freqncia ouque se espera que sejam alterados.94Entidades ExternasBasicamente as entidades externas fazem a ligao de um nome a contedo de outro arquivo. Criam referncias.Entidade ATIlogo uma entidade externa, contudo seu contedo apenas binrio. Pode ser usada apenas como o valor de um atributo ENTIRY(S).Declaraes de notaesIdentificam tipos de dados binrios externos. Veja o exemplo: Agora voc tem a base do conhecimento XML para criar seus prprios arquivos e valid-los. Teste com seus colegas de turma.ConclusoConclumos aqui o nosso estudo sobre JSP. Lembramos que a busca pelo conhecimento constante. Aqui voc recebeu a base para seguir em frente. No entanto, as pessoas que param de pesquisar so facilmente ultrapassadas no mundo da tecnologia. Procure sempre aprender mais. Um professor pode ensinar o caminho do conhecimento, mas o aluno quem deve caminhar.95