PROGRAMAÇÃO PARA WEB

Tamanho: px
Começar a partir da página:

Download "PROGRAMAÇÃO PARA WEB"

Transcrição

1 PROGRAMAÇÃO PARA WEB

2 MINISTÉRIO DA EDUCAÇÃO PRÓ-REITORIA DE ENSINO DEPARTAMENTO DE EDUCAÇAO À DISTÂNCIA ESCOLA TÉCNICA ABERTA DO PIAUÍ - ETAPI CAMPUS TERESINA CENTRAL PROGRAMAÇÃO PARA WEB DISCIPLINA: PROGRAMAÇÃO PARA WEB 75H

3 PRESIDENTE DA REPÚBLICA Luiz Inácio Lula da Silva MINISTRO DA EDUCAÇÃO Fernando Haddad GOVERNADOR DO ESTADO Wilson Martins REITOR DO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO PIAUÍ Francisco da Chagas Santana SECRETÁRIO DE EDUCAÇÃO A DISTÂNCIA DO MEC Carlos Eduardo Bielschowsky COORDENADORIA GERAL DA UNIVERSIDADE ABERTA DO BRASIL Celso Costa SECRETÁRIA DE EDUCAÇÃO DO ESTADO DO PIAUÍ Maria Pereira da Silva Xavier COORDENADORA GERAL DO CENTRO DE EDUCAÇÃO ABERTA A DISTÂNCIA DO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO PIAUÍ Elanne Cristina Oliveira dos Santos SUPERITENDÊNTE DE EDUCAÇÃO SUPERIOR NO ESTADO Eliane Mendonça ORGANIZAÇÃO DO MATERIAL DIDÁTICO Franciéric Alves de Araújo

4

5 5 Boas Vindas! Caro (a) Cursista Bem vindo (a) à disciplina PROGRAMAÇÃO PARA WEB. Esta é a nossa Apostila, material elaborado com o objetivo de contribuir para o desenvolvimento de seus estudos e para a ampliação de seus conhecimentos acerca da citada disciplina. Este texto é destinado aos estudantes aprendizes que participam do programa Escola Técnica Aberta do Brasil (e-tec Brasil), vinculado à Escola Técnica Aberta do Piauí (ETAPI) do Instituto Federal de Educação, Ciências e Tecnologia do Piauí (IFPI), com apoio da Prefeitura Municipal dos respectivos pólos: Batalha e Valença do Piauí. O texto é composto de três (03) Aulas assim distribuídas: Na Aula 1 - Discutiremos temas introdutórios e prepararemos o ambiente de programação, pois são necessários para conhecer sobre programação para a WEB. Na Aula 2 Classes Servlets Veremos que estas tecnologias são a solução Java para a produção de conteúdo dinâmico para a WEB em resposta a tecnologia CGI. Na Aula 3 JSP - Aprenderemos nesta aula a parte de maior importância numa aplicação Web, as operações com registros no banco de dados, utilizando a tecnologia JSP.

6 6 Quem sou? Prof. Msc. Franciéric Alves de Araújo Nascido em Teresina-PI, sou graduado em Tecnologia em Informática, Especialista em Banco de Dados pelo Instituto Federal do Piauí (IFPI), Mestre em Ciências e Engenharia de Materiais pela UFRN e doutorando em Biotecnologia pelo RENORBIO. Trabalho como Analista de Sistemas a mais de 6 anos no Instituto Federal de Educação, Ciência e Tecnologia do Piauí IFPI, atuando no Departamento de Sistemas de Informação da Diretoria de Tecnologia da Informação Reitoria do IFPI. Trabalho também em Faculdade particular de Teresina, onde ministro as disciplinas de Fundamentos da Orientada a Objetos, Programação Distribuída, Programação Cliente/Servidor e Integração de Aplicações WEB. Já participei da equipe técnica de Educação à distância, como professor regente e agora como Professor Conteudista.

7 7 Índice Geral APRESENTAÇÃO Índice Geral Índice de Figuras AULA 1 INTRODUÇÃO A PROGRAMAÇÃO PARA WEB PORQUE MIGRAR PARA WEB? ARQUITETURA CLIENTE-SERVIDOR HTML HTTP JAVA EE VISÃO SOBRE A CAMADA WEB ESTRUTURA BÁSICA DE UMA APLICAÇÃO WEB MONTANDO O AMBIENTE DE DESENVOLVIMENTO WEB AULA 2 Classes Servlets INTRODUÇÃO VISÃO GERAL DA ARQUITETURA SERVLET CICLO DE VIDA DA CLASSE SERVLET MANIPULANDO REQUISISÕES E RESPOSTAS DESENVOLVENDO UMA CLASSE SERVLET UTILIZANDO A IDE NETBEANS-46 AULA 3 JavaServer Pages - JSP INTRODUÇÃO AO JAVASERVER PAGES TRABALHANDO COM BANCO DE DADOS... 74

8 8 Índices de Figuras Figura 1 Funções do Servidor e do Cliente Figura 2 - A camada WEB da plataforma Java EE (Imagem do documento J2EE Tutorial) Figura 3 Contêineres da plataforma Java EE (Imagem do documento J2EE Tutorial) Figura 4 Estrutura do diretório requisitado pelo cliente Figura 5 Instalação do Netbeans Figura 6 Instalação do Netbeans Figura 7 Exibição de mensagem no browser através do método out. Figura 8 Ciclo de vida da Servlet. Figura 9 Entrada do Nome do Usuário Figura 10: Saída do GetParameterServlet Figura 11: Recuperando dados de um formulário com múltiplos elementos Figura 12: Saída do GetParameterValuesServlet Figura 13: Selecionando a opção New Project Figura 14: Seleção de uma nova aplicação WEB Figura 15: Caixa de diálogo de nome e localização Figura 16: Detalhe do servidor, versão e caminho de contexto Figura 17: Seleção de um framework Figura 18: Características gerais do Netbeans IDE Figura 19: Diretórios expandidos do projeto na janela projects Figura 20: Estrutura do projeto utilizado pelo tomcat Figura 21: Arquivos encontrados em projeto no Netbeans ide Figura 22: Criando um Servlet Figura 23: Definindo um nome e um pacote para o servletcriando um Servlet Figura 24: Última etapa para a criação do Servlet Figura 25: O item form selecionado Figura 26: A caixa de diálogo insert form com as configurações preenchidas Figura 27: Componente text input selecionado Figura 28: Caixa de diálogo insert text input com o campo nome configurado Figura 29: Componente Button em destaque Figura 30: Botão enviar configurado na caixa de diálogo insert button Figura 31: Run main Project do menu run Figura 32: Detalhe da seleção run do menu de context na janela projects Figura 33: Botão run main Project pressionado na barra de ferramentas build Figura 34: Saídas encontradas na execução de uma aplicação Figura 35: Formulário de envio e o resultado impresso pelo servlet após receber os dados Figura 36: Código Index.jsp Figura 37: Código data.jsp Figura 38: Página retornada utilizando a diretiva page Figura 39: Código usandodiretivaimport.jsp Figura 40: Página exibida Figura 41: Página exibida.

9 9

10 Introdução a Programação para WEB Aula 1 10 Meta da Aula Discutir temas introdutórios e preparação do ambiente de programação, pois são necessários para conhecer sobre programação para a WEB. Objetivos Ao final desta aula, você deverá ser capaz de: 1. Descrever como funciona a WEB; 2. Definir a arquitetura do tipo Cliente- Servidor; 3. Entender sobre o protocolo HTTP; 4. Definir o básico sobre a arquitetura Java EE; 5. Saber o que são Servlets e Java Server Pages; 6. Montar o ambiente de produção.

11 PORQUE MIGRAR PARA WEB? Ambiente de Tecnologia Neutra Um dos principais benefícios em aplicações para a Internet, é que a Internet é um ambiente de tecnologia neutra. A comunicação em qualquer aplicação na WEB é feita através de protocolos populares (HTTP/FTP), que não requerem que o usuário nem o cliente tenham qualquer sistema operacional em particular instalado em sua máquina ou seja desenvolvida em uma linguagem de programação específica. Tudo que os clientes necessitam é de um navegador WEB (denominado Browser), o acesso a aplicação e qualquer sistema operacional. Isto traz diversas possibilidades dentro de uma ampla gama de aplicações baseadas na WEB. Facilidade de distribuição e atualização Visto que o navegador WEB é o único programa instalado que os usuários irão necessitar, não há necessidade de fornecer programas adicionais através de CDs ou outra mídia. Assim, como não existe a necessidade do usuário repassar uma seqüência de instalação, possivelmente demorada, o que será necessário é o local e acesso a aplicação na internet, e tudo estará pronto para funcionar. Outro benefício de se ter o código binário exato do programa, que residirá em um único servidor acessível, ao invés de instalado no computador do usuário, pois evita-se possíveis problemas comuns relatados com atualizações de programas, tais como a necessidade de checar periodicamente novas versões de programas. O problema de conseguir novas atualizações dos programas e eliminado completamente. O usuário não precisa ser informado sobre uma atualização do programa; tudo que será necessário é atualizar o código no

12 12 servidor WEB e, automaticamente, todos os usuários irão usufruir da nova versão. 1.2 ARQUITETURA CLIENTE-SERVIDOR Cliente Pesado e Cliente Magro Uma aplicação WEB é um tipo de aplicação que faz uso da chamada estrutura Cliente-Servidor. Neste tipo, um programa cliente conecta a um servidor para acessar informações que necessita para completar as tarefas que os usuários desejam para realizar. Há os que são chamados clientes magros, e os que são chamados clientes pesados. Clientes magros são os que contém apenas o mínimo necessário para que o usuário execute o sistema. Em geral, é apenas uma casca. Todas as regras de negócio, dados, exceto os que são fornecidos pelo usuário, residem dentro de um servidor. Clientes pesados são os que contém, além de uma interface, alguns, se não muitos, dos processos de regra de negócio requeridos pelas tarefas específicas dos usuários. Arquitetura Cliente-Servidor na visão WEB Na definição acima, podemos citar que o cliente utilizado para aplicações WEB são os que nós chamamos de clientes magros. O programa cliente, um navegador, neste caso, é apenas uma interface que o usuário utiliza para realizar tarefas. Tudo mais, como os dados que o usuário precisa para operar num determinado fluxo lógico de execução do programa, reside no servidor. De uma perspectiva mais focada na WEB, estas são as funções do servidor e do cliente: Servidor WEB

13 13 Figura 1 Funções do Servidor e do Cliente O servidor recebe uma requisição do cliente através do navegador WEB e retorna uma resposta. Qualquer requisição vinda de um cliente inclui o nome e o endereço do item que o cliente está procurando, assim como, qualquer dado fornecido pelo usuário. O servidor assimila a requisição, a processa e retorna uma resposta dos dados procurados pelo cliente ou exibe um código de erro indicando que o item requisitado não existe no servidor. Cliente WEB É da responsabilidade do navegador prover ao usuário uma interface para exibir a resposta fornecida pelo servidor. Quando o usuário emite uma requisição para o servidor, por exemplo, buscar um documento ou submeter um formulário, o navegador deve enviar esta requisição de modo que o servidor possa entender. Uma vez que o servidor finalizou o processo requisitado e enviou uma resposta, o navegador, que recebeu os dados requeridos da resposta do servidor, mostra a página resultante ao usuário.

14 HTML Como o browser sabe o que deve ser exibido ao usuário? A maioria dos sites WEB não tem apenas um conteúdo simples de texto. Ao invés disso, emprega gráficos ou tem formas que acessam dados. Como o navegador sabe o que deverá exibir? A resposta reside em HTML, que são as iniciais para Hypertext Markup Language. HTML pode ser pensado como um conjunto de instruções para um navegador WEB que define como apresentar conteúdo para o usuário. É um padrão aberto, atualizado pela W3C ou a World Wide Web Consortium. Sendo este um padrão aberto, qualquer um pode acessá-lo. Isto também significa que os navegadores são desenvolvidos sobre esse padrão. Isso significa que todos os navegadores sabem o que fazer quando se deparam com HTML, embora alguns navegadores mais antigos possam ter problemas em interpretar algumas páginas que foram escritas usando novas versões de HTML que foram criadas após o desenvolvimento destes HTTP Definição HTTP significa Hypertext Transfer Protocol. É um protocolo de internet de rede de comunicações com características específicas da WEB, que funciona no topo de duas outras camadas de protocolo, TCP e IP. TCP é um protocolo que é responsável por garantir que um arquivo enviado através de uma rede de comunicações seja entregue completamente e com sucesso no destino. IP é um protocolo que encaminha parte dos arquivos de um ponto para outro no seu destino.

15 15 O HTTP utiliza estes dois protocolos para ter certeza de que as requisições e respostas serão entregues corretamente ao final de cada pacote transferido. O protocolo HTTP usa uma seqüência Requisição/Resposta (Request/Response): um cliente HTTP abre uma conexão e envia uma mensagem de requisição para um servidor HTTP. O servidor, então, retorna uma mensagem resposta, geralmente contendo o recurso que foi requerido. Após a entrega da resposta o servidor fecha a conexão fazendo uso de um protocolo stateless HTTP (não mantém qualquer informação de estado sobre a conexão). O formato das mensagens Requisição/Resposta é semelhante e orientado. Ambos os tipos de mensagem consistem em: Um cabeçalho inicial Zero ou mais cabeçalhos adicionais Uma linha em branca (CRLF) O corpo de mensagem (opcional). Ex. Um arquivo, dado ou serviço Requisições HTTP Requisições de um cliente para o servidor contêm a informação sobre o tipo de dado que o usuário necessita. Um dos itens de informação encapsulados no HTTP Request é a item method. Isto diz ao servidor como que este tipo de requisição está sendo feita, e como o resto da mensagem do cliente está formatada. Há dois métodos que serão encontrados: GET e POST. Método GET É o método mais simples que é usado principalmente para requisitar um recurso qualquer de um servidor, como uma página WEB, um arquivo de imagem gráfica, um documento, etc.

