10/7/2010 Programação para Internet Flávio de Oliveira Silva, M.Sc. [email protected] Programação para Internet Flávio de Oliveira Silva, M.Sc. 1 Objetivos Fornecer uma visão geral do funcionamento de sistemas na Web e os protocolos envolvidos Introduzir o paradigma da programação para a Internet Conceituar as arquiteturas de 2, 3 e n camadas, apresentando as diferenças e, principalmente, as vantagens que elas oferecem; Qualificar profissionais para o desenvolvimento de aplicações voltadas para a Internet/Intranet e que sejam disponibilizadas através de um browser Apresentar padrões de projeto para melhor estruturação dos sistemas na web; Apresentar as tecnologias mais empregadas no desenvolvimento de sistemas para web, inclusive com o uso de frameworks; Introduzir conceitos de segurança associados ao uso de sistemas na web. Programação para Internet Flávio de Oliveira Silva, M.Sc. 2 1 10/7/2010 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências. O desenvolvimento de projetos em WEB. Linguagens e ambientes de Concepção de projeto de sistemas multimídia interativos na WEB. Projeto gráfico avançado para WEB. Inovações de projeto e utilização de ferramentas. Famílias de linguagens para produção em WEB. Animação gráfica para WEB. Principais conceitos de programação dinâmica para a Web Web. Desenvolvimento de aplicação dinâmica. Aplicações multi-camadas. Aplicações WEB server side e client side. Programação para Internet Flávio de Oliveira Silva, M.Sc. 3 Programa Introdução aos sistemas Web Aplicações WEB Internet: um resumo histórico O ambiente web: o protocolo HTTP Sistemas Estáticos x Dinâmicos Tecnologias para desenvolvimento de sistemas dinâmicos na Web: CGI,ASP, Servlets, JSP, PHP, outras Plataforma Java Java EE Camadas em Aplicações Distribuídas Arquitetura JAVA EE Web Contêiner Programação para Internet Flávio de Oliveira Silva, M.Sc. 4 2 10/7/2010 Programa Servlets Aplicações Web Utilizando Servlets Apache Tomcat Arquitetura MVC para WEB Operações e API Java Estrutura Aplicação Web Armazenamento e Recuperação de Informações Cokies, Filtros e Listeners JavaServer Pages Scripts e Expressões Objetos Implícitos JSP Expression Language Diretivas, Ações Padrão e Java Beans JSP Standard Tag Library Programação para Internet Flávio de Oliveira Silva, M.Sc. 5 Programa Struts Principais Componentes (Struts2) Setup Aplicação Actions Validacao Interceptors JavaScript e AJAX Realização e apresentação de um projeto para Web Programação para Internet Flávio de Oliveira Silva, M.Sc. 6 3 10/7/2010 Bibliografia Básica Básica Marty Hall e Larry Brown; Core Servlets e JavaServer Pages - Vol. 1 – Tecnologias Core, ISBN 8573934328, 632 p, 1a ed, Ciência Moderna, 2005 Mark Szolkowski e Nick Todd. Javaserver Pages p, g - O Guia do Desenvolvedor, 648 p ISBN 85-352-1324-4, Campus Programação para Internet Flávio de Oliveira Silva, M.Sc. 7 Bibliografia Complementar DEITEL, H. M.; DEITEL P. Ajax, Rich Internet applications e desenvolvimento Web para programadores. São Paulo : Prentice Hall, 2008. GONÇALVES, E. Desenvolvendo aplicações Web com JSP, Servlets, JavaServer Faces, Hibernate, EJB 3 Persistence e AJAX. Rio de Janeiro : Ciência Moderna, 2007. HORSTMANN, C.; CONELL, G. Core Java 2: Advanced Features. 7. ed. Prentice Hall, 2006. v. 2. ALUR, DEEPAK;CRUPI, JOHN;MALKS, DAN. Core J2EE Patterns. Campus-Elsevier. 2004. ARNOLD, K.; GOSLING, J. The java programming language. 4. ed. Addison-Wesley, 2006. BAUER , CHRISTIAN; KING, GAVIN. Hibernate em Ação. Ciência Moderna, 2005. ISBN: 8573934042. BAUER , CHRISTIAN; KING, GAVIN. Java Persistance com Hibernate. Ciência Moderna, 2007. ISBN: 9788573936148. DEITEL, H. M.; DEITEL P. J. Java: como programar. 6. ed. Pearson, 2005. FALKNER, J.; JONES, K. W. Servlets and JavaServer Pages: The J2EE Technology Web Tier. Pearson Education, 2004. GALBRAITH, B.; HAAN, P.; LAVANDOWSKA, L.; PANDURANGA, S. N; PERRUMAL, K; SGARBI, E.K. Beginning Jsp 2.0: Build Web Applications Using Jsp, Java, and Struts. Wrox Press, 2003 HUSTED, T.; DUMOULIN, C.; FRANCISCUS, G. Struts em Ação. Ciência Moderna, 2004. METSKER , S. J. Padrões de Projeto em Java. Bookman.2004. ISBN: 8536304111 WELLING, Luke & THOMSON, Laura. PHP e MySQL: desenvolvimento web. Rio de Janeiro: Campus, 2005. Programação para Internet Flávio de Oliveira Silva, M.Sc. 8 4 10/7/2010 Avaliação Provas – Teóricas Primeira Prova – 25 Pontos Segunda Prova – 25 Pontos Observações Avaliações sem consulta Trabalho Interdisciplinar Laboratório – 10 pontos Final – 40 pontos Programação para Internet Flávio de Oliveira Silva, M.Sc. 9 INTERNET Grande conjunto de redes de computadores interligadas pelo mundo. Começou como uma rede interligando Universidades no E.U.A A partir de 1993 a Internet começou a ser explorada comercialmente. Não existem nenhum gerenciamento centralizado, cada usuário ou empresa administra sua rede e esta se conectada à INTERNET. Comunicação entre as várias redes segue um protocolo padrão(TCP/IP) Backbones dão suporte principal à INTERNET. Backbones são linhas alta capacidade de tráfego de informação. Sustentados por governos e grandes empresas Programação para Internet Flávio de Oliveira Silva, M.Sc. 10 5 10/7/2010 INTERNET – COMO FUNCIONA Cada servidor (Host) possui um endereço único na Internet. Este endereço é conhecido como IP. Ex: 200.17.210.65 Os IP’s são distribuídos pelo Network Information Center (NIC) e no Brasil são repassados pela FAPESP Cada endereço acima pode ser escrito com letras da seguinte forma: www.ufu.br; www.fagen.ufu.br; www.uol.com.br; ftp.microsoft.com.br; www.facic.ufu.br Ao solicitar alguma informação o endereço de destino deve ser informado 200.17.210.65 Programação para Internet Flávio de Oliveira Silva, M.Sc. 11 INTERNET – SERVIÇOS Servidores de INTERNET podem oferecer vários tipos de serviços (Mais utilizados - WEB; E-MAIL; FTP) WEB (WWW – World Wide Web) P i i l serviço. i P lti ídi (Texto; (T t Imagem; I S Principal Possuii recursos multimídia Som e Vídeo) Informações estão contidas em sites Em um site é possível saltar de um ponto para outro utilizando “hiperlinks” Cada site possui seu URL (Uniform Resource Locator, localizador uniforme de recursos) Ex.: http://www.ufu.br; g http://ww.uol.com.br; http://facic.ufu.br http://www.fagen.ufu.br; Endereços (domínios) são criados de acordo com o tipo de utlização: .com (comércio); .gov (governo); .edu (universidades – normalmente as brasileiras não utilizam); .mil (militar); .org (organizações sem fins lucrativos) Endereços terminam com nacionalidade: brasil (br); japão (jp); portugal (pt); E.U.A (não possuem); Programação para Internet Flávio de Oliveira Silva, M.Sc. 12 6 10/7/2010 Internet A Internet não é uma rede Conjunto de diferentes redes interligadas que tili am um m mesmo conj nto de protocolos a fim de utilizam conjunto oferecer serviços comuns Serviços FTP E-mail WEB Programação para Internet Flávio de Oliveira Silva, M.Sc. 13 Protocolo HTTP Protocolo utilizando na Web Realiza o transporte de conteudo entre o navegador ser idor Web e o servidor Protocolo descreve o pedido (request) e a resposta (response) Seu entendimento é um requisito na programação para a Internet Programação para Internet Flávio de Oliveira Silva, M.Sc. 14 7 10/7/2010 HTTP Requests Estrutura Geral Um pedido Http contém a estrutura abaixo ESTRUTURA EXEMPLO Metodo URI Versao Header Geral Header Pedido Header Conteudo Conteudo Método – Indica comando a ser enviado para o servidor. Valores possíveis (HTTP 1.1): GET, POST, HEAD, PUT, LINK, UNLINK, DELETE, OPTIONS Nem todos os comandos podem ser respondidos por um servidor web URI (Uniform Resource Indication) – Descrição única do conteúdo na Web Versão – Versão do protocolo utilizada POST / HTTP/1.1 Connection: Keep-Alive Host: www.site.com.br Content-type: txt/html query=book HTTT/1.1 ou HTTP/1.0 Headers – Informações adicionais que são enviadas após o comando Conteudo – Informação que pode ser enviada pelo cliente e é recebida pelo servidor Programação para Internet 15 Flávio de Oliveira Silva, M.Sc. HTTP Response Estrutura Geral A resposta contém a estrutura abaixo ESTRUTURA EXEMPLO Versao Status Resposta HTTP/1.1 200 OK H d G l Header Geral Date: Mon, 06 Feb 2010 20:54:26 GMT Server: Apache/1.3.6 (Unix) Content-length: 327 Content-type: text/html <html> <head> <title>Página Hello</title> </head> <body> <h1>Hello Web World!</h1> </body> </html> Header Resposta Header Conteúdo Conteúdo Headers – Informações adicionais enviadas juntamente com a resposta Conteúdo – Informação enviada pelo servidor Programação para Internet Flávio de Oliveira Silva, M.Sc. 16 8 10/7/2010 HTTP Request e Response Exemplos Request GET / HTTP/1.1 Host: www.ufu.br User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Response HTTP/1.1 200 OK Date: Wed, 01 Sep 2010 10:48:25 GMT Server: Apache/2.2.10 (Linux/SUSE) X-Powered-By: PHP/5.2.9 Expires: Sun, 19 Nov 1978 05:00:00 GMT Last-Modified: Wed, 01 Sep 2010 10:48:25 GMT Cache-Control: store, no-cache, must-revalidate, post-check=0, pre-check=0 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html; charset=utf-8 <html> </html> Programação para Internet Flávio de Oliveira Silva, M.Sc. 17 HTTP Request Métodos Principais métodos utilizado no protocolo HTTP MÉTODO GET HEAD POST PUT DELETE DESCRIÇÃO Permite obter um conteúdo em um servidor. O conteúdo pode ser um arquivo estático ou um resultado produzido de forma dinâmica Obtém apenas informações (cabeçalho) associada ao conteúdo, sem no entanto, devolver este conteúdo Permite o envio de informações para o servidor, por exemplo, ao preencher um formulário na Web. Permite inserir ou alterar um conteúdo existente em um servidor Utilizado para remover um conteúdo no servidor Programação para Internet Flávio de Oliveira Silva, M.Sc. 18 9 10/7/2010 HTTP Response Server Codes Linha inicial da resposta do servidor contém um código de status com três digitos Alguns códigos são tratados diretamente pelo browser enquanto outros são mostrados no cliente FAIXA DO CÓDIGO 100‐199 200‐299 300‐399 400‐499 500 599 500‐599 SIGNIFICADO Informação Pedido atendido com sucesso Pedido redirecionado Pedido incompleto Erros no servidor no servidor Programação para Internet Flávio de Oliveira Silva, M.Sc. 19 HTTP Response Server Codes - Exemplos Programação para Internet Flávio de Oliveira Silva, M.Sc. 20 10 10/7/2010 HTTP Headers Programação para Internet Flávio de Oliveira Silva, M.Sc. 21 HTTP Tipos de Conteúdo Programação para Internet Flávio de Oliveira Silva, M.Sc. 22 11 10/7/2010 HTTP Cokies Programação para Internet Flávio de Oliveira Silva, M.Sc. 23 HTML Programação para Internet Flávio de Oliveira Silva, M.Sc. 24 12 10/7/2010 CSS Programação para Internet Flávio de Oliveira Silva, M.Sc. 25 JavaScript Programação para Internet Flávio de Oliveira Silva, M.Sc. 26 13 10/7/2010 Java – Plataformas A tecnologia Java está dividida em plataformas. Cada plataforma oferece um conjunto de funcionalidades para o desenvolvimento de diferentes tipos de aplicações Existem três plataformas baseadas na tecnologia Java Java ME – Java Platform, Micro Edition Java SE – Java Platform, Standard Edition Java EE – Java Platform, Enterprise Edition Programação para Internet Flávio de Oliveira Silva, M.Sc. 27 Java – Plataformas Java ME – Java Platform, Micro Edition Java SE – Java Platform, Standard Edition Fornece um ambiente específico para a criação de aplicações destinadas a dispositivos como telefones celulares, pagers, PDAs, Smartphones; etc. Destinado a criação de aplicações para dispositivos móveis Fornece um ambiente completo para o desenvolvimento de aplicações em destktops (clientes) e também servidores Base da tecnologia Java. Fornece a máquina virtual (JRE – Java Runtime Environment) Java EE – Java Platform, Enterprise Edition Define um padrão para o desenvolvimento de aplicações baseadas em componentes e estruturadas em várias camadas Seu foco é o desenvolvimento de aplicações do lado servidor, cujo objetivo é prover funcionalidades para aplicações distribuídas Programação para Internet Flávio de Oliveira Silva, M.Sc. 28 14 10/7/2010 Java – Java EE O padrão Java EE define um grupo da APIs( Application Programming Interfaces) que pode ser combinado para a criação de aplicações distribuídas baseadas ou não na Web produto mas uma especificação. especificação O Java EE não é um produto, A especificação é criada pela JCP (Java Community Process) Esta comunidade é responsável pelo desenvolvimento da tecnologia Java e é aberta a qualquer desenvolver ou empresa interessado na tecnologia Esta especificação é então implementada pelas mais variadas companhias como, por exemplo: SUN IBM ORACLE BEA JBOSS Programação para Internet Flávio de Oliveira Silva, M.Sc. 29 Java – Java EE O resultado desta implementação é um Servidor de Aplicações (Application Server) Exemplos de servidores de aplicações compatíveis com o padrão J2EE W b h IBM – Websphere JBoss – Jboss Oracle - Oracle Application Server 10g SAP AG - Web Application Server Sun - Sun Java System Application Server Sybase – EAServer Macromedia - JRun Server Borland - Enterprise Server BEA – WebLogic Fujitsu Siemens Computers – BeanTransactions Os servidores implementam uma das especificações Java EE (1.2; 1.3; 1.4 , 5 e 6) Programação para Internet Flávio de Oliveira Silva, M.Sc. 30 15 10/7/2010 Aplicações Distribuídas Camadas O modelo para desenvolvimento de aplicações utilizando o Java EE é baseado em uma arquitetura multicamadas Cada camada contém componentes de acordo com a sua função. Basicamente existem as seguintes camadas: Cliente (Client Tier) Camada Web (Web Tier) Camada de Negócios (Bussiness Tier) Camada Enterprise Information System (EIS) A camada Web Tier estará presente quando a aplicação for baseada na WEB ou seja, o cliente é um navegador (browser) A arquitetura acima é conhecida como três camadas (3-tier) visto que existem 3 máquinas envolvidas: O cliente; O servidor de aplicações Java EE O servidor de banco de dados Programação para Internet Flávio de Oliveira Silva, M.Sc. 31 Aplicações Distribuídas Camadas Cliente (Client Tier) Camada Web (Web Tier) Componentes que são executados em um servidor Java EE Basicamente tratam da apresentação do conteúdo na WEB Esta camada é responsável por gerar e enviar para o cliente o conteúdo gerado de forma dinâmica Camada de Negócios (Bussiness Tier) Componentes que são executados na máquina do cliente. Podem ser executados em um Browser ou uma aplicação desktop baseada no Java SE Contém os objetos relacionados ao negócio e suas regras O servidor de aplicações oferece recursos como controle de transações, de sessões para os objetos desta camada. Pode ser implementa com EJB (Enterprise JavaBeans) Camada Enterprise Information System (EIS) Consiste dos recursos que serão utilizados pela aplicação. Inclui gerenciadores de banco de dados (DBMS) e aplicações legadas, baseadas em mainframes, por exemplo. Esta camada é executada fora do servidor J2EE e a arquitetura J2EE possui uma interface para esta camada, que pode ser feita, por exemplo, através de conectores Programação para Internet Flávio de Oliveira Silva, M.Sc. 32 16 10/7/2010 Aplicações Distribuídas Camadas – Arquitetura Java EE Visão Geral das Camadas Programação para Internet Flávio de Oliveira Silva, M.Sc. 33 Aplicações Distribuídas Arquitetura Java EE Comunicação entre as várias camadas Programação para Internet Flávio de Oliveira Silva, M.Sc. 34 17 10/7/2010 Aplicações Distribuídas Arquitetura Java EE Camada Web (Web Tier) JavaBeans; JSP Pages; Servlets Programação para Internet Flávio de Oliveira Silva, M.Sc. 35 Aplicações Distribuídas Arquitetura Java EE Camada de Negócios (Business Tier) Baseada em EJB Programação para Internet Flávio de Oliveira Silva, M.Sc. 36 18 10/7/2010 Java EE contêineres O contêiner fornece a infra-estrutura para a execução de um componente específico da plataforma O servidor J2EE fornece dois tipos básicos de contêineres: têi WEB contêiner EJB contêiner Programação para Internet Flávio de Oliveira Silva, M.Sc. 37 Java EE contêineres Web Contêiner Executa Servlets e páginas JSP Servlets São classes Java que podem ser chamados dinamicamente e que podem executar alguma a gu a funcionalidade. u c o a dade Estes programas podem ser executado em um Servidor Web ou em um contêiner para Servlets Normalmente estão ligados a geração de conteúdo para browsers. O Servlet implementa a interface Servlet e possui um funcionamento pré-definido Os Servlets recebem e respondem a requisições feitas normalmente através do protocolo HTTP JavaServer Pages (JSP) Consistem de uma maneira p para criar conteúdo dinâmico p para a Web Seu objetivo é criar uma separação entre a apresentação e os dados que estarão presentes em uma página no navegador. Normalmente a página JSP é um modelo que contém tanto o conteúdo estático, como a indicação de como o conteúdo dinâmico será gerado Programação para Internet Flávio de Oliveira Silva, M.Sc. 38 19 10/7/2010 Java EE contêineres EJB Contêiner Realiza a criação, destruição e gerenciamento dos EJBs (Enterprise JavaBeans) Enterprise JavaBeans Além disso o contêiner de EJBs é responsável pelo: Enterprise JavaBeans é um padrão para o desenvolvimento de componentes, utilizando Java, podem se ser implantados (deployed) em qua qualquer u a do a linguagem guage Ja a, que pode p a ados (dep oyed) e que servidor J2EE. Em sua essência são classes Java. Existem vários tipos de EJBs cada um com características próprias Gerenciamento Distribuído de Transações Implementação da Segurança Gerenciamento de Recursos Persistência dos EJBs Acesso Remoto Transparência de Localização Monitoramento Todas as funções são realizadas de forma transparente pelo servidor de aplicações. O EJB contêiner é aquele que realmente caracteriza um servidor de aplicações baseado na especificação Java EE Programação para Internet Flávio de Oliveira Silva, M.Sc. 39 Java EE contêineres EJB Contêiner Existem vários tipos de EJBs cada um com características próprias O seu uso depende das características da aplicação, de suas vantagens e desvantagens particulares TIPO SUB TIPO SUB‐TIPO DESCRIÇÃO Stateless (sem estado) Componentes que simplesmente realizam a chamada de métodos. Utilizado para a implementação das regras de negócio Stateful (com estado) Componentes com estado funcionam como um proxy para aplicações do cliente. Estes componentes mantém seu estado entre as chamadas de Métodos Session Componentes sem estado que estão ligados ao Java Message Service (JMS), utilizado para chamada assíncrona de métodos Message Component Managed (CMP) Componentes com estados que fazem o encapsulamento de uma entidade de um banco de dados. O servidor de aplicações gera o entidade de um banco de dados O servidor de aplicações gera o código para conectar estes objetos a um banco de dados específico Bean Managed (BMP) Componentes com estados que fazem o encapsulamento de entidades complexas de um banco de dados. Neste caso o desenvolvedor deve escreve o código necessário para acessar o objeto no banco de dados Entity Programação para Internet Flávio de Oliveira Silva, M.Sc. 40 20 10/7/2010 Aplicações WEB Em sua concepção a WEB é um meio para a troca de documentos HTML entre diferentes pontos, utilizando a infra-estrutura oferecida pela Internet. A medida que a WEB se popularizou novas aplicações começaram a surgir Em muitos sites da WEB o conteúdo não poderia ser constituído de código HTML estático, mas precisaria ser alterado, muitas das vezes a cada minuto. A partir desta necessidade começaram a surgir meios para se conseguir a produção de conteúdos dinâmicos A primeira de conteúdos dinâmicos do i i proposta t para a criação i ã d t úd di â i ffoii através t é d CGI (Common Gateway Interface) Este mecanismo permite a execução de um código, escrito em C ou Perl, através do navegador Programação para Internet Flávio de Oliveira Silva, M.Sc. 41 Aplicações WEB Usando CGI Uma aplicação CGI pode ser invocada da seguinte forma: http://www.server.com/cgi-bin/MyExecutable?name1=value1&name2=value2 Aplicação CGI, porém apresenta algumas desvantagens: Criada a partir de linguagens procedimentais Instabilidade em uma aplicação CGI pode impedir até a operação do servidor Problemas de Escalabilidade. A cada chamada uma nova instância da aplicação é criada, criando um novo thread e consumindo recursos do servidor. Outro aspecto é que através de uma aplicação CGI não é possível agregar recursos na aplicação como: estabelecimento de sessão; autenticação e ç autorização. Neste contexto e como uma resposta a estas desvantagens, na plataforma Java foi desenvolvido o conceito dos Servlets Programação para Internet Flávio de Oliveira Silva, M.Sc. 42 21 10/7/2010 Aplicações WEB Usando Servlets São programas Java que podem ser chamados dinamicamente e que podem executar alguma funcionalidade. Este programas podem ser executado em um Servidor Web ou em um contêiner para Servlets Todos os Servlets implementam a interface Servlet O servlet possui um ciclo de vida padrão e desta forma os métodos são chamados de uma maneira pré-determinada. init() service() destroy() Programação para Internet Flávio de Oliveira Silva, M.Sc. 43 Apache Tomcat O apache Tomcat basicamente é um contêiner de Servlets O Tomcat é a implementação de referência das especificações para Servlets e JavaServer Pages Estas especificações são desenvolvidas pela Sun através da JCP (Java Community Process). A JCP é uma entidade aberta que possui como membros pessoas e empresas envolvidas com a tecnologia Java. A seguintes tabela mostra as versões das especificações e as respectivas versões do Tomcat Especificações Servlets / JSP Versão do Apache Versão do Apache TOMCAT 2.5/2.1 2.4/2.0 2.3/1.2 2.2/1.1 6.0.14 5.5.25 4.1.36 3.3.2 Programação para Internet Flávio de Oliveira Silva, M.Sc. 44 22 10/7/2010 Tomcat – Estrutura de Pastas Programação para Internet Flávio de Oliveira Silva, M.Sc. 45 Arquitetura MVC para WEB No caso da abordagem WEB existem algumas particularidades, então o padrão ficou conhecido como “Model 2” Esta particularidade acontece pois o browser não é necessariamente a parte VIEW do modelo pois o mesmo simplesmente mostra um código HTML Desta forma o código mostrado no browser está desacoplado, pois precisa ser traduzido para o HMTL antes de ser visualizado. Programação para Internet Flávio de Oliveira Silva, M.Sc. 46 23 10/7/2010 Model 1 x Model 2 O modelo MVC (Model-View-Controller) é um conceito para o desenvolvimento de aplicações Neste modelo há uma separação entre as responsabilidades. Model 1 Primeiro modelo disponível para o desenvolvimento de aplicações WEB Elementos: Browser; Servlets/Páginas JSP e um Banco de dados Neste modelo pode ocorrer duplicação de código As regras de negócio e a Apresentação dos dados estão combinadas em um único elemento, dificultando modificações e manutenções Programação para Internet Flávio de Oliveira Silva, M.Sc. 47 Model 1 x Model 2 Model 2 Segundo modelo disponível para o desenvolvimento de aplicações WEB Baseado no modelo MVC (Model – View – Controller) El t B C t ll (Servlets); (S l t ) View(Páginas Vi (Pá i JSP) M d l(O t Elementos: Browser; Controller JSP); Model(Outras classes) e um Banco de dados Elementos separados e responsabilidades bem definidas Facilita a reutilização de código e futuras modificações Permite o uso de múltiplos Banco de Dados e Clientes Programação para Internet Flávio de Oliveira Silva, M.Sc. 48 24 10/7/2010 Arquitetura MODEL 2 O usuário chama o controller (servlet) O servlet instancia um ou mais Beans para realizar o trabalho O servlet adiciona os Beans para uma ou mais JavaServer Pages e envia o controle para o JSP (VIEW) Este finalmente extrai os Beans e mostra o resultado Programação para Internet Flávio de Oliveira Silva, M.Sc. 49 Servlets - Operações Métodos são chamados durante o ciclo de vida de um Servlet: init() service() Chamado na inicialização do Servlet uma única vez, antes que o mesmo possa responder às requisições feitas pelos clientes. Chamado a fim de que o Servlet possa responder a uma solicitação. Em aplicações HTTP este método verifica se o cliente deseja uma requisição (GET) ou resposta (POST) e encaminha o fluxo, conforme cada caso, para o métodos que tratarão cada situação Uma mesma instância de um Servlet pode ser utilizada por vários clientes, permitindo desta forma a economia de recursos do servidor. servidor destroy() Chamado uma única vez, antes que o objeto seja destruído. Responsável pela liberação dos recursos alocados pelo método init() Programação para Internet Flávio de Oliveira Silva, M.Sc. 50 25 10/7/2010 Servlets – API Java Os Servlets são definidos como uma interface na API Java, sendo assim uma classe qualquer deve implementar esta interface a fim de que possa ser considerando um Servlet Esta interface é definida no pacote javax.servlet Métodos definidos pela interface: void destroy() ServletConfig getServletConfig() Retorna um objeto ServeletConfig que contém informações de inicialização e de configuração de um Servlet java.lang.String getServletInfo() void init(ServletConfig config) void service(ServletRequest req, ServletResponse res) Responsável pela finalização do Servlet e liberação de recursos Retorna informações sobre o Servlet como autor,versão; etc Responsável pela inicialização e alocação de recursos Chamado pelo contêiner a fim de que o Servlet possa responder a uma requisição de serviço. Esta interface é implementada pela classes: javax.servlet.GenericServlet; javax.servlet.http.HttpServlet Programação para Internet Flávio de Oliveira Silva, M.Sc. 51 HttpServlet Normalmente os Servlets a fim de serem executados sobre o protocolo HTTP, o mesmo utilizado pela WEB O protocolo HTTP define as seguintes operações: GET HEAD PUT POST DELETE Requisita uma página para leitura Requisita o cabeçalho de uma página WEB Envia uma página a fim de ser escrita em servidor WEB Envia informações que são adicionadas a uma página WEB Remove uma página WEB A classe HttpServlet uma classe abstrata que cria um Servlet próprio para uso com a Web. Esta classe está definida no seguinte pacote: javax.servlet.http Programação para Internet Flávio de Oliveira Silva, M.Sc. 52 26 10/7/2010 HttpServlet A classe HpptServlet define os métodos para que o Servlet possa ser utilizado juntamente com o protocolo HTTP Normalmente uma classe deverá especializar os métodos definidos nesta classe a fim de imprimir o comportamento desejado pelo Servlet Métodos principais doGet(HttpServletRequest req, HttpServletResponse resp) doHead(HttpServletRequest req, HttpServletResponse resp) doPost(HttpServletRequest req, HttpServletResponse resp) ( p q q, HttpServletResponse p p p) doPut(HttpServletRequest req, resp) doDelete(HttpServletRequest req, HttpServletResponse resp) init; destroy; getServletInfo Utilizado em requisições do tipo HTTP GET Utilizado em requisições do tipo HTTP HEAD Utilizado em requisições do tipo HTTP POST Utilizado em requisições do tipo HTTP PUT Utilizado em requisições do tipo HTTP DELETE Programação para Internet Flávio de Oliveira Silva, M.Sc. 53 HttpServlet Normalmente os métodos Service, doOptions e doTrace não são especializados Os método doGet() e doPost() são os métodos usualmente especializados As informações utilizadas na requisição e na resposta estão encapsuladas em HttpServletRequest e HttpServletResponse Programação para Internet Flávio de Oliveira Silva, M.Sc. 54 27 10/7/2010 HttpServlet Além dos métodos descritos anteriormente que devem ser especializados existe outros métodos muito utilizados em um Servlet public ServletContext getServletContext() public ServletConfig getServletConfig() Permite o obter um objeto que representa o contêiner do Servlet Recupera um objeto ServletConfig. Este objeto contém a configuração do Servlet que contém parâmetros de inicialização do Servlet, definidos no arquivo WEB.XML public void log(java.lang.String msg) Escreve uma mensagem no arquivo de log do contêiner de Servlets O nome do Servlet é adicionado ao início da mensagem (msg) Programação para Internet Flávio de Oliveira Silva, M.Sc. 55 HttpServletRequest A classe HpptServletRequest representa o pedido (request) que é enviado do navegador(cliente) para o servidor (contêiner de Servlets) Todos os parâmetros que são passados do cliente para o servidor estão encapsulados neste objeto Este objeto é instanciado pelo contêiner e entregue para uso do servlet Os principais métodos da classe HttpServlet sempre recebem um objeto HttpServletRequest Programação para Internet Flávio de Oliveira Silva, M.Sc. 56 28 10/7/2010 HttpServletRequest Métodos Principais public java.lang.String getParameter(java.lang.String name) Este método permite o acesso a parâmetros que são recebidos do cliente. Cada parâmetro possui um nome (name) que deve ser informado O nome está definido em um Form Html ou então na URL de acesso ao servlet Ex: String sCmd = (String) request.getParameter("cmd"); public HttpSession getSession() Retorna uma sessão (objeto HttpSession) associado ao pedido e caso a mesma não exista uma nova sessão é criada Através da sessão é possível compartilhar objetos entre vários execuções pedido/resposta de um servlet Ex: HttpSession session = request.getSession(); p p g ( public HttpSession getSession(boolean create)) Retorna uma sessão (objeto HttpSession) associado ao pedido Uma nova sessão é criada somente se o parâmetro create igual a true Programação para Internet Flávio de Oliveira Silva, M.Sc. 57 HttpServletResponse A classe HpptServletRequest representa a reposta(response) que é enviada do servidor (contêiner de Servlets) para o navegador(cliente) Este objeto é instanciado pelo contêiner e normalmente é alterado pelo servlet a fim de produzir o resultado desejado Os principais métodos da classe HttpServlet sempre recebem um objeto HttpServletResponse Basicamente o servlet consiste em alterar este objeto conforme o necessário Este objeto contém métodos que permite o acesso ao cabeçalho (headers) HTTP e cookies bem como ao conteúdo da resposta Programação para Internet Flávio de Oliveira Silva, M.Sc. 58 29 10/7/2010 HttpServletResponse Métodos Principais public void setContentType(java.lang.String type) bli java.io.PrintWriter j i P i tW it getWriter() tW it () throws th j i IOE ti public java.io.IOException Permite definir o tipo de resposta que será devolvida ao navegador O tipo mais comum é “text/hmtl” Este método obtém a stream (sequência de dados) que será utilizada na resposta Neste caso a stream representa uma sequência de carateres, como é um caso do conteúdo do tipo “text/html” public ServletOutputStream getOutputStream() throws java.io.IOException Este método obtém a stream (sequência de dados) que será utilizada na resposta Neste caso a stream representa uma sequência de bytes (binária), como é um caso do conteúdo do tipo MIME (Multipurpose Internet Mail Extensions) como por exemplo: “application/zip”; application/pdf ou “image/jpeg” Programação para Internet Flávio de Oliveira Silva, M.Sc. 59 Servet Básico – Exemplo 1 package org.lp2.servlet; import java.io.*; import javax.servlet.*; public class HelloWorldServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOE ti { IOException //Indica que o conteudo da reposta é página html response.setContentType("text/html"); //Obtém a stream de caracteres da saída PrintWriter out = response.getWriter(); //Conteúdo básico de uma página HTML out.println("<html>"); out.println("<head>"); out.println("<body bgcolor=\"blue\">"); out.println("<h1>"); t i tl (" h1 ") out.println("HELLO SERVLET WORLD!"); out.println("</h1>"); out.println("</body>"); out.println("</html>"); } } Programação para Internet Flávio de Oliveira Silva, M.Sc. 60 30 10/7/2010 Servet Básico – Exemplo 2 Passagem de Parâmetros package org.lp2.servlet; import java.io.*; import javax.servlet.*; public class ParameterServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOE ti { IOException //Obém o valor do parâmetro String sCmd = (String) request.getParameter("cmd"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body bgcolor=\"blue\">"); out.println("<h1>"); out.println("Uso de Parâmetros em um Servlet!"); out.println("COMANDO t i tl ("COMANDO = "+sCmd); " C d) out.println("</h1>"); out.println("O nome do comando acima foi passado como parâmetro."); out.println("</body>"); out.println("</html>"); } } Programação para Internet Flávio de Oliveira Silva, M.Sc. 61 Servet Básico – Exemplo 3 Passagem de Parâmetros – Login package org.lp2.servlet; import java.io.*; import java.util.HashMap; import javax.servlet.*; i t javax.servlet.http.*; j l t htt * import public class LoginServlet extends HttpServlet { //Neste caso tanto doGet como doPost executarão as memas operações protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { doGet(arg0,arg1); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Para definir //P d fi i os usuários á i e suas senha h será á criado i d um HashMap H hM //que contém o nome do usuário e sua senha HashMap<String,String> users = new HashMap(); users.put("flavio", "123"); users.put("mateus", "456"); //continua Programação para Internet Flávio de Oliveira Silva, M.Sc. 62 31 10/7/2010 Servet Básico – Exemplo 3 Passagem de Parâmetros – Login users.put("lucas", "101"); users.put("joao", "1213"); //Obém o valor do parâmetro String sNome = (String) request.getParameter("nome"); St i sSenha S h = (String) (St i ) request.getParameter("senha"); t tP t (" h ") String response.setContentType("text/html"); PrintWriter out = response.getWriter(); String sStatus; //Neste momento o Servlet poderia chamar uma classe //responsável pela realização do serviço de login //Neste exemplo, a fim simplificar será feita uma busca em um //HashMap de usuarios e senhas. Neste mapa será fácil executar a a pesquisa if (!users.containsKey(sNome)) { sStatus CADASTRADO!"; St t = "USUÁRIO NÃO CADASTRADO!" } else { //Verifica se a senha está correta //continua Programação para Internet Flávio de Oliveira Silva, M.Sc. 63 Servet Básico – Exemplo 3 Passagem de Parâmetros – Login String sUserPass = users.get(sNome); if (sUserPass.equals(sSenha)) sStatus = sNome + " - ACESSO AUTORIZADO! Seja bem-vindo"; else St t = "ACESSO NÃO AUTORIZADO!" sStatus AUTORIZADO!"; } out.println("<html>"); out.println("<head>"); out.println("<title> :) Login no Sistema ---- </title>"); out.println("</head>"); out.println("<body bgcolor=\"green\">"); out.println("<h1>"); out.println("Uso de Forms HTML em um Servlet!"); out.println("LOGIN – RESULTADO“ + sStatus); out.println("</h1>"); out.println("</body>"); out.println("</html>"); } } Programação para Internet Flávio de Oliveira Silva, M.Sc. 64 32 10/7/2010 Servet Básico – Exemplo 3 Passagem de Parâmetros – Login O Servlet pode ser chamado utilizando o seguinte formulário HTML <html> <head> <title>Formulário de Login</title> </head> <body> <h1> Bem vindo à Página de Login... </h1> <form action="login" method="post"> <h2>Digite Seu Nome</h2> <input type="text" name="nome"> <h2>Digite Sua senha</h2> <input type="text" name="senha"> <input type="submit" value="&Entrar no site"> </form> </body> </html> Os parâmetros “nome” e “senha” são obtidos no form e enviado no pedido (request) para o servidor Programação para Internet Flávio de Oliveira Silva, M.Sc. 65 ServletContext Esta classe representa o contexto da aplicação ou seja o contêiner de um Servlet Através desta classe o Servlet pode obter parâmetros comuns existentes XML; gravar operações em um arquivo de log e ainda no arquivo WEB WEB.XML; redirecionar pedidos Existe um único contexto em cada aplicação Web. A aplicação Web pode conter vários Servlets e todo compartilham o mesmo contexto. Programação para Internet Flávio de Oliveira Silva, M.Sc. 66 33 10/7/2010 Estrutura de uma aplicação WEB / (Raiz da Aplicação) /WEB-INF Os arquivos desta pasta não são de acesso público Esta pasta contém um arquivo chamado web.xml, conhecido como deployment descriptor, que contém as configurações para uma aplicação WEB /WEB INF/classes /WEB-INF/classes Todos os arquivos de acesso públicos são colocados nesta pasta como por exemplo: HTML; JSP; GIF; etc. No caso do TOMCAT o diretório raiz da aplicação é criado dentro da pasta webapps Todas as classes java compiladas (.class) são colocadas neste local /WEB-INF/lib Todas as classes que estão compactadas em um arquivo JAR são colocadas neste diretório Programação para Internet Flávio de Oliveira Silva, M.Sc. 67 Deployment Descriptor O arquivo web.xml é conhecido como “deployment descriptor” Este arquivo contém toda a configuração do servlet que será utilizada pelo contêiner de servlets (Tomcat) Este arquivo é escrito em XML e deve possuir no mínimo os seguintes elementos: <web-app> <context-param> </context-param> <servlet> </servlet> <servlet-mapping> </servlet-mapping> </web-app Programação para Internet Flávio de Oliveira Silva, M.Sc. 68 34 10/7/2010 Deployment Descriptor Elementos – Versão 2.5 context-param description display-name distributable ejb-ref ejb local ref ejb-local-ref env-entry error-page filter filter-mapping icon jsp-config listener login-config mime-mapping resource-env-ref resource-ref security-constraint security-role servlet servlet-mapping session-config web-app welcome-file-list Programação para Internet Flávio de Oliveira Silva, M.Sc. 69 Deployment Descriptor Servlets 2.5 - JSP 2.1 (Tomcat 6) <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" p //j / / /j xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5“ > <display-name>web app name</display-name> <! <!– outras declarações > --> </web-app> Programação para Internet Flávio de Oliveira Silva, M.Sc. 70 35 10/7/2010 Deployment Descriptor Servlets 2.4 - JSP 2.0 (Tomcat 5) <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" p // g/ / xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4“ > <display-name>web app name</display-name> <!– outras declarações --> </web app> </web-app> Programação para Internet Flávio de Oliveira Silva, M.Sc. 71 Passagem de Parâmetros de Configuração Context-Param O elemento context-param permite o uso parâmetros de inicialização para todo o sistema A partir de qualquer servlet ou página JSP é possível obter seus valores através do método getInitParameter da classe ServletContext O elemento contém dois elementos filhos que contém o nome do parâmetro (param-name) e o valor do parâmetro (param-value) O parâmetro sempre é obtido como String <context-param> <param-name>webmaster-email</param-name> <param-value>[email protected]</param-value> </context-param> Programação para Internet Flávio de Oliveira Silva, M.Sc. 72 36 10/7/2010 Deployment Descriptor Para acessar Servlets este deve possuir no mínimo os seguintes elementos: <web-app xmlns=”http://java.sun.com/xml/ns/j2ee” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xswie:bs-cahpepm p p _a2L_o4c.axtsido”n=”http://java.sun.com/xml/ns/j2ee p //j / / /j version=”2.4”> <servlet> <servlet-name>ServletUniqueName</servlet-name> <servlet-class>servletClassFile</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletUniqueName</servlet-name> <url pattern>/rootFolder</url pattern> <url-pattern>/rootFolder</url-pattern> </servlet-mapping> </web-app> Programação para Internet Flávio de Oliveira Silva, M.Sc. 73 Deployment Descriptor O elemento <servlet> contém dois elementos-filho que descrevem o servlet O elemento <servlet-name> deve ser único no arquivo web.xml. Este nome será utilizado para referenciar o servle em outros elementos como no elemento <servlet-mapping> O nome da classe (<servlet-class>)é o nome completo a partir da pasta classes. Indica a classe será utilizada como resposta ao chamado do servlet Caso a classe esteja em um pacote o nome do mesmo deve ser utilizado Ex: com.mycompany.servlets.NomeClasse O elemento <servlet-mapping> é utilizado para realizar uma ligação entre um caminho e um determinado servlet Para isto este elemento contém um elemento-filho como o nome do Servlet (<servlet-name>) e um elemento (<url-pattern>) que descreve a um caminho URL Quando este caminho estiver presente a solicitação será mapeada para o servlet indicado no arquivo web.xml - indicado por (<servlet-name>) Exemplos: /servApp – Neste caso qualquer URL que finalize com /servApp será mapeada para o servlet (http://localhost:8080/{contextpath}/servApp) *.do – Neste caso qualquer URL que termine com a string “.do” será mapeada para o servlet (http://localhost:8080/{contextpath}/login.do Programação para Internet Flávio de Oliveira Silva, M.Sc. 74 37 10/7/2010 ServletContext Métodos Principais Representa o contexto da aplicação public java.lang.String getInitParameter(java.lang.String name) Caminho físico de arquivos; web.xml E t método ét d permite it obter bt o valor l d â t i t t no arquivo i Este de parâmetros existentes WEB.XML Para isto é necessário informar o nome do parâmetro (name) Um exemplo de parâmetros é uma string que contém o nome do banco de dados public RequestDispatcher getRequestDispatcher(java.lang.String path) O RequestDispatcher é um objeto que recebe pedido do cliente e envia este pedido para qualquer recurso de uma aplicação web existente no servidor, como por exemplo, um Servlet, um arquivo HTML ou um JSP Para obter este objeto é necessário informar o caminho (path) do recurso RequestDispatcher rd = request.getRequestDispatcher("/CatalogView.jsp") Programação para Internet Flávio de Oliveira Silva, M.Sc. 75 HttpSession O protocolo HTTP é stateless, ou seja, um conjunto request/response independe de outro Normalmente é necessário implementar na aplicação do conceito de sessão onde um conjunto de diferentes request/reponse estão ligados entre si Exemplo: Aplicação bancária – agência e conta são informadas apenas no primeiro request, porém é compartilhada por todos os outros request/response Classe Implementa o conceito de sessão Métodos principais Object getAttribute(String name) void setAttribute(String name, Object value) void invalidate() void setMaxInactiveInterval(int interval) boolean isNew() Programação para Internet Flávio de Oliveira Silva, M.Sc. 76 38 10/7/2010 Armazenamento e Recuperação de Informações (Objetos) É possível armazenar e recuperar informações em tempo de execução de um servlet Desta forma é possível o intercambio de informações entre diferentes servlets Armazenar Objeto void setAttribute(String name, Object object) Recuperar Objeto Object getAttribute(String name) Programação para Internet Flávio de Oliveira Silva, M.Sc. 77 Armazenamento e Recuperação de Informações (Objetos) O objeto armazenado pode estar em diferentes escopos, conforme sua necessidade Nível Aplicação Nível Sessão Classe: ServletContext Objeto armazenado está disponível para todos os servlets daquele contexto, todas as sessões existentes e qualquer pedido ou resposta Durante toda a execução da aplicação Classe: HttpSession Objeto armazenado esteja disponível para todos os servlets Duração equivalente à Sessão Nível Pedido HttpServletRequest Objeto armazenado pode ser enviado para outro servlet através do RequestDispatcher Duração do pedido Programação para Internet Flávio de Oliveira Silva, M.Sc. 78 39 10/7/2010 Servlets Encaminhamento de Pedido 1. 2. 2 3. Uma operação comum entre vários servlets é o encaminhamento do pedido (request) Para isto é utilizado a classe RequestDispatcher Este objeto pode ser obtido tanto a partir do contexto da aplicação (ServletContext) quanto de um pedido (HttpServletRequest) O código abaixo mostra como encaminhar o pedido uma página de erro (/errorpage) que neste caso pode ser tratado por outro servlet RequestDispatcher rd; rd = request.getRequestDispatcher("/errorpage"); request getRequestDispatcher("/errorpage"); //Encaminhar request e response para outro servlet rd.forward(request, response); Programação para Internet Flávio de Oliveira Silva, M.Sc. 79 Exemplo Realização Login Programação para Internet Flávio de Oliveira Silva, M.Sc. 80 40 10/7/2010 Servlet Papéis No geral os servlets os servlets estão relacionados com dois papéis básicos Controle Neste caso o servlet não é responsável pela produção de conteúdo Realiza operações invocando serviços de outras classes Armazena dados no contexto da aplicação ou pedido ServletContext; HttpSession e HttpServletRequest Encaminha pedido para outros servlets RequestDispatcher p Anterior: LoginServlet g Exemplo Conteudo Responsável pela produção de conteúdo Servlet que efetivamente produz o código HTML Devolve a resposta para o cliente Exemplo Anterior: AppServlet e LoginErrorServlet Programação para Internet Flávio de Oliveira Silva, M.Sc. 81 Armazenamento e Recuperação de Informações Contexto Aplicação (ServletContext) 1. 2. 3. 4. 5 5. 6. 7. 8. 9. 10. 11. 12. 13. 13 14. 15. 16. 17. 18. 19. 20. public class LoginStaticServlet extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); ServletContext context = config.getServletContext(); t t tAtt ib t ("LOGINCOUNTER" I t (0)) context.setAttribute("LOGINCOUNTER",new Integer(0)); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //... String loginreceived = request.getParameter("user"); String password = request.getParameter("password"); retorno = service.doLogin(loginreceived, password); if (retorno){ //login com sucesso Integer loginCounter; loginCounter = (Integer) context.getAttribute("LOGINCOUNTER"); //A cada login com sucesso o contador é acrescido de um loginCounter = loginCounter + 1; context.setAttribute("LOGINCOUNTER", loginCounter); } } Programação para Internet Flávio de Oliveira Silva, M.Sc. 82 41 10/7/2010 Armazenamento de Informações Contexto da Sessão 1. 2. 3. 4 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 13 14. 15. 16. 17. 18. public class LoginStaticServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //... doLogin(loginreceived password); retorno = service service.doLogin(loginreceived, if (retorno){ //login com sucesso //... //Cria a sessão usuário, caso a mesma não exista HttpSession session = request.getSession(true); //Armazena o nome do usuário na sessão session.setAttribute("USER", loginreceived); //... //Encaminha pedido para o AppServerlet RequestDispatcher rd; rd = request.getRequestDispatcher("/apphome"); rd.forward(request, response); } } Programação para Internet Flávio de Oliveira Silva, M.Sc. 83 Recuperação de Informações Contexto da Aplicação e Sessão 1. 2. 3. 4. 5 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. public class AppServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //recupera o contexto da aplicação e o valor dos atributos S l tC t t context t t = thi tS l tC t t() ServletContext this.getServletContext(); Integer logCounter = (Integer) context.getAttribute("LOGINCOUNTER"); //Obtem o nome do usuario que realizou o login HttpSession session = request.getSession(); String sLoginName = (String) session.getAttribute("USER"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>AppHome</title>"); t i tl (" titl A H /titl ") out.println("</head>"); out.println("<body>"); out.println("Bem Vindo " + sLoginName); out.println("<h3>Sistema acessado "+ logCounter.toString()+ " vezes"); out.println("</body>"); out.println("</html>"); } Programação para Internet } Flávio de Oliveira Silva, M.Sc. 84 42 10/7/2010 Aplicação Exemplo Fluxo entre páginas Programação para Internet Flávio de Oliveira Silva, M.Sc. 85 Aplicação Exemplo - Servlets Servlets Associados Programação para Internet Flávio de Oliveira Silva, M.Sc. 86 43