16 16 O método GET também pode ser utilizado para enviar dados para o servidor, embora isto tenha suas limitações. A quantidade de caracteres que podem ser encapsulados em uma requisição GET é limitada, então, para as situações onde muitas informações precisam ser enviadas para o servidor, é provável que nem todas as mensagens sobreviverão. Outra limitação do método GET é no envio dos dados. Os dados enviados utilizando este método são simplesmente anexados à URL enviada ao servidor. Por enquanto, pense na URL como um único endereço que é enviado ao servidor. Denota o destino ao qual será enviada a requisição. Um dos problemas encontrados neste método são as muitas URLs que podem ser exibidas na barra de navegação dos navegadores. Isto significa que dados confidenciais, tais como senhas ou informações do contato, serão expostas para qualquer pessoa. A vantagem em se utilizar o método GET para enviar dados para o servidor é que a URL pode ser gravada como um bookmarker pelo navegador. Isto significa que o usuário pode simplesmente selecionar o item desejado e acessá-lo em vez de ter que passar por todo o processo novamente. Vale ressaltar que isto também pode ser perigoso, se a facilidade do bookmarker não é algo que os usuários deveriam ter. Aqui está o que a URL criada com uma GET Request pode parecer: newsitemid=2359&filter=true O item antes do sinal de interrogação (?) representa a URL original da requisição (neste caso é Tudo após, são os parâmetros ou dados que são enviados juntos para o servidor. Olharemos mais atentamente para esta segunda parte. Estes são os parâmetros adicionados pela requisição:

17 17 newsitemid=2359&filter=true Em requisições GET, parâmetros são codificados com pares nomes e valores. Não são enviados valores excedentes de dados para o servidor sem que este conheça especificamente seus nomes. Os pares nomes e valores são codificados como: name=value Além disso, caso exista mais de uma série de parâmetros, estes serão separados utilizando o símbolo &. Neste caso, os nomes dos parâmetros que estudamos são newsitemid e filter, e os valores 2359 e true, respectivamente. Método POST Outro método de requisição utilizado é o POST. Este tipo de requisição é utilizada de tal forma que as solicitações ao navegador podem se tornar complexas, isto é, para que o usuário, através do navegador, possa enviar muitos dados para o servidor. Formas complexas são geralmente envidas utilizando requisições POST, assim como, também, formas simples. Uma diferença aparente entre os métodos GET e POST é o modo como eles enviam dados para o servidor. Como declarado antes, o método GET simplesmente anexa os dados à URL enviada. O método POST, por outro lado, esconde os dados dentro do corpo da mensagem enviada. Quando o servidor recebe a requisição e determina que ela é uma POST, procurará no corpo da mensagem pelos dados. HTTP response (Resposta HTTP) O HTTP response do servidor contém o cabeçalho e o corpo da mensagem, de maneira semelhante ao HTTP request. É utilizado um conjunto diferente de cabeçalhos. Os cabeçalhos contêm informações sobre a versão do protocolo HTTP que o servidor está vendo, assim como também o tipo de

18 18 conteúdo que é escondido dentro do corpo da mensagem. O valor para o tipo de conteúdo é chamado de MIME-type. Informa ao navegador que a mensagem contém um HTML, imagem ou outros tipos de conteúdo. Páginas Dinâmicas ou Estáticas O tipo de conteúdo que pode ser oferecido por um servidor WEB pode ser estático ou dinâmico. Conteúdo estático é o conteúdo que não é modificado. Este tipo de conteúdo geralmente não executa nada quando o servidor é acessado e é criado durante sua requisição. Quando estes conteúdos são enviados através da resposta do servidor, são enviados exatamente o mesmo conteúdo armazenado no servidor. Exemplos de conteúdos estáticos incluem artigos de jornal arquivados, fotos de família, ou uma cópia de um documento. O conteúdo dinâmico, por outro lado, muda de acordo com a requisição do cliente. Tais aplicações no servidor acessam este tipo de conteúdo seguindo um modelo pré-determinado, de acordo com o documento a ser enviado. Este modelo é então preenchido de acordo com os parâmetros enviados pelo usuário e retornam ao cliente. É suficiente dizer que páginas dinâmicas tem muito mais flexibilidade e tem mais utilidade que as páginas estáticas. Aqui estão cenários onde o conteúdo dinâmico será a única que irá atender às necessidades do usuário. A página WEB é baseada em dados submetidos pelo usuário. Por exemplo, os resultados das páginas de pesquisa são gerados deste modo. Programas que processam pedidos e sites de comércio fazem isto muito bem. Dados mudam freqüentemente. Uma página com a previsão do tempo ou novas notícias atualizadas constantemente podem construir a página dinamicamente, talvez retornando a uma página previamente construída se ela

19 19 ainda estiver atualizada. A página WEB utiliza informações de um banco de dados. Realizado pelo acesso e busca ao banco de dados da empresa. É importante perceber que o servidor WEB sozinho não tem capacidade de apresentar conteúdo dinâmico. Os servidores WEB precisaram separar das aplicações as informações que iriam armazenar informações pertinentes ao cliente (tais como dados coletados em formulários) dentro do depósito de páginas. Não se pode esperar que, a partir de um formulário, ter os dados do cliente, quando submetidos ao servidor, este conhecerá automaticamente o que deverá ser feito com estes dados. Estamos, agora, no ponto da discussão onde podemos, explicitamente, apontar que é esta a questão principal das aplicações WEB e formam a base para a nossa disciplina. Neste disciplina iremos nos voltar, primeiramente, às tecnologias baseadas em Java para criar aplicações WEB. Mais especificamente, faremos um uso excessivo de bibliotecas fornecidas a nível de especificação. 1.5 JAVA EE VISÃO SOBRE A CAMADA WEB. A plataforma Java EE foi criada para o desenvolvimento de aplicações corporativas (baseada em componentes). O modelo de aplicação utilizada para esta plataforma é chamado Modelo de Aplicação Multi-Camadas Distribuídas, ou, simplesmente, multi-tier. O aspecto de distribuição deste modelo simplesmente significa que a maior parte das aplicações programadas e desenvolvidas com esta plataforma em mente podem ter diferentes componentes instalados em diferentes máquinas. A parte multi-tier significa que as aplicações são concebidas visando a separação entre as camadas dos vários componentes importantes da aplicação. Um exemplo de uma aplicação multi-tier é uma aplicação WEB: a camada de apresentação (representada pelo navegador), a

20 20 camada de lógica de negócio (o programa que reside no servidor WEB), e a camada de dados (a base de dados que irá armazenar e gerenciar os dados da aplicação) são distintamente separadas, entretanto são necessários para se criar uma aplicação para o usuário. Um dos níveis na plataforma Java EE, como previamente mencionado é a web-tier. Este nível é destinado a camada que interage com o navegador para criar o conteúdo dinâmico. Existem duas tecnologias dentro desta camada: Servlets e JavaServer Pages JSP. Figura 2 A camada WEB da plataforma Java EE (Imagem do documento J2EE Tutorial) Servlets A tecnologia Servlet foi a resposta inicial de Java para acrescentar a funcionalidade adicional aos servidores que utilizavam o modelo requisição/resposta. Possui a habilidade de ler dados contidos na requisição (request) passada ao servidor e gerar uma resposta dinâmica baseada nestes dados. Servlet não é necessariamente limitada as situações baseadas em HTTP. Como declarado antes, são aplicáveis para qualquer caso que utilize o modelo requisição/resposta. As situações baseadas em HTTP são, atualmente, o uso desta tecnologia.

21 Então, Java forneceu uma versão de classes específicas que implementam as características de HTTP. 21 JavaServer Pages Uma das desvantagens de se utilizar a tecnologia de classes Servlets para gerar uma resposta ao cliente, é que primeiro essa resposta deve ser formatada em HTML para ser reenviada. Já que que Servlets são simplesmente classes em linguagem de Java, produzem resultados de modo semelhante a que outras classes Java fariam: através da impressão de caracteres em formato String pelo canal de saída, neste caso a HTTP response. Entretanto, HTML pode se tornar bastante complexo e ser muito difícil codificar HTML através do uso de uma String. Além disso, o emprego de recursos gráficos dedicados e páginas WEB programadas para ajudar na parte estática das páginas é difícil. Estaríamos supondo que a equipe de desenvolvimento deva ter um bom conhecimento de Java. Deste modo surgiu a tecnologia JavaServer Pages. A JSP se parece com HTML, tendo acesso a todas as habilidades dinâmicas das classes Servlets através do uso de scripts e linguagem de expressão. Visto que se parece muito com HTML, os projetista podem se concentrar no simples formato HTML e realizar as modificações necessárias e permite que os desenvolvedores ocupem-se do conteúdo dinâmico. Contêiner O conceito central de qualquer aplicação Java EE é o contêiner. Todo componente Java EE, inclui componentes WEB (Servlet ou JSP) que dependem da existência de um contêiner. Sem o contêiner apropriado, não seriam executados. Talvez outro modo de explicar isto seria pensar sobre o modo normal de execução dos programas Java. Programas Java, para serem executados, devem ter um método principal definido. Isto marca o começo da execução do programa, sendo

22 22 este método processado quando o programa é executado na linha de comando. Figura 3 Contêineres da plataforma Java EE (Imagem do documento J2EE Tutorial) Como veremos mais tarde, a classe Servlet, não têm um método principal definido. E se existe algum definido (bad programming design) este não marca o começo da execução do programa. Quando o usuário faz uma requisição HTTP (http request) para uma classe Servlet, seu método não é chamado diretamente. Em vez disso, o servidor passa a requisição não para a classe Servlet, mas para o contêiner na qual a Servlet está inserida. O contêiner é o único responsável pela chamada ao método apropriado na Servlet, dependendo do tipo de requisição do usuário. Vantagens fornecidas pelo contêiner Suporte de comunicações. O contêiner passa todo código necessário para a Servlet para se comunicar com o servidor WEB. Sem o contêiner, desenvolvedores precisariam escrever o código que iria criar uma conexão socket do servidor para a

23 23 Servlet e vice-versa e ainda deveria gerenciar como eles falam um ao outro a cada momento. Gerenciamento do Ciclo de Vida. O contêiner conhece o que se passa na vida de suas classes Servlets desde seu carregamento, instalação, inicialização e recolhimento pelo Garbage Collector. Suporte a múltiplas tarefas. O contêiner controla a função de criar uma nova thread a cada momento que uma requisição para a classe Servlet é realizada. NOTA: o contêiner NÃO será responsável pelas thread de sua Servlet. Declaração de Segurança. Um contêiner suporta o uso de um arquivo de configuração XML que pode repassar diretivas de segurança para sua aplicação WEB sem precisar de um código complexo qualquer dentro do Servlet. Suporte JSP. Páginas JSP, para funcionarem, devem ser transformadas em uma classe Java (Servlet). O contêiner controla a tarefa de traduzir as páginas JSP para uma classe Servlet, compilar e executar. 1.6 ESTRUTURA BÁSICA DE UMA APLICAÇÃO WEB. Como veremos mais tarde, a classe Servlet, não têm um método principal definido. E se existe algum definido (bad programming design) este não marca o começo da execução do programa. Quando o usuário faz uma requisição HTTP (http request) para uma classe Servlet, seu método não é chamado diretamente. Em vez disso, o servidor passa a requisição não para a classe Servlet, mas para o contêiner na qual a Servlet está inserida. O contêiner é o único responsável pela chamada ao método apropriado na Servlet, dependendo do tipo de requisição do usuário.

24 24 Para um determinado contêiner reconhecer sua aplicação como aplicação WEB válida, esta deve se adequar a uma estrutura específica de diretório conforme a figura a seguir. Figura 4 Estrutura do diretório requisitado pelo cliente A figura mostra a estrutura do diretório requisitado pelo contêiner para que sua aplicação seja reconhecer. Alguns pontos relativos a esta estrutura são: 1. A Pasta Raiz (contém a aplicação) não precisa ser nomeada como Pasta Raiz. Pode ser, qualquer nome que se deseje, embora seja altamente recomendado que o nome desta pasta seja o nome da sua aplicação. 2. Qualquer outra pasta pode ser criada dentro desta estrutura do diretório. Por exemplo, para desenvolvedores que desejam organizar seus conteúdos, devem ser criadas pastas dentro da pasta inicial para organizar os arquivos. 3. As letras maiúsculas na pasta META-INF e WEB-INF são intencionais e obrigatórias assim como as letras minúsculas nas pastas classes e lib. Não seguir o formato correto em qualquer destas pastas resultará que sua aplicação não será capaz de localizar seus conteúdos. 4. Todo conteúdo da pasta WEB-INF não será visto a partir do navegador (por exemplo, acessando seu endereço). O contêiner automaticamente gerencia isto, ou seja, para o navegador, esta pasta não existe. Este mecanismo protege suas fontes confidenciais, como classe de arquivos Java, as

25 25 configurações de aplicações, entre outros. O conteúdo desta pasta, somente pode ser acessado pela aplicação. 5. Deve existir um arquivo chamado web.xml dentro da pasta WEB-INF. Mesmo que, por exemplo, sua aplicação WEB tenha apenas conteúdo estático e não faça uso de classes Java ou arquivos externos, o contêiner ainda irá requerer que sua aplicação tenha estes dois itens. 1.7 MONTANDO O AMBIENTE DE DESENVOLVIMENTO WEB. Para desenvolvimento da aplicação em nossa disciplina vamos usar a IDE Netbeans e o Servidor WEB TOMCAT. Ambos são aplicativos gratuitos. Baixando o instalador Netbeans Na página de download do NetBeans IDE, você pode adquirir um dos diversos instaladores, cada um contendo o IDE básico e as ferramentas adicionais. Os seguintes instaladores estão disponíveis: Java SE. Oferece suporte a todos os recursos de desenvolvimento padrão Java SE, bem como à plataforma de desenvolvimento NetBeans RCP. JavaFX. Inclui o JavaFX SDK e o JavaFX Composer para o desenvolvimento de aplicativos de uso intenso de multiplataforma. Java. Fornece ferramentas para o desenvolvimento de aplicativos Java SE, Java EE e Java ME, assim como o suporte para a plataforma de desenvolvimento NetBeans RCP. Esta opção de download inclui também o GlassFish Server Open Source Edition e o software Apache Tomcat Ruby. Fornece ferramentas para desenvolvimento Ruby e oferece suporte para Rails e JRuby. Também contém o GlassFish Server Open Source Edition

26 26 C/C++. Oferece suporte para o desenvolvimento nas linguagens C, C++, Fortran e Assembly. PHP. Fornece ferramentas para o desenvolvimento PHP 5.x e o suporte para o Zend e Symfony Framework. Tudo. Trata-se de uma opção de download completo que contém todos os executáveis e tecnologias disponíveis para o NetBeans IDE. Iremos baixar o instalador java que contém o servidor web tomcat, disponível para download em(http://download.netbeans.org/netbeans/6.9.1/final/bundles/net beans ml-java-windows.exe) Convem ressaltar que O Apache Tomcat está incluído nas opções de download "Java" e "Tudo", mas não é instalado por padrão nessas opções. Para instalar o Apache Tomcat da opção de download Java ou "Tudo", inicie o instalador e selecione Apache Tomcat na caixa de diálogo Instalação personalizada, quando estiver instalando o netbeans. Após download proceda com a instalação. Na tela de boas vindas do instalador do Netbeans clique em Personalisar

27 27 Figura 5 Instalação do Netbeans Na próxima janela selecione o pacote Apache Tomcat e em seguida clique em OK Figura 6 Instalação do Netbeans Confirme as escolhas da instalação e clique em Próximo até iniciar a instalação..

28 28 EXERCÍCIOS 1) Que tipo de arquitetura as aplicações WEB usam? Quem são os participantes de tais estruturas e o quais são suas funções? 2) Qual o tipo de linguagem utilizada para indicar ao navegador como apresentar conteúdo para o usuário? 3) HTTP é um protocolo de conexão stateful ou stateless? 4) Quais são os dois métodos HTTP Request mais utilizados? E como eles são diferentes? Quando é melhor usar um ao invés do outro? 5) Qual componente é absolutamente necessário para ser possível executar aplicações WEB? 6) Quais são os elementos não opcionais da estrutura de diretórios da aplicação WEB? 7) Qual é o nome do arquivo XML utilizado para configurar aplicações WEB? Em qual diretório pode ser encontrado? 8) Qual pasta contém os arquivos JAR das bibliotecas usadas pelas aplicações? 9) Qual pasta irá conter os arquivos de classe Java usados pelas aplicações?

29 29 RESUMO DA AULA Nesta conhecemos e aprendemos a configurar o ambiente necessário para construção de Aplicações WEB. Alem de discutir os conceitos básicos sobre programação para WEB. NA PRÓXIMA AULA Na aula 2 daremos inicio a construção de uma aplicação WEB utilizando SERVLET.

30 Classes Servlets Aula 2 30 Meta da Aula Demonstrar o processo de Criação de classes Servlets. Objetivos Ao final desta aula, você deverá ser capaz de: 1. Obter uma visão geral da arquitetura Servlet; 2. Conhecer o ciclo de vida de uma Servlet; 3. Manipular requisições e respostas; 4. Desenvolver as primeiras aplicações web com Servlets;

31 INTRODUÇÃO Uma Servlet é uma classe Java usada para estender a capacidade dos servidores que hospedam aplicações acessadas via modelo de programação Requisição/Resposta. É uma classe Java que implementa a interface Servlet e aceita requisições que vêm de outras classes Java, clientes Web ou outros Servlets, gerando, então, respostas. As Servlets também são conhecidas como HTTP Servlet. Isto porque os Servlets são comumente usados com o HTTP atualmente, não há um protocolo cliente-servidor específico. Para iniciar o uso das Servlets será necessário ter conhecimentos sobre programação Java, conceitos sobre cliente-servidor, HTML básico e HTTP (HyperText Transfer Protocol). Para criar uma Servlet será necessário importar para a nossa classe Java as classes de extensão padrões que estão dentro dos pacotes javax.servlet e javax.servlet.http. O pacote javax.servlet contém a estrutura básica de Servlet, enquanto que o pacote javax.servlet.http é utilizado como uma extensão da tecnologia para as Servlets que realizam requisições HTTP. Figura 27 Modelo ER da Aplicação de Cadastro de Empresa 2.2 VISÃO GERAL DA ARQUITETURA SERVLET Antes da tecnologia Servlet, o meio mais comum de adicionar funcionalidades a um servidor WEB era através do uso de CGI (Common Gateway Interface ou Interface de Entrada Comum). CGI fornece uma interface do servidor para uma classe externa permitindo que esta invoque o servidor a tratar as requisições do cliente. Porém, o CGI foi desenhado de forma que cada chamada para um recurso CGI fosse criado um novo processo no servidor; informação significante para a classe é passada para este

32 32 processo utilizando entradas padrões e variáveis de ambiente. Uma vez completada a requisição, o processo é terminado, devolvendo o recurso ao sistema. O problema que incorre neste tipo de abordagem é que isto impõe pesadas requisições aos recursos do sistema limitando o número de usuários que a aplicação pode atender ao mesmo tempo. A Tecnologia Servlet foi projetada para contornar este problema inerente ao CGI e prover aos desenvolvedores uma solução robusta em Java para criar aplicações WEB. Ao invés de criar um processo peso-pesado no servidor a cada requisição do cliente, com Servlets há somente um processo para todas as requisições: o processo solicitado pelo contêiner da Servlet para executar. Quando uma nova requisição chega, o contêiner cria somente uma pequena thread para executar a Servlet. Servlets também são carregados em memória somente uma vez, ou seja, o contêiner carrega-os em memória na inicialização do servidor ou na primeira vez que o Servlet for requisitado para atender a um cliente, diferente do CGI, que para cada requisição do cliente carrega e descarrega os dados da classe em memória. Uma vez carregado em memória, está pronto para tratar as requisições dos clientes. Primeira Vista sobre Servlets O código a seguir mostra a estrutura de uma Servlet básica que trata as requisições GET, assim como exibe o tradicional exemplo 'Hello World'. import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { //"request" é utilizado para ler os dados do formulário HTML dos cabeçalhos // HTTP (um exemplo são os dados digitados e submetidos) // e outros dados que podem ser obtidos a partir da

33 33 requisição do cliente. // "response" é para especificar a linha e o cabeçalho de resposta do HTTP // (exemplo: especificar o tipo do conteúdo, definir cookies). // Também contém métodos que permitem ao Servlet gerar respostas para // o cliente. PrintWriter out = response.getwriter(); out.println("<html> <TITLE>Hello Page</TITLE><BODY><br>"); out.println("<h1>hello World!</h1>"); out.println("</body></html>"); //"out" para enviar o conteúdo para o browser. } } A primeira parte do código trata da importação das classes em java.io (para PrintWriter, etc.), javax.servlet e javax.servlet.http. Os pacotes javax.servlet e javax.servlet.http fornecem interfaces e classes para escrever as Servlets (contêm as classes HttpServlet, HttpServletRequest e HttpServletResponse). Por extensão da HttpServlet, herda os métodos que são automaticamente chamados pelo servidor dependendo de certas condições que serão explicadas mais à frente. Por polimorfismo por overriding destes métodos podemos fazer com que nossa Servlet execute a funcionalidade que quisermos. Neste caso, o método herdado do HttpServlet que sobrepomos é o método doget. Simplificando, ele é o método que é invocado pelo contêiner sempre que uma requisição GET é feita de uma Servlet em particular. Relembrando do módulo anterior, navegação de site, recuperação de documento, visualização de páginas são exemplos de requisições GET. Logo, sempre que um usuário quiser ver a resposta da nossa Servlet deve invocar uma requisição GET. Ao visualizarmos o código veremos que o método doget utiliza dois parâmetros: um objeto HttpServletRequest e um objeto HttpServletResponse. Não obstante, estes objetos vêm de encontro com as necessidades do desenvolvedor. São criados e mantidos por um contêiner e são simplesmente passados no

34 34 momento que este contêiner chama o método doget. A respeito disso, o método doget e outros métodos, que serão discutidos depois, são similares ao método public statis void main(strings[] args) que utilizamos em classes Java baseadas em linhas de comando. Não será criado um array de String para passarmos com o método; pois já foi realizado pelo ambiente de execução. Os objetos HttpServletRequest e HttpServletResponse atendem aos desenvolvedores através das seguintes funcionalidades: O objeto HttpServletRequest fornece acesso a todas as informações a respeito das requisições do cliente incluindo todos os parâmetros que são colocados nos cabeçalhos de requisições HTTP, métodos de requisições HTTP, entre outros. O objeto HttpServletResponse contém todos métodos necessários utilizados pelos desenvolvedores para produzir respostas que serão enviadas de volta ao cliente. Isto inclui métodos para definir o cabeçalho de resposta HTTP, declarar respostas do tipo MIME, bem como métodos de recuperação de instâncias de classes Java I/O as quais podemos utilizar diretamente para produzir a saída. Voltando ao código, vemos que, com a exceção dos comentários, existem muitas linhas que usamos para executar a funcionalidade de exibir "Hello World!" ao usuário. Uma dessas linhas é: PrintWriter out = response.getwriter(); e múltiplas chamadas para o método out.println(). Por enquanto, pensemos no objeto out como quem leva nosso texto de saída para o browser do cliente.

35 35 Figura 7 Exibição de mensagem no browser através do método out. 2.3 CICLO DE VIDA DA CLASSE SERVLET Uma Servlet é gerenciada através de um ciclo de vida bem definido descrito nas especificações Servlet. O ciclo de vida do Servlet descreve como ele é carregado, instanciado, inicializado, requisitado, destruído e finalmente coletado (retirado de memória garbage collection). O ciclo de vida de um Servlet é controlado pelo contêiner em que ele é instalado. O ciclo de vida da Servlet permite ao contêiner resolver os problemas de endereçamento e performance do CGI e as preocupações com segurança da API de programação de um servidor baixo-nível. Um contêiner deve poder executar todas as Servlets em uma única JVM (Java Virtual Machine Máquina Virtual Java). Por esta razão, as Servlets podem eficientemente compartilhar dados entre si e evitar que uma acesse os dados particulares de outra. As Servlets podem também permitir persistência entre requisições como objetos instanciados, utilizando assim menos memória do que processos completamente empacotados.

36 36 Figura 8 Ciclo de vida da Servlet. A figura mostra os principais eventos na vida de uma Servlet. É importante notar que para cada um destes eventos há um método que será invocado pelo contêiner. Instanciação Neste estágio, a classe Servlet é carregada para a memória e uma instância é criada pelo contêiner. Por padrão, um contêiner pratica o que chamamos de lazy loading (carregamento tardio). Utilizando este método, uma classe Servlet é carregada para a memória, instanciada e inicializada somente depois que uma requisição for feita. Isto diminui o tempo de inicialização da aplicação, entretanto significa também que haverá um pouco de atraso associado à primeira requisição de cada Servlet. Se este comportamento for indesejável, cada Servlet deve ser configurada para ser carregada juntamente com a aplicação. Isto será discutido posteriormente quando abordarmos o descritor de carregamento.

37 37 Como podemos ver na figura, uma Servlet passa pela fase de instanciação somente uma vez durante seu ciclo de vida. Isto significa que o atraso associado ao seu carregamento em memória acontece somente uma vez. Isto mostra a vantagem desta sobre outras tecnologias. O método relevante que o contêiner irá chamar neste estágio será o construtor. Não é recomendado que se coloque qualquer código no construtor. A maioria das funcionalidades que os desenvolvedores querem adicionar aos construtores envolvem definição de objetos ou inicialização de variáveis. Servlets possui uma fase separada para este tipo de atividade. Inicialização Nesta fase, Servlet é primordial para o uso na aplicação. Assim como a fase de instanciação, uma Servlet passa por este estágio somente uma vez. Isto só ocorre após a fase em que nosso objeto é inicializado ao ser chamado pela Servlet. O método que é chamado pelo contêiner neste ponto é o método init(). A assinatura completa do método é apresentada abaixo. public void init(servletconfig config) Como podemos ver, este método tem um parâmetro: uma instância do objeto ServletConfig. Este objeto contém informações sobre a configuração da Servlet bem como fornece meios para que a Servlet acesse informações da aplicação e seus recursos. Como mencionado anteriormente, qualquer código de configuração ou inicialização não deve ser colocado na área do construtor, em vez disso, deve ser colocado dentro do método init. Se um desenvolvedor implementar este método, é importante que realize uma chamada ao super.init(config). Isto garante que a ação de inicialização padrão da Servlet seja executada e que sua configuração seja apropriadamente definida.

38 38 Após a inicialização, a Servlet estará apta a receber as requisições dos clientes. Este método somente será chamado novamente quando o servidor recarregar a Servlet. O servidor não pode recarregar uma Servlet até que esta seja destruída através do método destroy. Pronta Esta é a fase quando uma Servlet está no auge do seu ciclo de vida. Nesta, a Servlet pode ser chamada repetidamente pelo contêiner para prover sua funcionalidade. O método chamado pelo contêiner nesta fase é service() e possui a seguinte assinatura: public void service(servletrequest req, ServletResponse res) Os objetos ServletRequest e ServletResponse passados para este método provêem métodos para extrair informação das requisições dos usuários e métodos para gerar as respostas. Um detalhe importante a ser observado, o contêiner realiza repetidas chamadas ao método service usando threads separadas. Geralmente, há somente uma instância ativa da Servlet consumindo espaço em memória e atendendo às diversas requisições. Esta é outra vantagem que o Servlet Java possui é também uma das principais razões porque uma Servlet (e o seu método service) é projetado para conter um thread-safe. Para Servlets específicos HTTP (Servlets estendendo HttpServlet), os desenvolvedores não devem implementar o método service diretamente. Ao invés disto, devem implementar qualquer um dos seguintes métodos: public void doget(httpservletrequest req, HttpServletResponse res) public void dopost(httpservletrequest req, HttpServletResponse res) public void doput(httpservletrequest req, HttpServletResponse res) public void dotrace(httpservletrequest req, HttpServletResponse res)

39 39 Cada um destes métodos corresponde a um método HTTP específico (GET, POST,...). O método apropriado é então chamado quando o Servlet recebe a requisição HTTP. Já que a maioria das chamadas HTTP, que os desenvolvedores devem se preocupar, são dos métodos GET ou POST, Servlets podem implementar doget, dopost ou ambos. Destruição Em algumas ocasiões, quando o contêiner ficar sem memória ou detectar que a quantidade de memória livre possui pode gerar algum problema, o contêiner tentará liberar memória destruindo uma ou mais instâncias da Servlet. Qual será removida é determinado pelo contêiner e o desenvolvedor não tem controle direto. Um contêiner poderá liberar uma instância da Servlet como parte de seu processo de desligamento. Quando a Servlet está para ser removida de um gerenciamento do contêiner, ela está na fase de destruição. O método chamado pelo contêiner, antes de realizar isto, é o destroy(). Aqui, na nossa Servlet deveria ser codificado para explicitamente liberar os recursos utilizados (ex. Conexões com o Banco de Dados). Garbage Collection Esta fase do ciclo de vida de uma Servlet é equivalente a de qualquer outro objeto Java. Relembrando que esta fase ocorre antes que um objeto seja retirado da memória. Os desenvolvedores não têm controle direto quando isso irá ocorrer. O método do objeto chamado nesta fase é o finalize().

40 MANIPULANDO REQUISISÕES E RESPOSTAS O principal objetivo de uma Servlet é prover conteúdo dinâmico para o usuário. Por definição, o conteúdo dinâmico muda em resposta a diversas condições. Exemplos dos quais são as requisições específicas de usuário, a hora, temperatura. Para dar a Servlet acesso aos dados de uma requisição, esta é provida em uma instância do objeto ServletRequest que esconde estes detalhes. Servlets baseados em HTTP possuem uma subclasse, HTTPServletRequest, que provê métodos adicionais para obter informação específica do HTTP, como informação sobre cookies, detalhes de cabeçalhos, entre outros. Dados e Parâmetros de Formulário Método request.getparameter Um dos cenários que freqüentemente requer mais frequentemente conteúdo dinâmico é quando queremos que nossa aplicação responda aos dados do usuários apresentados em um formulário. Veja o exemplo seguinte:

41 41 Figura 9 Entrada do Nome do Usuário Dado o seguinte formulário, mostrado na figura anterior, que obtém o nome do usuário, queremos produzir uma resposta customizada para qualquer nome submetido. Para este e outros cenários similares, Java provê o método getparameter no objeto HttpServletRequest. Este método possui a seguinte assinatura: public String getparameter(string parametername) Este método obtém o nome do parâmetro que desejamos obter e retorna o valor da String que representa este parâmetro. Abaixo segue um código exemplo que obtém o nome do usuário e dá saída em um simples cumprimento, seguido pelo HTML usado para mostrar o formulário. public class GetParameterServlet extends HttpServlet { protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // retorna o valor solicitado pelo usuário

42 42 String username = request.getparameter("username"); // retorna um objeto PrintWriter e utiliza-o para a mensagem de saída PrintWriter out = response.getwriter(); out.println("<html><body><h1>"); out.println("hello AND WELCOME, " + username + "!"); out.println("</h1></body></html>"); out.close(); } } Temos a seguir, o código para HTML exemplo utilizado para mostrar o formulário: <HTML> <TITLE>Halloa!</TITLE> <BODY> <form action="getparameterservlet" method="post"> Enter user name: <input type="text" name="username"/> <br/> <input type="submit" value="greet me!"/> </form> </BODY> </HTML> Ao entrar com o valor "JEDI" no formulário, obtemos o seguinte resultado:

43 43 Figura 10: Saída do GetParameterServlet Método request.getparametervalues Existem momento que necessitamos recuperar dados de um formulário com múltiplos elementos com o mesmo nome. Neste caso, usando apenas o método getparameter descrito anteriormente, será retornado apenas o valor do primeiro elemento com aquele nome. Para recuperar todos os valores, usamos o método getparametervalues: public String[] getparametervalues(string parametername) Este método é similar ao que acabamos de discutir. Também recebe o nome do parâmetro que queremos recuperar o valor. Desta vez, ao invés de uma única String, retorna um array de Strings.

44 44 Este é um exemplo: public class GetParameterValuesServlet extends HttpServlet { protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletExceptionm IOException{ String paramvalues[] = request.getparametervalues("sports"); StringBuffer myresponse = new StringBuffer(); PrintWriter out = response.getwriter(); out.println("<html><title>your choices</title>"); out.println("<body><h1>your choices were : </H1>"); for (int i = 0; i < paramvalues.length; i++) { out.println("<br/><li>"); out.println(paramvalues[i]); } out.println("</body></html>"); } } A seguir, temos o código para o HTML usado para mostrar o formulário: <html> <title>choice selection</title> <body> <H1>What sports activities do you perform?</h1> <form action="getparametervaluesservlet" method="get"> <input type="checkbox" name="sports" value="biking"> Biking <br/> <input type="checkbox" name="sports" value="table Tennis"> Table Tennis <br/> <input type="checkbox" name="sports" value="swimming"> Swimming

45 45 <br/> <input type="checkbox" name="sports" value="basketball"> Basketball <br/> <input type="checkbox" name="sports" value="others"> Others <br/> <input type="submit"> </form> </body> </html> Figura 11: Recuperando dados de um formulário com múltiplos elementos Se as opção Basketball" for escolhida, a saída seria:

46 46 Figura 12: Saída do GetParameterValuesServlet DESENVOLVENDO UMA CLASSE SERVLET UTILIZANDO A IDE NETBEANS Para criar seu primeiro projeto Web, vá ao menu File e clique em New Project. Alternativamente, na janela Projects, você pode dar um clique com o botão direito do mouse e selecionar a opção New Project (Ctrl+Shift+N) no menu de contexto. Figura 13: Selecionando a opção New Project

47 47 A caixa de diálogo New Project surgirá. O desenvolvimento de projetos para aplicações Web se encontra na categoria (Categories) Web. Como a aplicação trata-se de um desenvolvimento sem informações anteriores, ou seja, limpo, você seleciona Web Application em Projects. Após selecionar a opção em Projects clique no botão Next Figura 14: Seleção de uma nova aplicação WEB Na segunda etapa do assistente, você possui várias opções para a construção do seu projeto.

48 48 Figura 15: Caixa de diálogo de nome e localização Em Nome do projeto você digita o nome do seu projeto. No caso desse material é DesvComServlets. Em Localização do projetoproject Location o NetBeans coloca seus projetos geralmente no diretório do usuário do seu sistema operacional. Para mudar a localização, clique no botão Procurar e selecione ou crie um novo diretório para salvar seus projetos. Perceba que o seu projeto gerará um novo diretório, e este é mostrado em Pasta do projeto. A opção Configurar como projeto principal indica qual é o projeto que será compilado toda vez que você mandar rodar para exibir no browser. Na caixa de diálogo seguinte você tem como principais pontos o Servidor, que pode ser selecionado em Servidor. Os servidores possuem características próprias, embora, no geral, sejam parecidos em suas administrações, desde que sigam rigorosamente regras impostas pela Sun Microsystems. Um exemplo de servidores que trabalhem com Java EE na versão 5 é o Sun Java System Application Server, GlassFish, Geronimo e etc. Figura 16: Detalhe do servidor, versão e caminho de contexto

49 49 Outra forma seria clicar no botão Adicionar e adicionar um novo servidor (ou container) para uma versão inferior a 6. No caso desse material, vamos utilizar o GlassFish V3 como Servidor para o primeiro projeto. E com a versão de Java EE 6 web selecionada em Java EE Version. Em Caminho do contexto você possui o nome do contexto de acesso ao projeto, o que na realidade será a sua aplicação. A terceira etapa é a seleção de um framework, no qual não será abordado nesse material. Figura 17: Seleção de um framework VISÃO GERAL DO NETBEANS IDE O NetBeans possui muitos menus, ferramentas e janelas que o auxiliam no de- senvolvimento de uma aplicação Web. A seguir a Figura 2.7 que demonstra os principais componentes que existem na IDE quando você cria um projeto.

50 50 Figura 18: Características gerais do Netbeans IDE BARRA DE TÍTULO: A barra de título sempre exibe o nome do projeto. BARRA DE MENUS: Esta é a barra de menu global, que lhe permite fazer todas as tarefas gerais. As opções disponíveis em cada menu também mudarão de- pendendo do que estiver selecionado. BARRA DE FERRAMENTAS: Esta é a barra de ferramentas global da IDE que tam- bém lhe permite executar tarefas gerais e tarefas específicas para itens selecio- nados. BARRA DE STATUS: Esta linha exibe tipicamente informações que dependem da tarefa você está executando atualmente. SOURCE EDITOR: É exatamente o que o seu nome diz: é um painel para editar documentos. Aqui você escreve seus códigos Java.

51 51 JANELAS: Mostram grupos de objetos relacionados, propriedades, componen- tes e até mesmo a saída da execução de um código Java. EXPLORANDO SEU PROJETO A janela Projects será com certeza a que você mais vai utilizar, após o Source Editor. Nesta janela você possui diversos atalhos, com o menu de contexto, que podem ser muito úteis, passando desde a execução de um projeto como até mesmo adi- cionar novas bibliotecas, criar novos arquivos, alterar seus nomes e etc. Na construção de uma aplicação Web, você possui diversos elementos. Estes ele- mentos estão dispostos em forma de diretórios que podem ser expandidos clicando em seus nós. O diretório Web Pages representa o diretório principal (raiz) de uma aplicação Web normal. Dentro deste nó você encontra o diretório WEB-INF, que contém o arquivo obrigatório web.xml, conhecido como deployment des- criptor. Junto a este diretório, há também um arquivo inicial, chamado de index.jsp, que é aberto inicialmente assim que concluído o projeto. Veremos isto mais adiante. Expandindo o nó de Configuration Files você encontra os arquivos MANIFEST. MF, sun-web.xml e web.xml. Evidentemente pode haver mais arquivos, pois neste diretório se encontram todos os arquivos referentes à configuração da aplicação Web que você está desenvolvendo. Em Source Packages você encontra pacotes e classes Java e Servlets, criados no processo de desenvolvimento da sua aplicação.

52 52 Figura 19: Diretórios expandidos do projeto na janela projects No caso de uma aplicação criada para trabalhar com o Tomcat, por exemplo, o padrão Jakarta entra em ação. A Apache Jakarta fornece diretrizes de como estruturar suas aplicações Web para assegurar que elas trabalhem corretamente com o servidor Tomcat. Quando você cria um projeto na IDE e seleciona o Tomcat, esta estrutura é respeitada. A seguir você tem a imagem da janela Projects com a estrutura de sua aplicação utilizando a Apache Jakarta para um projeto com o container Servlet Tomcat 6:

53 53 Figura 20: Estrutura do projeto utilizado pelo tomcat Clicando na janela Files, ao lado de Projects, você vê a estrutura do seu projeto como se encontra no sistema operacional. Figura 21: Arquivos encontrados em projeto no Netbeans ide A Tabela a seguir compara a estrutura de um projeto Web criado no NetBeans e a estrutura real da aplicação no GlassFish ou Tomcat.

54 54 CONTEÚDO REPRESENTAÇÃO NA JANELA PROJECTS REPRESENTAÇÃO NA JANELA FILES NO ARQUIVO WAR Páginas Web Nó Web Pages Diretório web Na raiz do arquivo Arquivos Java não compilados, servlets, entre outros Nó Source Packages Diretório src Diretório classes dentro de WEB-INF testes unitários Nó Test Packages Diretório test N/A deployment descriptor (web.xml) Nó Configuration Files GlassFish(sun-web.xml) Nó Configuration Files Arquivo de configuração do Tomcat e GlassFish V2 ou superior (context configuration) (context.xml) Nó Configuration Files Diretório WEB-INF em web Diretório WEB-INF em web Diretório META-INF em web Bibliotecas Nó Libraries Diretório lib em web/ WEB-INF Testes Nó Test Libraries Diretório test N/A Metadata do projeto incluindo script build Propriedade do projeto na caixa de diálogo Project Properties, que pode ser aberta com um clique com o direito do mouse sobre o projeto, selecionando a opção Properties no menu de contexto. Diretório WEB-INF Diretório WEB-INF Diretório META-INF Diretório WEB-INF/lib DESENVOLVENDO SERVLETS Como você pôde ver, o NetBeans criou na conclusão do projeto, um arquivo JSP (JavaServer Pages). O que você vai fazer agora é um Servlet, que receberá de um formulário vindo deste arquivo criado na conclusão do projeto, para imprimir um determinado valor, que no seu caso, será seu nome. Vá ao menu File e clique em New File. Alternativamente você pode clicar com o direito do mouse e selecionar, no menu de contexto, em New, o item em Servlet. Caso Servlet não esteja aparecendo, clique em New File. O atalho para um novo arquivo é Ctrl + N.

55 55 Na caixa de diálogo New File selecione em Categories o item Web e em File Types o item Servlet. Clique no botão Next para prosseguir. Figura 22: Criando um Servlet Na segunda etapa do assistente, em New Servlet, digite MeuPrimeiroServlet em Class Name. Toda classe Java, assim como Servlets, devem ter um pacote. Como você ainda não fez nenhum pacote, digite em Package o nome do seu pacote. Caso queira seguir o livro, seria br.com.integrator. Perceba que o assistente lhe mostra a localização da classe Servlet que será gerada, em Source Packages, bem como onde será criado, em Created File. Clique no botão Next para a terceira e última etapa deste assistente.

56 56 Figura 23: Definindo um nome e um pacote para o servletcriando um Servlet Na última etapa, mantenha como está. Esta etapa existe para que você possa con- figurar o caminho do seu Servlet na chamada pela URL através de URL Pattern(s). Se você possui alguma experiência com aplicações Web construídas em Java, sabe que isto pode ser mudado, assim como o seu Name. Estas informações deverão ser gravadas no deployment descriptor (Add information to deployment descriptor), portanto, mantenha esta opção selecionada. Clique no botão Finish para completar o assistente. Figura 24: Última etapa para a criação do Servlet

57 57 Perceba que o NetBeans criou para você um arquivo, baseado em seu template, com parte do desenvolvimento de um Servlet. Vamos alterá-lo para que você o veja funcionando e então explicarei melhor como tudo funciona. No Servlet pré-construído, altere seguir, em destaque: como mostrado na Listagem a protected void processrequest(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String nome = request.getparameter( nome ); response.setcontenttype( text/html;charset=iso ); PrintWriter out = response.getwriter( ); // /* TODO output your page here out.println( <html> ); out.println( <head> ); out.println( <title>meu nome é +nome+ </title> ); out.println( </head> ); out.println( <body> ); out.println( <h1>meu nome é + nome + </h1> ); out.println( </body> ); out.println( </html> ); // */ out.close( ); }... Os demais itens permanecerão exatamente como estão. No arquivo index.jsp, você irá adicionar um formulário HTML. Para fazer isso, você possui duas formas: digitando ou utilizando a janela Palette como auxiliar. Vou ensinar pela janela Palette para simplificar sua digitação.

58 58 Primeiramente, apague todo o conteúdo existente por entre as tags HTML <body>... </body>. Mantenha o cursor por entre estas tags. Vá a janela Palette e dê um duplo clique em Form, na categoria HTML Forms. Alternativamente você pode arrastar desta janela para o Editor, por entre as tags HTML mencionadas. Figura 25: O item form selecionado Na caixa de diálogo Insert Form digite em Action o nome do seu Servlet, que no caso é MeuPrimeiroServlet. Selecione em Method o método POST de envio de dados e em Name você pode dar um nome ao seu formulário, alternativamente. Confirme a caixa de diálogo clicando no botão OK.

59 59 Figura 26: A caixa de diálogo insert form com as configurações preenchidas Perceba que o NetBeans construiu o formulário, através das tags HTML <form /> no seu código, por entre as tags <body />. Coloque seu cursor por entre as tags <form>... </form>. Novamente na janela Palette, na categoria HTML Forms, dê um duplo clique no componente Text Input. Figura 27: Componente text input selecionado Na caixa de diálogo Insert Text Input digite nome em Name. Mantenha text selecionado em Type e coloque 25 para a largura da sua caixa de texto, em Width. Confirme a caixa de diálogo clicando no botão OK.

60 60 Figura 28: Caixa de diálogo insert text input com o campo nome configurado Resta agora apenas adicionar um botão de envio (submissão) do formulário. Vá à janela Palette novamente, e dê um duplo clique no componente Button, ainda na categoria HTML Forms. Figura 29: Componente Button em destaque Na caixa de diálogo Insert Button digite Enviar em Label e mantenha se- lecionada a opção submit em Type. Dê um nome ao seu botão em Name e confirme a caixa de diálogo no botão OK.

61 61 Figura 30: Botão enviar configurado na caixa de diálogo insert button Neste ponto, o NetBeans deve ter criado todo o código necessário do formulário HTML para enviar seu nome ao Servlet desenvolvido. Com o formulário construído e o Servlet alterado, vamos compilar e rodar a apli- cação criada, de uma só vez. Para compilar e rodar, você tem mais do que duas formas, na qual você pode escolher entre: 1. Clique no menu Run e selecione Run Main Project. Figura 31: Run main Project do menu run 2. Com o botão direito do mouse sobre o projeto, na janela Projects selecione no menu de contexto o item Run. Este modo de rodar seu projeto também é muito usado quando queremos um projeto que não seja o padrão do compi- lador e executor.

62 62 Figura 32: Detalhe da seleção run do menu de context na janela projects 3. A terceira forma é clicando sobre o botão Run Main Project, na barra de ferramentas Build. Figura 33: Botão run main Project pressionado na barra de ferramentas build 4. A quarta forma se encontra no atalho F6, que pode ser visto no menu Run quando você o abre, em Run Main Project. Ao começar a rodar a sua aplicação, note a janela Output que surgiu logo abaixo de sua IDE, acima da barra de status. Ela contém três janelas. A primeira é a exibi- ção da compilação da sua aplicação Java (ferramenta Ant), a segunda é o Java DB Database Process, que exibe a inicialização do banco de dados derby, embutido a IDE. O log do servidor de aplicações ou Container Servlet é a terceira a janela, contendo no caso o nome GlassFish 3, juntamente com botões de controle. Veremos isto com detalhes mais adiante.

63 63 Figura 34: Saídas encontradas na execução de uma aplicação O navegador abrirá. O NetBeans usa o navegador padrão do seu sistema opera- cional para abrir a página principal, no caso o index.jsp primeiramente. No for- mulário, digite seu nome e clique no botão Enviar. O Servlet criado no exemplo, receberá esta informação e a imprimirá na tela, gerando um HTML.

64 64 Figura 35: Formulário de envio e o resultado impresso pelo servlet após receber os dados EXERCÍCIOS 1) Quais são as 5 fases do ciclo de vida de uma Servlet? 2) Quais são os métodos associados a cada fase do ciclo de vida de uma Servlet? 3) Por que o código colocado no método service de uma Servlet precisa ser thread-safe?

65 65 4) Quando uma Servlet é destruída? 5) Quantas vezes o código colocado dentro do método init() do Servlet pode ser chamado? E o código dentro do método service()? 6) Caso a Servlet estenda a classe HttpServlet, quais métodos adicionais poderemos implementar para produzir a funcionalidade necessária? 7) Crie uma Servlet chamado SOMATORIO que irá recuperar 2 números dados pelo usuário, adicione- os, e gere o resultado. 8) Crie uma Servlet chamado CarrinhodeCompras que irá recuperar as seleções feitas pelo usuário, adicionar os seus valores, e retornar o resultado computado para o usuário. RESUMO DA AULA A tecnologia Servlets são a solução Java para a produção de conteúdo dinâmico para a WEB em resposta a tecnologia CGI. Servlets possui várias vantagens sobre CGI, incluindo uma reduzida na área de ocupação de memória e menos despesa para cada solicitação. Uma Servlet está completamente administrada pelo seu contêiner. O único código necessário para os desenvolvedores é a funcionalidade da implementação. Para criar Servlets, os desenvolvedores devem criar subdivisões de classe de HttpServlet e seus lugares de implementações funcionais em quaisquer dos métodos, doget ou dopost. Detalhes de pedido podem ser recuperados por HttpServletRequest, e métodos geradores de resposta podem ser acessados por HttpServletResponse. Estes são passados como parâmetros para doget e dopost. NA PRÓXIMA AULA Veremos com desenvolver sistemas web utilizando a tecnologia JSP.

66 JavaServer Pages JSP Aula 3 66 Meta da Aula Demonstrar as operações básicas com registros de bancos de dados utilizando a api jdbc e a tecnologia JSP. Objetivos Ao final desta aula, você deverá ser capaz de: 1. Ter uma visão geral sobre páginas JSP; 2. Conhecer o ciclo de vida de páginas JSP; 3. Compreender a sintaxe e a semântica das páginas JSP; 4. Desenvolver aplicações web utilizando a tecnologia JSP.

67 INTRODUÇÃO AO JAVASERVER PAGES. C Enquanto que desenvolver um Servlet, você tem que inserir muitos códigos Java, a parte de layout da página fica a cargo do Web Designer, no qual trabalha com imagens, cores e outros elementos visuais existentes em um web site. Graças a esse problema, a equipe da Sun desenvolveu uma tecnologia baseada em Servlets chamada de JavaServer Pages (JSP). JavaServer Pages são páginas HTML embebidas em código Java. Dessa forma a página dinâmica é gerada pelo código JSP. A primeira vez que uma página JSP é carregada pelo container JSP, o código Java é compilado gerando um Servlet que é executado. As chamadas subseqüentes são enviadas diretamente ao Servlet, não havendo mais a recompilação do código Java. A estrutura do JavaServer Pages Como o JavaServer Pages são códigos Java embebidos em páginas HTML, você pode definir o local que deseja colocar seu código. Dentro do arquivo, você insere elementos pertencentes ao JSP, seguindo a sintaxe: Figura 36: Código Index.jsp

68 68 O arquivo index.jsp, diferente do Servlet, não fica dentro do diretório classes, em WEB-INF, mas sim diretamente na raiz da sua aplicação. Observe também que o arquivo, embora contenha códigos HTML, tem a extensão modificada para.jsp. Para escrever código Java em sua página basta colocá-lo entre as tags <% e %>. Esse código é chamado de scriplet. Scriplet é o código escrito entre <% e %>, nome composto da palavra script (linguagem de script) com o sufixo let, que indica pequeno. 1 - Existem variáveis já implícitas no jsp, onde todo arquivo jsp já possui uma variável chamada out (do tipo JspWriter) que permite imprimir objetos através do método write, print ou println: <% out.write(s); %> Preciso compilar uma página JavaServer Pages? Uma das grandes vantagens de desenvolver em JavaServer Pages é que você não precisa compilar seu código. Você cria a página e a coloca pra rodar no Servlet Container. Caso precise alterar, altere e pronto. JavaServer Pages são Servlets? O JSP é um arquivo de script interpretado inicialmente e depois compilado em um Servlet. O arquivo é pré-compilado numa classe Java quando acontecer o primeiro chamado desse arquivo. Você pode visualizar o Java criado, assim como o compilado no Tomcat em: $CATALINA_HOME/work/Catalina/localhost/SiteJSP/org/apache/jsp Como o Servlet Container saberá que alterei o arquivo?

69 69 O compilador verifica a data de alteração do arquivo que contém a página JSP e caso essa data se modifique, o processo de compilação é executado novamente para garantir que as alterações feitas na página sejam visíveis para os usuários da aplicação. Devido a todo esse processo de compilação / recompilação, após a modificação, assim como na criação, de uma página JSP, é sempre mais lento que os acessos seguintes. Por trás de uma página JSP existe um Servlet especial, chamado Page Compiler, que intercepta requisições direcionadas a recursos com extensão.jsp. O ciclo de vida O fato de uma página JSP ser convertida para um Servlet faz com que ela tenha o mesmo ciclo de vida apresentado pelo Servlet, onde existe a inicialização, a requisição, e finalmente a finalização. Não existem métodos equivalentes ao doget e dopost de um Servlet para o atendimento as requisições, já que o próprio conteúdo da página contém o código a ser executado e retornado para o browser a cada chamada. Por outro lado, existem os métodos jspinit( ) e jspdestroy( ) que possibilitam a implementação de códigos de inicialização e finalização, respectivamente, da página JSP. A estrutura do JavaServer Pages Em páginas dinâmicas escritas em JSP você tem as tags de abertura <% e fechamento %>, como já dito anteriormente, para se adicionar o comando desejado. As tags mais comuns são: Comentários: <%-- esse é um comentário em JSP --%> e

70 70 <% /* esse comentário tem mais de uma linha */ %> Declaração de atributos ou métodos: <%! %> Expressão de um resultado: <%= %> Tags Personalizadas: taglib %> Diretivas Diretivas são usadas para fornecer informações especiais ditas ao container sobre a página JSP quando esta é compilada para Servlet. Você tem três tipos de diretivas principais: page: permite importação de classes, customização de super classes servlet entre outras; include: permite que um conteúdo seja inserido de um arquivo no servlet. taglib: permite que o ambiente JSP importe uma determinada biblioteca de tags. Para cada um desses tipos de diretivas, existem conjuntos de atributos específicos utilizados para parametrizar a diretiva. Diretiva page Conforme o próprio nome indica, a diretiva page serve para se definir diretivas da página. A diretiva page tem a seguinte sintaxe: page %> Os atributos mais usados são: language="java" Especifica a linguagem que está sendo usada.

71 71 extends="pacote.classe" Define se a super classe do servlet por herança. import="pacote.classe.*" Pacote que deve ser importado. session="true false" Permite ou não variáveis de sessão. buffer="none 10kb" Tamanho do buffer em KB para o JspWriter out. O buffer padrão é definido pelo servidor. info="mensagem" - Define uma string que pode ser recuperada pelo método getservletinfo( ). Com esse atributo o desenvolvedor pode adicionar uma documentação à página que resume sua funcionalidade. errorpage="erro.jsp" Define a página de erro no qual será desviado caso isso ocorra. iserrorpage="true false" Define se é uma página de controle de erro. contenttype="text/html" Informações sobe a página, o MIME type do documento. pageencoding="iso " Define o conjunto de caracteres para a página JSP. autoflush="true false" - O valor true (padrão) indica se o buffer deve ser esvaziado quando estive cheio. Em false, indica que uma exceção deve ser mostrada quando ocorrer overflows. Usando a diretiva page A página JSP a seguir demonstra alguns atributos da diretiva page:

72 72 Figura 37: Código data.jsp 1 - Você pode notar que no início da sua página JSP existe a diretiva page com vários atributos, discutidos no início desse tópico. O mais importante nesse ponto é compreender a simplicidade perto do desenvolvimento usando Servlets. 2 - Utilização da classe SimpleDateFormat. 3 - Como resultado da diretiva page em conjunto com o atributo import você pode manipular a data do servidor e formatá-la, dando como resultado o visto na imagem a seguir: Figura 38: Página retornada utilizando a diretiva page

73 73 Diretiva Include A diretiva include permite que sejam incluídos arquivos na hora em que a página JSP é compilada em servlet. Sua sintaxe é similar a: include file="topo.html" %> Para exemplificar essa diretiva, você irá criar três páginas: usandodiretivaimport.jsp, cabecalho.html e rodape.html. cabecalho.html <h1 style="color:red; background-color:#eeeeee">esse é o cabeçalho </h1> rodape.html <strong>esse texto faz parte do rodapé</strong> A única página dinâmica no caso, ou seja, feita em JSP é o usandodiretivaimport.jsp: Figura 39: Código usandodiretivaimport.jsp

74 74 Figura 40: Página exibida A vantagem de utilizar essa diretiva está no fato de que você pode manter conteúdo estático ou dinâmico comum a diversas páginas JSP em arquivos separados, incluídos, através dessa diretiva, conforme a necessidade. Sendo assim, um menu, cabeçalho, rodapé e outras situações que podem se repetir ao longo de diversas páginas no site podem ser inclusos, não necessitando de ser refeito a cada nova página e, auxiliando assim, na administração do conteúdo. O uso de expressões Em algumas páginas JSP construídas até agora utilizamos um elemento dinâmico chamado de expressão, e esse elemento serve para imprimir o resultado na página do usuário Web, convertendo o valor em uma String. <%= expressão %> Note que a expressão contém um sinal de igual = e não termina com ponto-e-vírgula. 3.2 TRABALHANDO COM BANCO DE DADOS Trabalhar com banco de dados em aplicações Web é a coisa mais comum no desenvolvimento. Esse tópico tratará do uso de banco de dados em aplicações Web com Servlets e páginas JSP.

75 75 Existem atualmente dezenas de bancos de dados no mercado. Os mais populares são o Oracle, MySQL, SQL Server, PostgreSQL, DB2, Interbase, Firebird. Todos eles são baseados no conceito relacional de dados. Introdução ao JDBC JDBC é uma API incluída dentro da linguagem Java para o acesso a banco de dados. Consiste em um conjunto de classes e interfaces escritas em Java que oferecem uma completa API para a programação com banco de dados, por tanto é uma solução 100% Java. JDBC é uma especificação formada por uma coleção de interfaces e classes abstratas, que devem implementar todos os fabricantes de drivers que queiram realizar uma implementação de seu driver 100% Java e compatível com JDBC. Devido ao JDBC ser escrito completamente em Java também passa a ter a vantagem de ser independente de plataforma. Sendo assim, não será necessário escrever um programa para cada tipo de banco de dados, uma mesma aplicação escrita utilizando JDBC poderá trabalhar com banco de dados como Oracle, Sybase, SQL Server, MySQL, Firebird, PostgreSQL e etc. Para que isso aconteça, basta alterar o JDBC referente ao banco de dados usado e o seu sistema passará a se comunicar com o banco de dados configurado. MySQL e o JDBC Sendo um dos sistemas de gerenciamento de bancos de dados mais usados do mundo, sua velocidade e capacidade de ser multiplataforma só poderiam chamar a atenção de quem desenvolve em Java.O driver JDBC escolhido para fazer os exemplos neste material foi o Connector/J. Usando o driver Connector/J, todos os tipos de aplicações de Java podem acessar um banco de dados e seus dados, desde que seja em MySQL é claro.

76 76 Para proseguir os estudos é necessário que o mysql esteja instalado em sua máquina. Vamos criar um banco de dados de uma livraria como exemplo. Segue o script: CREATE DATABASE livraria; USE livraria; CREATE TABLE livros( isbn CHAR(13) NOT NULL PRIMARY KEY, titulo VARCHAR(50), edicao_num TINYINT(2), ano_publicacao YEAR, descricao TEXT); Instalando o driver JDBC O arquivo que será adicionado, o ajudará a se conectar ao banco de dados MySQL. Esse arquivo JAR é o driver JDBC chamado de Connector/J, que você poderá baixar no site No momento em que escrevo, o driver que estou utilizando é o mysqlconnector-java bin.jar. O arquivo pode ser baixado em formato.zip ou formato.tar.gz. Após baixar, descompacte e coloque o arquivo citado anteriormente no diretório lib do seu projeto. O pacote java.sql Este pacote contém as classes core e interfaces que são necessárias para lidar com o bancos de dados. Esses elementos relacionam as tarefas como as mostradas a seguir: Fazer uma conexão ao banco de dados pelo DriverManager;

77 77 Enviar declarações SQL para um banco de dados, inclusive elementos como Statement, PreparedStatement e Connection; Lidar com respostas e atualizações via ResultSet; Mapeamento padrão de tipos SQL para classes e interfaces na linguagem Java, inclusive elementos como Array, Blob, Clob, Date, Time e Timestamp, Obter metadados de um banco de dados por DatabaseMetaData, colunas em um ResultSet via ResultSetMetaData Lidar com exceções tal como o SQLException. O javax.sql Este pacote contém as classes e interfaces que são usadas pelo acesso de lado servidor de fonte de dados. A principal inclusão como parte de javax.sql é o DataSource que possibilita uma alternativa para DriverManager. Também inclui coisas como pool de conexões, transações distribuídas, e a implementação de RowSet. O acesso ao banco de dados e a conexão JDBC A tabela a seguir descreve algumas das classes mais comuns e interfaces usadas para conexões de banco de dados e a execução de querys no banco de dados.

78 78 Os tipos de dados no Java e na SQL Não é novidade alguma dizer que a linguagem Java é diferente da linguagem SQL, tanto em suas estruturas como em tipo de dados. Evidentemente isso não é um problema, uma vez que você pode desenvolver classes Java que usam comandos SQL, podendo traduzir de um modelo para o outro. Para que isso seja possível, você precisa mapear os tipos de dados do Java para os tipos de dados da SQL. A tabela a seguir mostra os tipos de objeto Java e seus similares no tipo JDBC:

79 79 Para ajudá-lo a compreender o mapeamento no uso do banco de dados MySQL, o método ResultSet.getObject( ) usa as conversões de tipo entre MySQL e tipos Java, seguindo a especificação de JDBC onde apropriado. O valor devolvido por ResultSetMetaData.GetColumnClassName( ) também é mostrado a seguir:

80 80 Desenvolvendo via JDBC Os exemplos mostrados a seguir demonstram o trabalho de páginas JSP usando a API JDBC. Embora essa prática de desenvolvimento não seja recomendada nos dias atuais, é importante que você, como desenvolvedor iniciante, aprenda como utilizá-la. Conectando sua página JSP ao banco de dados Para que você entenda como funciona a conexão e a leitura de dados de um banco de dados, a página JSP a seguir demonstra de forma simples como trabalhar com o MySQL. page language="java" contenttype="text/html" pageencoding="iso " import="java.sql.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>trabalhando com Banco de dados usando JDBC e JSP</title> </head>

81 <body> <table border="1"> <thead> <tr> <th>isbn</th><th>título</th> </tr> </thead> <tbody> <% Connection conn = null; Statement st = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection("jdbc:mysql://localhost/livrari a", "francieric","senha"); st = conn.createstatement(); rs = st.executequery("select isbn, titulo from livros"); while(rs.next()) { %> <tr> <td><%= rs.getstring("isbn") %></td> <td><%= rs.getstring("titulo") %></td> </tr> <% } //end while } catch (Exception ex) { ex.printstacktrace(); } finally { if (rs!= null) rs.close(); if (st!= null) st.close(); if (conn!= null) conn.close(); } %> </tbody> </table> </body> </html> Dentro do bloco try...catch você define o trabalho com o banco de dados para se conectar e executar a instrução SQL. Ao importar o pacote java.sql.*, através da diretiva page, você tem acesso as classes e interfaces para manipular os bancos de dados relacionais em Java. O driver de banco de dados deve ser empregado antes do programa se conectar ao banco de dados. A linha anterior utiliza o método static forname da classe Class (pacote java.lang) para carregar a definição de classe para o driver de banco de dados. 81

82 82 Se a classe não for localizada, ele dispara uma exceção: java.lang.classnotfoundexception. Um objeto Connection gerencia a conexão entre o programa Java e o banco de dados. Ele também fornece suporte ao programa para executar instruções SQL. Através do método static getconnection, a classe DriverManager tenta uma conexão com o banco de dados especificado pela string: jdbc:mysql://localhost/livraria. Os argumentos seguintes são o nome de usuário e a senha, demonstrados pela String francieric e senha respectivamente. Caso a classe DriverManager não conseguir se conectar ao banco de dados, o método getconnection dispara uma exceção: A responsabilidade principal da interface Statement é executar sentenças SQL no banco de dados. Com o método público createstatement você cria um objeto Statement para enviar declarações SQL ao banco de dados. Se houver um erro, dispara também a exceção java.sql.sqlexception. Com o método executequery, você tem o retorno de um objeto que implementa ResultSet e que contém os resultados da consulta. Através de um loop while você varre os resultados encontrados, onde o método next( ), de ResultSet, retorna um valor booleano true, quando o resultado das linhas pesquisadas na query forem exauridas. O método getstring( ) %, de ResultSet, traz o valor da coluna designada na fila atual deste ResultSet como uma String na linguagem Java. Depois de consumidos, os recursos devem ser retornados ao servidor, utilizando o método close( ) &.

83 Nesse caso a cláusula usada é finally, que liberará os recursos, caso os resultados sejam bem sucedidos ou não. 83 Inserindo dados O exemplo que será feito agora irá ilustrar a inserção de dados no banco de dados. Você terá em uma página HTML comum um formulário contendo os campos necessários para inserir. Esse formulário irá enviar os dados, via método POST, para uma outra página, no caso JSP, que recuperará esses dados e os enviará para o banco de dados MySQL. Como você está usando a tabela livros, será baseado nessa tabela esse exemplo. forminserindodados.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>inserindo dados via JDBC com JSP</title> </head> <body> <form action="inserindodados.jsp" method="post"> <table> <tr>

84 84 <td>isbn:</td><td><input type="text" name="isbn" /></td> </tr> <tr> <td>título:</td><td><input type="text" name="titulo" /></td> </tr> <tr> <td>edição:</td><td><input type="text" name="edicao" /></td> </tr> <tr> <td>publicação:</td><td><input type="text" name="publicacao" /></td> </tr> <tr> <td>descrição:</td> <td><textarea name="descricao" rows="5" cols="25"></textarea></td> </tr> <tr> <td colspan="2"> <input type="submit" name="btcadastrar" value="enviar" /> </td> </tr> </table> </form> </body> </html> Figura 41: Página exibida

85 A página JSP que irá receber esses valores é mostrada a seguir: inserindodados.jsp page language="java" contenttype="text/html; " pageencoding="iso " import="java.sql.*" %> <% String isbn = request.getparameter("isbn"); String titulo = request.getparameter("titulo"); String edicao = request.getparameter("edicao"); String publicacao = request.getparameter("publicacao"); String descricao = request.getparameter("descricao"); Connection conn = null; PreparedStatement pst = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection("jdbc:mysql://localhost/livrari a", "edson","integrator"); String SQL = "INSERT INTO livros (isbn, titulo, edicao_num, " + "ano_publicacao, descricao) " + "values (?,?,?,?,?)"; pst = conn.preparestatement(sql); pst.setstring(1, isbn); pst.setstring(2, titulo); pst.setint(3, Integer.parseInt(edicao)); pst.setstring(4, publicacao); pst.setstring(5, descricao); pst.executeupdate(); pst.clearparameters(); } catch (Exception ex) { ex.printstacktrace(); } finally { if (pst!= null) pst.close(); if (conn!= null) conn.close(); } %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=iso " /> <title>dados recebidos</title> </head> <body> O ISBN <strong><%=isbn %></strong> foi inserido com sucesso! </body> </html> 85

86 86 A interface PreparedStatement tem um papel semelhante a interface Statement, o que nos permite executar sentenças SQL sobre uma conexão estabelecida com um banco de dados. Porém, neste caso,você utiliza sentenças mais especializadas, como a de inserir dados, onde você pode receber vários parâmetros como entrada. Um parâmetro de entrada é aquele cujo valor não se especifica quando a sentença é criada. No seu lugar a sentença recebe um sinal de interrogação (?) para cada parâmetro de entrada. Antes de executar a sentença, você deve especificar um valor para cada parâmetro, através dos métodos set apropriados. Para criar um objeto PreparedStatement você deve lançar um método preparestatement(string s) da interface Connection sobre o objeto que representa a conexão estabelecida com o banco de dados. Através do método setstring(int i, String s), você prepara os dados que estão vindo dos campos do seu aplicativo para inserir no banco de dados. Como você mesmo já concluiu, o tipo string foi utilizado graças ao tipo existente no banco de dados. O método setint(int i, int i) faz o mesmo que o anterior, mas exige um valor inteiro. Com o método executeupdate( ) você executa a sentença SQL para o tipo, que no caso é de inserção (INSERT). Esse método também serve para os atualizações (UPDATE) e exclusões (DELETE). Após utilizar os métodos setter, você pode limpá-los usando o método clearparameters( ). Entendendo os principais Statements Como você viu, Statements são essenciais para se comunicar com uma base de dados que usa a linguagem SQL. Há três

87 87 principais tipos de Statements. O primeiro é a interface Statement. Quando são criados objetos pela implementação da interface Statements, estes são geralmente usados para executar declarações SQL genéricas que não levam qualquer parâmetro. O segundo tipo é o PreparedStatement que herda da interface Statement. Objetos PreparedStatement são úteis quando você precisar criar e compilar declarações SQL antes do tempo. Objetos PreparedStatement também aceitam parâmetros IN. O tipo final de statement é o CallableStatement. O CallableStatement herda de PreparedStatement e aceita parâmetros IN e OUT. Seu propósito principal é executar procedimentos armazenados de banco de dados. Explorando a interface PreparedStatement Se você precisar executar declarações SQL muitas vezes, o PreparedStatement é a escolha perfeita para essa tarefa, isso porque aumenta a eficiência e desempenho do programa. O PreparedStatement é a escolha lógica do nome para a interface porque contém uma declaração SQL que previamente foi compilada e enviada ao DBMS de sua escolha, por isso o termo prepared. O PreparedStatement dá o desenvolvedor que a habilidade de embutir parâmetros na declaração SQL contidos no objeto PreparedStatement. Estes parâmetros IN (de entrada) são denotadas na declaração SQL pelo símbolo de interrogação (?). A tabela a seguir mostra os métodos setters que indicam os tipos para PreparedStatement:

88 88 EXERCÍCIOS 1) Considere a seguinte classe: public class Cliente { private String Nome; private String Endereco; private int Cpf; // métodos getter and setter aqui. } Crie uma pagina JSP que faça o seguinte: a) Retorne uma instância de Cliente usando as ações JSP. b) Mostre detalhes contidos na instância. detalhes devem ser mostrados usando ações JSP. 2) Usando a mesma classe do exercício anterior crie outra página que mostre os mesmo detalhes. Desta vez, faça uso de banco de dados.

Java na WEB Servlet. Sumário

Java na WEB Servlet. Sumário 1 Java na WEB Servlet Objetivo: Ao final da aula o aluno será capaz de: Utilizar Servlets para gerar páginas web dinâmicas. Utilizar Servlets para selecionar páginas JSPs. Utilizar Servlets como elemento

Leia mais

Arquitetura de uma Webapp

Arquitetura de uma Webapp Arquitetura de uma Webapp Arquitetura J2EE Containers e componentes MVC: introdução Frederico Costa Guedes Pereira 2006 fredguedespereira@gmail.com Plataforma J2EE World Wide Web e a Economia da Informação

Leia mais

UNIDADE II JAVA SERVLETS

UNIDADE II JAVA SERVLETS UNIDADE II JAVA SERVLETS INTERNET É uma rede de redes, reunindo computadores do Governo, de universidades e empresas fornecendo infra-estrutura para uso de bancos de dados, correio eletrônico, servidores

Leia mais

Java para Desenvolvimento Web

Java para Desenvolvimento Web Java para Desenvolvimento Web Servlets A tecnologia Servlet foi introduzida pela Sun Microsystems em 1996, aprimorando e estendendo a funcionalidade e capacidade de servidores Web. Servlets é uma API para

Leia mais

Curso de Java. Geração de Páginas WEB. TodososdireitosreservadosKlais

Curso de Java. Geração de Páginas WEB. TodososdireitosreservadosKlais Curso de Java Geração de Páginas WEB Aplicação WEB Numa aplicação WEB de conteúdo dinâmico As páginas são construídas a partir de dados da aplicação (mantidos num banco de dados). Usuários interagem com

Leia mais

Criando e Entendendo o Primeiro Servlet Por: Raphaela Galhardo Fernandes

Criando e Entendendo o Primeiro Servlet Por: Raphaela Galhardo Fernandes Criando e Entendendo o Primeiro Servlet Por: Raphaela Galhardo Fernandes Resumo Neste tutorial serão apresentados conceitos relacionados a Servlets. Ele inicial como uma breve introdução do funcionamento

Leia mais

Programação Web Aula 12 - Java Web Software

Programação Web Aula 12 - Java Web Software Programação Web Aula 12 - Java Web Software Bruno Müller Junior Departamento de Informática UFPR 25 de Maio de 2015 1 Java 2 Java Web Software 3 Servlets Modelo de Trabalho Funcionamento API Java Código

Leia mais

Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas)

Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas) Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas) Web Container: e JSP Sumário Protocolo HTTP Exemplos de JSP (Java Server Pages) Exemplos JSP 2 Protocolo HTTP URL: Um URL (Uniform

Leia mais

Desenvolvimento Web TCC-00.226 Turma A-1

Desenvolvimento Web TCC-00.226 Turma A-1 Desenvolvimento Web TCC-00.226 Turma A-1 Conteúdo Arquitetura de Aplicações Distribuídas na Web Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.2/tcc-00.226

Leia mais

Associação Carioca de Ensino Superior Centro Universitário Carioca

Associação Carioca de Ensino Superior Centro Universitário Carioca Desenvolvimento de Aplicações Web Lista de Exercícios Métodos HTTP 1. No tocante ao protocolo de transferência de hipertexto (HTTP), esse protocolo da categoria "solicitação e resposta" possui três métodos

Leia mais

Java II. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com

Java II. Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Java II Sérgio Luiz Ruivace Cerqueira sergioruivace@gmail.com Servlets Servlet Aplicação Java que é executada no servidor que estende a capacidade do servidor Web Alternativa Java para os scripts CGI Gerenciado

Leia mais

INTRODUÇÃO À TECNOLOGIA SERVLETS

INTRODUÇÃO À TECNOLOGIA SERVLETS PROGRAMAÇÃO SERVIDOR EM SISTEMAS WEB INTRODUÇÃO À TECNOLOGIA SERVLETS Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o conceito aplicações orientada a serviços via web Apresentar o papel dos contentores

Leia mais

Java para WEB. Servlets

Java para WEB. Servlets Servlets Servlets são classes Java que são instanciadas e executadas em associação com servidores Web, atendendo requisições realizadas por meio do protocolo HTTP. Servlets é a segunda forma que veremos

Leia mais

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M JAVA Marcio de Carvalho Victorino 1 Servlets 2 1 Plataforma WEB Baseada em HTTP (RFC 2068): Protocolo simples de transferência de arquivos Sem estado (não mantém sessão aberta) Funcionamento (simplificado):

Leia mais

Aula 03 - Projeto Java Web

Aula 03 - Projeto Java Web Aula 03 - Projeto Java Web Para criação de um projeto java web, vá em File/New. Escolha o projeto: Em seguida, na caixa Categorias selecione Java Web. Feito isso, na caixa à direita selecione Aplicação

Leia mais

Tencologia em Análise e Desenvolvimento de Sistemas Disciplina: WEB I Conteúdo: WEB Container Aula 04

Tencologia em Análise e Desenvolvimento de Sistemas Disciplina: WEB I Conteúdo: WEB Container Aula 04 Tencologia em Análise e Desenvolvimento de Sistemas Disciplina: WEB I Conteúdo: WEB Container Aula 04 Agenda 1. 2. Web Container TomCat 2 3 J2EE permite criar aplicações Web dinâmicas (com conteúdo dinâmico)

Leia mais

Fundamentos de Servlets. Conceitos e ciclo de vida Classes e Interfaces da API Exemplos de Servlets

Fundamentos de Servlets. Conceitos e ciclo de vida Classes e Interfaces da API Exemplos de Servlets Fundamentos de Servlets Conceitos e ciclo de vida Classes e Interfaces da API Exemplos de Servlets Common Gateway Interface Aplicações Geração de documentos com conteúdo dinâmico Produzir resultados em

Leia mais

Desenvolvimento Web com JSP/Servlets

Desenvolvimento Web com JSP/Servlets Desenvolvimento Web com JSP/Servlets Requisitos Linguagem Java; Linguagem SQL; Noções de HTML; Noções de CSS; Noções de Javascript; Configuração do ambiente JDK APACHE TOMCAT MySQL Instalando o JDK Instalando

Leia mais

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP Software cliente: browser e outros Protocolo HTTP Infraestrutura de transporte

Leia mais

Scriptlets e Formulários

Scriptlets e Formulários 2 Scriptlets e Formulários Prof. Autor: Daniel Morais dos Reis e-tec Brasil Programação Avançada Para Web Página1 Meta Permitir ao aluno aprender a criar um novo projeto Java para web no Netbeans IDE,

Leia mais

Prática em Laboratório N.02 Criando um serviço Web via NetBeans

Prática em Laboratório N.02 Criando um serviço Web via NetBeans Prática em Laboratório N.02 Criando um serviço Web via NetBeans O objetivo deste exercício é criar um projeto apropriado para desenvolver um contêiner que você resolva utilizar. Uma vez criado o projeto,

Leia mais

Web Browser como o processo cliente. Servidor web com páginas estáticas Vs. Aplicações dinâmicas para a Web:

Web Browser como o processo cliente. Servidor web com páginas estáticas Vs. Aplicações dinâmicas para a Web: Web Browser como o processo cliente Servidor web com páginas estáticas Vs Aplicações dinâmicas para a Web: 1 Cliente Web browser HTTP porto 80 Servidor web... JDBC RMI XML... Base de Dados Aplicação em

Leia mais

Desenvolvimento WEB II. Professora: Kelly de Paula Cunha

Desenvolvimento WEB II. Professora: Kelly de Paula Cunha Desenvolvimento WEB II Professora: Kelly de Paula Cunha O Java EE (Java Enterprise Edition): série de especificações detalhadas, dando uma receita de como deve ser implementado um software que utiliza

Leia mais

Uso de servlets nas aplicações web desenvolvidas para a plataforma java 1

Uso de servlets nas aplicações web desenvolvidas para a plataforma java 1 Uso de servlets nas aplicações web desenvolvidas para a plataforma java 1 Resumo Em uma interação feita em uma aplicação Web existem tarefas que devem ser executadas no servidor, tais como processamento

Leia mais

Java Servlets. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Java Servlets. Leonardo Gresta Paulino Murta leomurta@ic.uff.br Java Servlets Leonardo Gresta Paulino Murta leomurta@ic.uff.br Especificação/IDE/Implementação Esse curso foi preparado em 03/2015 usando a seguinte especificação, IDE e implementação Especificação Java

Leia mais

Introdução a Servlets e JSP. Prof. Samuel Martins samuellunamartins at gmail dot com Faculdade São Miguel

Introdução a Servlets e JSP. Prof. Samuel Martins samuellunamartins at gmail dot com Faculdade São Miguel Introdução a Servlets e JSP samuellunamartins at gmail dot com Conteúdo da aula Introdução a HTML Introdução a Servlets Preparando o ambiente de programação Exemplo de Servlets 2 Websites na década de

Leia mais

Prática Sobre Servlets e JSP

Prática Sobre Servlets e JSP Prática Sobre Servlets e JSP 1. Localize a pasta do Tomcat (TOMCAT_HOME); 2. Acesse a pasta bin e execute tomcat5w.exe; 3. Abra o Navegador e acesse http://localhost:8080 (A apresentação de uma página

Leia mais

Introdução a Servlets

Introdução a Servlets Linguagem de Programação para Web Introdução a Servlets Prof. Mauro Lopes 1-31 21 Objetivos Iniciaremos aqui o estudo sobre o desenvolvimento de sistemas web usando o Java. Apresentaremos nesta aula os

Leia mais

Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br)

Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br) Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br) Extensão de servidor escrita em Java Podem ser usados para estender qualquer tipo de aplicação do modelo requisição- resposta Todo servlet implementa a

Leia mais

Tecnologias Web. Java Servlets

Tecnologias Web. Java Servlets Tecnologias Web Java Servlets Cristiano Lehrer, M.Sc. O que são Servlets Extensões do servidor escritas em Java: Podem ser usados para estender qualquer tipo de aplicação do modelo requisição/resposta.

Leia mais

J550. Helder da Rocha (helder@acm.org) www.argonavis.com.br

J550. Helder da Rocha (helder@acm.org) www.argonavis.com.br J550 Helder da Rocha (helder@acm.org) www.argonavis.com.br 1 O que são Filtros Um filtro éum componente Web que reside no servidor Intercepta as requisições e respostas no seu caminho até o servlet e de

Leia mais

Desenvolvendo Aplicações Web com NetBeans

Desenvolvendo Aplicações Web com NetBeans Desenvolvendo Aplicações Web com NetBeans Aula 3 Cap. 4 Trabalhando com Banco de Dados Prof.: Marcelo Ferreira Ortega Introdução O trabalho com banco de dados utilizando o NetBeans se desenvolveu ao longo

Leia mais

ENTERPRISE JAVABEANS 3. Msc. Daniele Carvalho Oliveira

ENTERPRISE JAVABEANS 3. Msc. Daniele Carvalho Oliveira ENTERPRISE JAVABEANS 3 Msc. Daniele Carvalho Oliveira Apostila Servlets e JSP www.argonavis.com.br/cursos/java/j550/index.html INTRODUÇÃO Introdução Enterprise JavaBeans é um padrão de modelo de componentes

Leia mais

Programação Na Web. Servlets: Como usar as Servlets. Agenda. Template genérico para criar Servlets Servlet 2.4 API

Programação Na Web. Servlets: Como usar as Servlets. Agenda. Template genérico para criar Servlets Servlet 2.4 API Programação Na Web Servlets: Como usar as Servlets 1 António Gonçalves Agenda Template genérico para criar Servlets Servlet 2.4 API Exemplo: Hello World Output: Texto, HTML e hora local. Compilar uma Servlets

Leia mais

Prof. Roberto Desenvolvimento Web Avançado

Prof. Roberto Desenvolvimento Web Avançado Resposta exercício 1: Configuração arquivo web.xml helloservlet br.com.exercicios.helloservlet

Leia mais

Aula 4. Objetivos. Conteúdo dinâmico na internet.

Aula 4. Objetivos. Conteúdo dinâmico na internet. Aula 4 Objetivos Conteúdo dinâmico na internet. Para uma solicitação da Web mais simples, um navegador solicita um documento HTML e o servidor Web encontra o arquivo correspondente e devolve. Se o documento

Leia mais

Programação para a Internet. Prof. M.Sc. Sílvio Bacalá Jr sbacala@gmail.com www.facom.ufu.br/~bacala

Programação para a Internet. Prof. M.Sc. Sílvio Bacalá Jr sbacala@gmail.com www.facom.ufu.br/~bacala Programação para a Internet Prof. M.Sc. Sílvio Bacalá Jr sbacala@gmail.com www.facom.ufu.br/~bacala A plataforma WEB Baseada em HTTP (RFC 2068) Protocolo simples de transferência de arquivos Sem estado

Leia mais

Alfamídia Programação: Java Web

Alfamídia Programação: Java Web 1 Todos os direitos reservados para Alfamídia Prow AVISO DE RESPONSABILIDADE As informações contidas neste material de treinamento são distribuídas NO ESTADO EM QUE SE ENCONTRAM, sem qualquer garantia,

Leia mais

20/08/14 JAVA SERVLETS CONCEITOS CONTEÚDO ARQUITETURA DE UMA APLICAÇÃO WEB ARQUITETURA DA APLICAÇÃO WEB

20/08/14 JAVA SERVLETS CONCEITOS CONTEÚDO ARQUITETURA DE UMA APLICAÇÃO WEB ARQUITETURA DA APLICAÇÃO WEB CONTEÚDO TECNOLOGIA EM INFORMÁTICA PARA NEGÓCIOS JAVA CONCEITOS Prof. Dr. Henrique Dezani dezani@fatecriopreto.edu.br Arquitetura de uma aplicação Web HTTP (HyperText Transfer Protocol) Métodos HTTP GET

Leia mais

Arquiteturas de Aplicações Web. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Arquiteturas de Aplicações Web. Leonardo Gresta Paulino Murta leomurta@ic.uff.br Arquiteturas de Aplicações Web Leonardo Gresta Paulino Murta leomurta@ic.uff.br Aplicações Convencionais vs. Web Aplicações convencionais Escritas usando uma linguagem de programação (ex.: Java) Sites de

Leia mais

programação de páginas de conteúdo dinâmico

programação de páginas de conteúdo dinâmico Programação para a Internet II 1. Conceitos base de programação de páginas de conteúdo dinâmico Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt A internet tal como a vimos até este momento As nossas

Leia mais

World Wide Web e Aplicações

World Wide Web e Aplicações World Wide Web e Aplicações Módulo H O que é a WWW Permite a criação, manipulação e recuperação de informações Padrão de fato para navegação, publicação de informações e execução de transações na Internet

Leia mais

Instalando o IIS 7 no Windows Server 2008

Instalando o IIS 7 no Windows Server 2008 Goiânia, 16/09/2013 Aluno: Rafael Vitor Prof. Kelly Instalando o IIS 7 no Windows Server 2008 Objetivo Esse tutorial tem como objetivo demonstrar como instalar e configurar o IIS 7.0 no Windows Server

Leia mais

Instalando o IIS 7 no Windows Server 2008

Instalando o IIS 7 no Windows Server 2008 Goiânia, 16/09/2013 Aluno: Rafael Vitor Prof. Kelly Instalando o IIS 7 no Windows Server 2008 Objetivo Esse tutorial tem como objetivo demonstrar como instalar e configurar o IIS 7.0 no Windows Server

Leia mais

Curso de Aprendizado Industrial Desenvolvedor WEB

Curso de Aprendizado Industrial Desenvolvedor WEB Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos II Professor: Cheli dos S. Mendes da Costa Modelo Cliente- Servidor Modelo de Aplicação Cliente-servidor Os

Leia mais

WWW - World Wide Web

WWW - World Wide Web WWW World Wide Web WWW Cap. 9.1 WWW - World Wide Web Idéia básica do WWW: Estratégia de acesso a uma teia (WEB) de documentos referenciados (linked) em computadores na Internet (ou Rede TCP/IP privada)

Leia mais

Servlets e Applets, funcionamento e comparativo.

Servlets e Applets, funcionamento e comparativo. Servlets e Applets, funcionamento e comparativo. Airon Rabel Teixeira Rua Guarapuava Joinville SC airon@ymail.com Resumo: Este artigo explica de maneira breve o funcionamento de servlets e applets, mostrando

Leia mais

Desenvolvimento Web. Saymon Yury C. Silva Analista de Sistemas. http://www.saymonyury.com.br

Desenvolvimento Web. Saymon Yury C. Silva Analista de Sistemas. http://www.saymonyury.com.br Desenvolvimento Web Saymon Yury C. Silva Analista de Sistemas http://www.saymonyury.com.br Vantagens Informação em qualquer hora e lugar; Rápidos resultados; Portabilidade absoluta; Manutenção facilitada

Leia mais

Introdução ao IDE Netbeans (Programação Java)

Introdução ao IDE Netbeans (Programação Java) Universidade Federal do ABC (UFABC) Disciplina: Processamento da Informação (BC-0505) Assunto: Java e Netbeans Introdução ao IDE Netbeans (Programação Java) Conteúdo 1. Introdução... 1 1.1. Programas necessários...

Leia mais

Programação II Programação para a Web. Christopher Burrows

Programação II Programação para a Web. Christopher Burrows Programação II Programação para a Web Christopher Burrows Apache Tomcat O Apache Tomcat é um Servlet Container desenvolvido pela Apache Software Foundation. Implementa as tecnologias Java Servlets e Java

Leia mais

Integrando Eclipse e Websphere Application Server Community Edition

Integrando Eclipse e Websphere Application Server Community Edition 1 Integrando Eclipse e Websphere Application Server Community Edition Sobre o Autor Carlos Eduardo G. Tosin (carlos@tosin.com.br) é formado em Ciência da Computação pela PUC-PR, pós-graduado em Desenvolvimento

Leia mais

Universidade da Beira Interior

Universidade da Beira Interior Universidade da Beira Interior Relatório Apresentação Java Server Pages Adolfo Peixinho nº4067 Nuno Reis nº 3955 Índice O que é uma aplicação Web?... 3 Tecnologia Java EE... 4 Ciclo de Vida de uma Aplicação

Leia mais

Java Server Pages. Arquitectura de uma aplicação distribuída em Internet. Figura 1 Modelo 2

Java Server Pages. Arquitectura de uma aplicação distribuída em Internet. Figura 1 Modelo 2 Java Server Pages Arquitectura de uma aplicação distribuída em Internet Figura 1 Modelo 2 A implementação desta arquitectura, com um controlador que direcciona a execução de s, de Servlets e de JavaBeans,

Leia mais

Introdução. Servlet. Ciclo Vida. Servlet. Exemplos. Prof. Enzo Seraphim

Introdução. Servlet. Ciclo Vida. Servlet. Exemplos. Prof. Enzo Seraphim Introdução Servlet Ciclo Vida Exemplos Servlet Prof. Enzo Seraphim Visão Geral São objetos de uma subclasse de javax.servlet (javax.servlet.httpservlet). Possuem um ciclo de vida. Incluem em seu código,

Leia mais

Criação de uma aplicação usando Servlets

Criação de uma aplicação usando Servlets Robson Soares Silva (robsonsoares.silva@gmail.com) - graduado em Ciência da Computação pela UFMS, com pós-graduação em Análise de Sistemas pela UFMS e Mestrado em Sistemas Distribuídos pela UFRGS. Professor

Leia mais

Instalação do IBM SPSS Modeler Server Adapter

Instalação do IBM SPSS Modeler Server Adapter Instalação do IBM SPSS Modeler Server Adapter Índice Instalação do IBM SPSS Modeler Server Adapter............... 1 Sobre a Instalação do IBM SPSS Modeler Server Adapter................ 1 Requisitos de

Leia mais

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse Como criar um EJB Criando um projeto EJB com um cliente WEB no Eclipse Gabriel Novais Amorim Abril/2014 Este tutorial apresenta o passo a passo para se criar um projeto EJB no Eclipse com um cliente web

Leia mais

Programação WEB Introdução

Programação WEB Introdução Programação WEB Introdução Rafael Vieira Coelho IFRS Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul Campus Farroupilha rafael.coelho@farroupilha.ifrs.edu.br Roteiro 1) Conceitos

Leia mais

Professor: Macêdo Firmino Disciplina: Redes de Computadores II

Professor: Macêdo Firmino Disciplina: Redes de Computadores II Professor: Macêdo Firmino Disciplina: Redes de Computadores II Na aula de hoje iremos conhecermos e relembrarmos duas ferramentas do Windows, chamadas de ipconfig e nslookup. Além disso, iremos discutirmos

Leia mais

Criação de um novo projeto no Eclipse utilizando Maven

Criação de um novo projeto no Eclipse utilizando Maven 1. Faça o download da versão mais atual do Eclipse IDE for Java EE Developers em https://www.eclipse.org/downloads/. 2. No Eclipse, crie um novo projeto Maven, em File >> New >> Maven Project 3. Marque

Leia mais

Programando em PHP. Conceitos Básicos

Programando em PHP. Conceitos Básicos Programando em PHP www.guilhermepontes.eti.br lgapontes@gmail.com Conceitos Básicos Todo o escopo deste estudo estará voltado para a criação de sites com o uso dos diversos recursos de programação web

Leia mais

Processos (Threads,Virtualização e Migração de Código)

Processos (Threads,Virtualização e Migração de Código) Processos (Threads,Virtualização e Migração de Código) Roteiro Processos Threads Virtualização Migração de Código O que é um processo?! Processos são programas em execução. Processo Processo Processo tem

Leia mais

Publicação web. Será ativado um assistente de publicação que lhe guiará em todas as etapas a seguir apresentadas.

Publicação web. Será ativado um assistente de publicação que lhe guiará em todas as etapas a seguir apresentadas. Publicação web Pré requisitos: Lista de questões Formulário multimídia Este tutorial tem como objetivo, demonstrar de maneira ilustrativa, todos os passos e opções que devem ser seguidos para publicar

Leia mais

Versão 1.0 Janeiro de 2011. Xerox Phaser 3635MFP Plataforma de interface extensível

Versão 1.0 Janeiro de 2011. Xerox Phaser 3635MFP Plataforma de interface extensível Versão 1.0 Janeiro de 2011 Xerox Phaser 3635MFP 2011 Xerox Corporation. XEROX e XEROX e Design são marcas da Xerox Corporation nos Estados Unidos e/ou em outros países. São feitas alterações periodicamente

Leia mais

Criação de Servlets Name Directory Build WAR JSP/Servlet frameworks Launch URL Package Class name Generate header comments

Criação de Servlets Name Directory Build WAR JSP/Servlet frameworks Launch URL Package Class name Generate header comments Criação de Servlets 1. Crie um novo projeto através do Menu File New Project. 2. Acesse o Menu File New. 3. Na janela Object Gallery que surgirá, selecione a guia Web. 4. Escolha o ícone que corresponde

Leia mais

Moodle FTEC Versão 2.0 Manual do Usuário Acesse a área de LOGIN do site da FTEC www.ftec.com.br

Moodle FTEC Versão 2.0 Manual do Usuário Acesse a área de LOGIN do site da FTEC www.ftec.com.br Moodle FTEC Versão 2.0 Manual do Usuário Acesse a área de LOGIN do site da FTEC www.ftec.com.br Índice Como acessar o Moodle Editando seu PERFIL Editando o curso / disciplina no Moodle Incluindo Recursos

Leia mais

Autenticação e Autorização

Autenticação e Autorização Autenticação e Autorização Introdução A segurança em aplicações corporativas está relacionada a diversos aspectos, tais como: autenticação, autorização e auditoria. A autenticação identifica quem acessa

Leia mais

Unidade 14: Web Services Prof. Daniel Caetano

Unidade 14: Web Services Prof. Daniel Caetano Programação Servidor em Sistemas Web 1 Unidade 14: Web Services Prof. Daniel Caetano INTRODUÇÃO Na maior parte deste curso foram estudados serviços desenvolvidos com o uso de tecnologias Servlet. Entretato,

Leia mais

Também agradeço o apoio dado pela Editora Ciência Moderna para o desenvolvimento desta segunda edição.

Também agradeço o apoio dado pela Editora Ciência Moderna para o desenvolvimento desta segunda edição. EDSON GONÇALVES AGRADECIMENTOS Primeiramente gostaria de agradecer os inúmeros e-mails de leitores elogiando a primeira edição deste livro e também os que criticaram, pedindo mais detalhes a respeito de

Leia mais

Java Server Pages. O código HTML pode indicar o método de arranque do servlet gerado por um JSP : doget ou dopost.

Java Server Pages. O código HTML pode indicar o método de arranque do servlet gerado por um JSP : doget ou dopost. Java Server Pages O código HTML pode indicar o método de arranque do servlet gerado por um JSP : doget ou dopost. servlet: Exemplo em que o método get é invocado no arranque do

Leia mais

Servlets, JSPs e Java Beans

Servlets, JSPs e Java Beans Servlets, JSPs e Java Beans Prof. Pasteur Ottoni de Miranda Junior PUC Minas Disponível em www.pasteurjr.blogspot.com 1-Servlets 1.1 O que são Servlets são classes Java executadas em servidores web. Servem

Leia mais

Vamos iniciar a nossa exploração do HTTP baixando um arquivo em HTML simples - bastante pequeno, que não contém objetos incluídos.

Vamos iniciar a nossa exploração do HTTP baixando um arquivo em HTML simples - bastante pequeno, que não contém objetos incluídos. Wireshark Lab: HTTP Versão 1.1 2005 KUROSE, J.F & ROSS, K. W. Todos os direitos reservados 2008 BATISTA, O. M. N. Tradução e adaptação para Wireshark. Tendo molhado os nossos pés com o Wireshark no laboratório

Leia mais

Instalando o Internet Information Services no Windows XP

Instalando o Internet Information Services no Windows XP Internet Information Services - IIS Se você migrou recentemente do Windows 95 ou 98 para o novo sitema operacional da Microsoft Windows XP, e utilizava antes o Personal Web Server, deve ter notado que

Leia mais

Desenvolvimento WEB em JAVA. Palestrante: Lourival F. de Almeida Júnior

Desenvolvimento WEB em JAVA. Palestrante: Lourival F. de Almeida Júnior Desenvolvimento WEB em JAVA Palestrante: Lourival F. de Almeida Júnior Agenda Introdução Servlet Arquitetura de Software Velocity Struts Conclusão Referências Introdução (antes) Programador Produto Introdução

Leia mais

Nome N Série: Ferramentas

Nome N Série: Ferramentas Nome N Série: Ferramentas Competências: Identificar e utilizar técnicas de modelagem de dados; Habilidades: Utilizar ferramentas de apoio ao desenvolvimento de software; Bases Tecnológicas: Metodologias

Leia mais

Relatório do GPES. Descrição dos Programas e Plugins Utilizados. Programas Utilizados:

Relatório do GPES. Descrição dos Programas e Plugins Utilizados. Programas Utilizados: Relatório do GPES Relatório referente à instalação dos programas e plugins que estarão sendo utilizados durante o desenvolvimento dos exemplos e exercícios, sendo esses demonstrados nos próximos relatórios.

Leia mais

Sumário. 1. Instalação GVcollege... 4. 1.1. GVsetup... 4. 1.1.1. Instalação com Banco de dados... 6. 1.2. Configurações... 10

Sumário. 1. Instalação GVcollege... 4. 1.1. GVsetup... 4. 1.1.1. Instalação com Banco de dados... 6. 1.2. Configurações... 10 Sumário 1. Instalação GVcollege... 4 1.1. GVsetup... 4 1.1.1. Instalação com Banco de dados... 6 1.2. Configurações... 10 1.2.1. APS Licence Service... 11 1.2.2. APS Licence File... 11 1.2.3. DBXconfig...

Leia mais

J2EE. Exemplo completo Utilização Servlet. Instrutor HEngholmJr

J2EE. Exemplo completo Utilização Servlet. Instrutor HEngholmJr J2EE Exemplo completo Utilização Servlet Instrutor HEngholmJr Page 1 of 9 AT09 Exemplo complete Utilização Servlet Version 1.1 December 5, 2014 Indice 1. BASEADO NOS EXEMPLOS DE CÓDIGO DESTA APOSTILA,

Leia mais

JSP (Java Server Pages)

JSP (Java Server Pages) JSP (Java Server Pages) André Tavares da Silva andre.silva@udesc.br JSP A linguagem surgiu por volta de 1995. JSP foi inicialmente inventado por Anselm Baird-Smith durante um final de semana e depois Satish

Leia mais

Prova Específica Cargo Desenvolvimento

Prova Específica Cargo Desenvolvimento UNIVERSIDADE FEDERAL DO PIAUÍ Centro de Educação Aberta e a Distância CEAD/UFPI Rua Olavo Bilac 1148 - Centro CEP 64.280-001 Teresina PI Brasil Fones (86) 3215-4101/ 3221-6227 ; Internet: www.uapi.edu.br

Leia mais

INTERNET -- NAVEGAÇÃO

INTERNET -- NAVEGAÇÃO Página 1 INTRODUÇÃO Parte 1 O que é a Internet? A Internet é uma rede mundial de computadores, englobando redes menores distribuídas por vários países, estados e cidades. Ao contrário do que muitos pensam,

Leia mais

2 Requisitos Mínimos... 2. 1 Visão Geral 2 Instalando o SDK... da Sun 3 Instalando o Tomcat... do Apache Jakarta Project 4 Instalando o WebIntegrator

2 Requisitos Mínimos... 2. 1 Visão Geral 2 Instalando o SDK... da Sun 3 Instalando o Tomcat... do Apache Jakarta Project 4 Instalando o WebIntegrator Conteúdo I Conteúdo Part I Introdução 2 1 Apresentação... 2 2 Requisitos Mínimos... 2 Part II Instruções de Instalação 2 1 Visão Geral... 2 2 Instalando o SDK... da Sun 2 3 Instalando o Tomcat... do Apache

Leia mais

Servlets. João Carlos Pinheiro. Julho / 2005

Servlets. João Carlos Pinheiro. Julho / 2005 Servlets João Carlos Pinheiro Julho / 2005 1 Objetivos Apresentar Os benefícios de servlets A arquitetura de aplicativo servlet Como funciona um Servlet Os pacotes javax.servlet e javax.servlet.http Como

Leia mais

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação III Aula 02 Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação Técnica de comunicação padronizada para enviar instruções a um computador. Assim

Leia mais

Lógica de Programação

Lógica de Programação Lógica de Programação Unidade 4 Ambiente de desenvolvimento Java QI ESCOLAS E FACULDADES Curso Técnico em Informática SUMÁRIO A LINGUAGEM JAVA... 3 JVM, JRE, JDK... 3 BYTECODE... 3 PREPARANDO O AMBIENTE

Leia mais

Instalação, configuração e manual

Instalação, configuração e manual Cardápio Moura Instalação, configuração e manual Conteúdo Instalação... 4 Requisitos mínimos... 4 Windows 8... 5 Instalação do IIS no Windows 8... 5 Configuração do IIS no WINDOWS 8... 15 Windows 7...

Leia mais

Capítulo 7 O Gerenciador de Arquivos

Capítulo 7 O Gerenciador de Arquivos Capítulo 7 O Gerenciador de Arquivos Neste capítulo nós iremos examinar as características da interface do gerenciador de arquivos Konqueror. Através dele realizaremos as principais operações com arquivos

Leia mais

Manual de Utilização

Manual de Utilização Se ainda tiver dúvidas entre em contato com a equipe de atendimento: Por telefone: 0800 642 3090 Por e-mail atendimento@oisolucoespraempresas.com.br Introdução... 3 1. O que é o programa Oi Backup Empresarial?...

Leia mais

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas Linguagem de Programação JAVA Professora Michelle Nery Nomeclaturas Conteúdo Programático Nomeclaturas JDK JRE JEE JSE JME JVM Toolkits Swing AWT/SWT JDBC EJB JNI JSP Conteúdo Programático Nomenclatures

Leia mais

Publicação de uma pesquisa na web

Publicação de uma pesquisa na web Publicação de uma pesquisa na web Pré-requisitos: Lista das questões Formulário multimídia A publicação de pesquisas na web possibilita que pesquisas sejam respondidas de qualquer computador com acesso

Leia mais

Nota de Aula: Utilização da IDE Code::Blocks

Nota de Aula: Utilização da IDE Code::Blocks INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO CAMPUS SÃO LUÍS MONTE CASTELO DEPARTAMENTO ACADÊMICO DE INFORMÁTICA SISTEMAS DE INFORMAÇÃO DISCIPLINA: LINGUAGEM DE PROGRAMAÇÃO I PROFESSOR:

Leia mais

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC Arquitetura de Aplicações JSP/Web Padrão Arquitetural MVC Arquitetura de Aplicações JSP/Web Ao projetar uma aplicação Web, é importante considerála como sendo formada por três componentes lógicos: camada

Leia mais

Desenvolvendo Aplicações Web com Java

Desenvolvendo Aplicações Web com Java Desenvolvendo Aplicações Web com Java Agenda Fundamentos da servlet Como escrever uma servlet Como compilar uma servlet Como implantar uma servlet no servidor Como executá-la Requisição e Resposta HTTP

Leia mais

1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO

1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO 1 ÍNDICE 1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO... 3 1.1 REQUISITOS BASICOS DE SOFTWARE... 3 1.2 REQUISITOS BASICOS DE HARDWARE... 3 2 EXECUTANDO O INSTALADOR... 3 2.1 PASSO 01... 3 2.2 PASSO

Leia mais

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos Descrição Implemente nesta atividade de laboratório um programa em Java utilizando threads

Leia mais

Manual do Usuário. Sistema Financeiro e Caixa

Manual do Usuário. Sistema Financeiro e Caixa Manual do Usuário Sistema Financeiro e Caixa - Lançamento de receitas, despesas, gastos, depósitos. - Contas a pagar e receber. - Emissão de cheque e Autorização de pagamentos/recibos. - Controla um ou

Leia mais

Atualizando do Windows XP para o Windows 7

Atualizando do Windows XP para o Windows 7 Atualizando do Windows XP para o Windows 7 Atualizar o seu PC do Windows XP para o Windows 7 requer uma instalação personalizada, que não preserva seus programas, arquivos ou configurações. Às vezes, ela

Leia mais

O sistema operacional recomendado deve ser o Windows 2003, Windows 2000 ou Windows XP (nessa ordem de recomendação).

O sistema operacional recomendado deve ser o Windows 2003, Windows 2000 ou Windows XP (nessa ordem de recomendação). Módulo Nota Fiscal Eletrônica Sispetro Roteiro de Instalação Módulo Autenticador NFE Pré-Requisitos O sistema operacional recomendado deve ser o Windows 2003, Windows 2000 ou Windows XP (nessa ordem de

Leia mais

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva

Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva 1. O que são Serviços Web (Web Services)? Prática da Disciplina de Sistemas Distribuídos Serviços Web IFMA DAI Professor Mauro Lopes C. Silva A ideia central dos Web Services parte da antiga necessidade

Leia mais