Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa...

43
10/7/2010 1 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; Programação para Internet Flávio de Oliveira Silva, M.Sc. 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. 2

Transcript of Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa...

Page 1: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

1

Programação para Internet

Flávio de Oliveira Silva, [email protected]

Programação para InternetFlá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;

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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.

2

Page 2: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

2

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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

dinâmica para a Web.

Desenvolvimento de aplicação dinâmica.

Aplicações multi-camadas.

Aplicações WEB server side e client side.

3

Programa Introdução aos sistemas Web

Internet: um resumo histórico

O ambiente web: o protocolo HTTP

Aplicações WEB Aplicações WEB 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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

Web Contêiner

4

Page 3: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

3

Programa Servlets

Aplicações Web Utilizando Servlets

Apache Tomcat

Arquitetura MVC para WEB 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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

JSP Expression Language

Diretivas, Ações Padrão e Java Beans

JSP Standard Tag Library

5

Programa Struts

Principais Componentes (Struts2)

Setup Aplicação

Actions Actions

Validacao

Interceptors

JavaScript e AJAX

Realização e apresentação de um projeto para Web

Programação para InternetFlávio de Oliveira Silva, M.Sc.

6

Page 4: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

4

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 - O Guia do Desenvolvedor, 648 p, g pISBN 85-352-1324-4, Campus

Programação para InternetFlá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. 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.

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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.

8

Page 5: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

5

Avaliação Provas – Teóricas

Primeira Prova – 25 Pontos

Segunda 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 InternetFlávio de Oliveira Silva, M.Sc.

Final 40 pontos

9

Grande conjunto de redes de computadores interligadas pelo mundo.

Começou como uma rede interligando Universidades no E.U.A

INTERNET

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)

Programação para InternetFlávio de Oliveira Silva, M.Sc.

Backbones dão suporte principal à INTERNET.

Backbones são linhas alta capacidade de tráfego de informação. Sustentados por governos e grandes empresas

10

Page 6: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

6

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 FAPESPsã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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

11

200.17.210.65

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 i P i lti ídi (T t I S Principal serviço. Possui recursos multimídia (Texto; Imagem; 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; http://www.fagen.ufu.br; http://ww.uol.com.br; http://facic.ufu.br

Programação para InternetFlávio de Oliveira Silva, M.Sc.

12

g

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);

Page 7: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

7

Internet A Internet não é uma rede

Conjunto de diferentes redes interligadas que tili am m mesmo conj nto de protocolos a fim deutilizam um mesmo conjunto de protocolos a fim de

oferecer serviços comuns

Serviços FTP

E-mail

WEB

Programação para InternetFlávio de Oliveira Silva, M.Sc.

WEB

13

Protocolo HTTP Protocolo utilizando na Web

Realiza o transporte de conteudo entre o navegador e o ser idor Webe o servidor Web

Protocolo descreve o pedido (request) e a resposta (response)

Seu entendimento é um requisito na programação para a Internet

Programação para InternetFlávio de Oliveira Silva, M.Sc.

14

Page 8: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

8

HTTP RequestsEstrutura Geral Um pedido Http contém a estrutura abaixo

ESTRUTURA EXEMPLO

Metodo URI Versao POST / HTTP/1.1Header Geral Connection: Keep-Alive

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

Header Pedido Host: www.site.com.brHeader Conteudo Content-type: txt/htmlConteudo query=book

Programação para InternetFlávio de Oliveira Silva, M.Sc.

URI (Uniform Resource Indication) – Descrição única do conteúdo na Web

Versão – Versão do protocolo utilizada 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

15

HTTP ResponseEstrutura Geral A resposta contém a estrutura abaixo

ESTRUTURA EXEMPLO

Versao Status Resposta HTTP/1.1 200 OK

H d G lHeader Geral Date: Mon, 06 Feb 2010 20:54:26 GMTHeader Resposta Server: Apache/1.3.6 (Unix)

Header Conteúdo Content-length: 327Content-type: text/html

Conteúdo

<html><head><title>Página Hello</title></head><body><h1>Hello Web World!</h1>

Programação para InternetFlávio de Oliveira Silva, M.Sc.

Headers – Informações adicionais enviadas juntamente com a resposta

Conteúdo – Informação enviada pelo servidor

16

<h1>Hello Web World!</h1></body></html>

Page 9: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

9

HTTP Request e ResponseExemplos 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

ResponseHTTP/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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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>

17

HTTP RequestMétodos Principais métodos utilizado no protocolo HTTP

MÉTODO DESCRIÇÃO

GETPermite obter um conteúdo em um servidor. O conteúdo pode ser 

GETPermite obter um conteúdo em um servidor. O conteúdo pode ser um arquivo estático ou um resultado produzido de forma dinâmica

HEADObtém apenas informações (cabeçalho) associada ao conteúdo, sem no entanto, devolver este conteúdo

POSTPermite o envio de informações para o servidor, por exemplo, ao preencher um formulário na Web.

PUT Permite inserir ou alterar um conteúdo existente em um servidorDELETE Utilizado para remover um conteúdo no servidor

Programação para InternetFlávio de Oliveira Silva, M.Sc.

18

Page 10: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

10

HTTP ResponseServer 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 clientesão mostrados no cliente

FAIXA DO CÓDIGO

SIGNIFICADO

100‐199 Informação200‐299 Pedido atendido com sucesso300‐399 Pedido redirecionado400‐499 Pedido incompleto500‐599 Erros no servidor

Programação para InternetFlávio de Oliveira Silva, M.Sc.

19

500 599 Erros no servidor

HTTP ResponseServer Codes - Exemplos

Programação para InternetFlávio de Oliveira Silva, M.Sc.

20

Page 11: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

11

HTTP Headers

Programação para InternetFlávio de Oliveira Silva, M.Sc.

21

HTTP Tipos de Conteúdo

Programação para InternetFlávio de Oliveira Silva, M.Sc.

22

Page 12: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

12

HTTPCokies

Programação para InternetFlávio de Oliveira Silva, M.Sc.

23

HTML

Programação para InternetFlávio de Oliveira Silva, M.Sc.

24

Page 13: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

13

CSS

Programação para InternetFlávio de Oliveira Silva, M.Sc.

25

JavaScript

Programação para InternetFlávio de Oliveira Silva, M.Sc.

26

Page 14: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

14

Java – Plataformas A tecnologia Java está dividida em plataformas.

Cada plataforma oferece um conjunto de funcionalidades para o desenvolvimento de diferentes tipos de aplicaçõespara 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 InternetFlávio de Oliveira Silva, M.Sc.

27

Java – Plataformas Java ME – Java Platform, Micro 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 Destinado a criação de aplicações para dispositivos móveis

Java SE – Java Platform, Standard Edition 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 RuntimeEnvironment)

Java EE – Java Platform, Enterprise Edition Define um padrão para o desenvolvimento de aplicações baseadas em

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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

28

Page 15: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

15

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

O Java EE não é um produto mas uma especificação O Java EE não é um produto, mas uma especificação.

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:

Programação para InternetFlávio de Oliveira Silva, M.Sc.

SUN

IBM

ORACLE

BEA

JBOSS

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 J2EEIBM 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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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)

30

Page 16: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

16

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)

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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

31

Aplicações DistribuídasCamadas Cliente (Client 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

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) 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)

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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

32

Page 17: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

17

Aplicações DistribuídasCamadas – Arquitetura Java EE Visão Geral das Camadas

Programação para InternetFlávio de Oliveira Silva, M.Sc.

33

Aplicações DistribuídasArquitetura Java EE Comunicação entre as várias camadas

Programação para InternetFlávio de Oliveira Silva, M.Sc.

34

Page 18: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

18

Aplicações DistribuídasArquitetura Java EE Camada Web (Web Tier)

JavaBeans; JSP Pages; Servlets

Programação para InternetFlávio de Oliveira Silva, M.Sc.

35

Aplicações DistribuídasArquitetura Java EE Camada de Negócios (Business Tier)

Baseada em EJB

Programação para InternetFlávio de Oliveira Silva, M.Sc.

36

Page 19: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

19

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:WEB têi WEB contêiner

EJB contêiner

Programação para InternetFlávio de Oliveira Silva, M.Sc.

37

Java EE contêineresWeb Contêiner Executa Servlets e páginas JSP

Servlets São classes Java que podem ser chamados dinamicamente e que podem executar

alguma funcionalidade.a gu a 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 para criar conteúdo dinâmico para a Web

Programação para InternetFlávio de Oliveira Silva, M.Sc.

p p

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

38

Page 20: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

20

Java EE contêineresEJB Contêiner Realiza a criação, destruição e gerenciamento dos EJBs (Enterprise JavaBeans)

Enterprise JavaBeans Enterprise JavaBeans é um padrão para o desenvolvimento de componentes,

utilizando a linguagem Java, que podem ser implantados (deployed) em qualquer u a do a guage Ja a, que pode se p a ados (dep oyed) e qua queservidor J2EE. Em sua essência são classes Java.

Existem vários tipos de EJBs cada um com características próprias

Além disso o contêiner de EJBs é responsável pelo: Gerenciamento Distribuído de Transações

Implementação da Segurança

Gerenciamento de Recursos

Persistência dos EJBs

Acesso Remoto

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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

39

Java EE contêineresEJB 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 DESCRIÇÃOTIPO SUB‐TIPO DESCRIÇÃO

Session 

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 

Message Componentes sem estado que estão ligados ao Java Message Service

(JMS), utilizado para chamada assíncrona de métodos 

Component Managed Componentes com estados que fazem o encapsulamento de uma entidade de um banco de dados O servidor de aplicações gera o

Programação para InternetFlávio de Oliveira Silva, M.Sc.

40

Entity 

(CMP) 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 

Page 21: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

21

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 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 i i t i ã d t úd di â i f i t é d

Programação para InternetFlávio de Oliveira Silva, M.Sc.

A primeira proposta para a criação de conteúdos dinâmicos foi através do CGI (Common Gateway Interface)

Este mecanismo permite a execução de um código, escrito em C ou Perl, através do navegador

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.

Programação para InternetFlávio de Oliveira Silva, M.Sc.

ç

Neste contexto e como uma resposta a estas desvantagens, na plataforma Java foi desenvolvido o conceito dos Servlets

42

Page 22: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

22

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 Servletscontê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 InternetFlá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 Versão do Apache

Programação para InternetFlávio de Oliveira Silva, M.Sc.

44

EspecificaçõesServlets / JSP

Versão do Apache TOMCAT

2.5/2.1 6.0.14

2.4/2.0 5.5.25

2.3/1.2 4.1.36

2.2/1.1 3.3.2

Page 23: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

23

Tomcat – Estrutura de Pastas

Programação para InternetFlá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 InternetFlávio de Oliveira Silva, M.Sc.

46

Page 24: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

24

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 InternetFlá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 (S l t ) Vi (Pá i JSP) M d l(O t Elementos: Browser; Controller (Servlets); View(Páginas 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 InternetFlávio de Oliveira Silva, M.Sc.

48

Page 25: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

25

Arquitetura MODEL 2

O usuário chama o controller (servlet)

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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

49

Servlets - Operações Métodos são chamados durante o ciclo de vida de um

Servlet: init()

Chamado na inicialização do Servlet uma única vez, antes que o mesmo possa responder às requisições feitas pelos clientes.

service() 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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

permitindo desta forma a economia de recursos do 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()

50

Page 26: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

26

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 Esta interface é definida no pacote javax.servlet

Métodos definidos pela interface: void destroy()

Responsável pela finalização do Servlet e liberação de recursos

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() Retorna informações sobre o Servlet como autor,versão; etc

Programação para InternetFlávio de Oliveira Silva, M.Sc.

void init(ServletConfig config) Responsável pela inicialização e alocação de recursos

void service(ServletRequest req, ServletResponse res) 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

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 GET Requisita uma página para leitura

HEAD Requisita o cabeçalho de uma página WEB

PUT Envia uma página a fim de ser escrita em servidor WEB

POST Envia informações que são adicionadas a uma página WEB

Programação para InternetFlávio de Oliveira Silva, M.Sc.

Envia informações que são adicionadas a uma página WEB

DELETE 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.http52

Page 27: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

27

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 Servleta fim de imprimir o comportamento desejado pelo Servlet

Métodos principais doGet(HttpServletRequest req, HttpServletResponse resp)

Utilizado em requisições do tipo HTTP GET

doHead(HttpServletRequest req, HttpServletResponse resp) Utilizado em requisições do tipo HTTP HEAD

doPost(HttpServletRequest req, HttpServletResponse resp) Utilizado em requisições do tipo HTTP POST

doPut(HttpServletRequest req, HttpServletResponse resp)

Programação para InternetFlávio de Oliveira Silva, M.Sc.

( p q q, p p p) Utilizado em requisições do tipo HTTP PUT

doDelete(HttpServletRequest req, HttpServletResponse resp) Utilizado em requisições do tipo HTTP DELETE

init; destroy; getServletInfo

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 especializadosespecializados

As informações utilizadas na requisição e na resposta estão encapsuladas em HttpServletRequest e HttpServletResponse

Programação para InternetFlávio de Oliveira Silva, M.Sc.

54

Page 28: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

28

HttpServlet Além dos métodos descritos anteriormente que devem ser especializados

existe outros métodos muito utilizados em um Servlet public ServletContext getServletContext()

Permite o obter um objeto que representa o contêiner do Servlet Permite o obter um objeto que representa o contêiner do Servlet

public ServletConfig getServletConfig() 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 InternetFlá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 InternetFlávio de Oliveira Silva, M.Sc.

recebem um objeto HttpServletRequest

56

Page 29: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

29

HttpServletRequestMé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 servletO nome está definido em um Form Html ou então na URL de acesso ao servletEx: 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();

public HttpSession getSession(boolean create)

Programação para InternetFlávio de Oliveira Silva, M.Sc.

p p g ( ) Retorna uma sessão (objeto HttpSession) associado ao pedido

Uma nova sessão é criada somente se o parâmetro create igual a true

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 desejadoservlet 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 InternetFlávio de Oliveira Silva, M.Sc.

58

Page 30: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

30

HttpServletResponseMétodos Principais public void setContentType(java.lang.String type)

Permite definir o tipo de resposta que será devolvida ao navegador

O tipo mais comum é “text/hmtl”

bli j i P i tW it tW it () th j i IOE ti public java.io.PrintWriter getWriter() 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 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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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”

59

Servet Básico – Exemplo 1package 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\">");

t i tl (" h1 ")

Programação para InternetFlávio de Oliveira Silva, M.Sc.

out.println("<h1>");

out.println("HELLO SERVLET WORLD!");

out.println("</h1>");

out.println("</body>");

out.println("</html>");

}

}

60

Page 31: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

31

Servet Básico – Exemplo 2Passagem de Parâmetrospackage 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!");

t i tl ("COMANDO " C d)

Programação para InternetFlávio de Oliveira Silva, M.Sc.

out.println("COMANDO = "+sCmd);

out.println("</h1>");

out.println("O nome do comando acima foi passado como parâmetro.");

out.println("</body>");

out.println("</html>");

}

}

61

Servet Básico – Exemplo 3Passagem de Parâmetros – Loginpackage org.lp2.servlet;

import java.io.*;

import java.util.HashMap;

import javax.servlet.*;

i t j l t htt *import javax.servlet.http.*;

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 {

//P d fi i á i h á i d H hM

Programação para InternetFlávio de Oliveira Silva, M.Sc.

//Para definir os usuários e suas senha será criado um HashMap

//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

62

Page 32: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

32

Servet Básico – Exemplo 3Passagem 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 S h (St i ) t tP t (" h ")String sSenha = (String) request.getParameter("senha");

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)) {

St t "USUÁRIO NÃO CADASTRADO!"

Programação para InternetFlávio de Oliveira Silva, M.Sc.

sStatus = "USUÁRIO NÃO CADASTRADO!";

}

else {

//Verifica se a senha está correta

//continua

63

Servet Básico – Exemplo 3Passagem 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 = "ACESSO NÃO 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!");

Programação para InternetFlávio de Oliveira Silva, M.Sc.

out.println("LOGIN – RESULTADO“ + sStatus);

out.println("</h1>");

out.println("</body>");

out.println("</html>");

}

}

64

Page 33: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

33

Servet Básico – Exemplo 3Passagem 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">

Programação para InternetFlávio de Oliveira Silva, M.Sc.

</form>

</body>

</html>

Os parâmetros “nome” e “senha” são obtidos no form e enviado no pedido (request) para o servidor

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 no arquivo WEB XML; gravar operações em um arquivo de log e aindano arquivo WEB.XML; gravar operações em um arquivo de log e ainda 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 InternetFlávio de Oliveira Silva, M.Sc.

66

Page 34: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

34

Estrutura de uma aplicação WEB / (Raiz da Aplicação)

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 No caso do TOMCAT o diretório raiz da aplicação é criado dentro da pasta webapps

/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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

/WEB INF/classes 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

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>

Programação para InternetFlávio de Oliveira Silva, M.Sc.

<servlet-mapping>

</servlet-mapping>

</web-app

68

Page 35: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

35

Deployment DescriptorElementos – 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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

security-constraint

security-role

servlet

servlet-mapping

session-config

web-app

welcome-file-list

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 -->

Programação para InternetFlávio de Oliveira Silva, M.Sc.

<! outras declarações >

</web-app>

70

Page 36: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

36

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>

Programação para InternetFlávio de Oliveira Silva, M.Sc.

</web app>

71

Passagem de Parâmetros deConfiguraçã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>

Programação para InternetFlávio de Oliveira Silva, M.Sc.

<param-value>[email protected]</param-value>

</context-param>

72

Page 37: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

37

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 a2L o4c.axtsido”n=”http://java.sun.com/xml/ns/j2eep p _ _ 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>

Programação para InternetFlávio de Oliveira Silva, M.Sc.

<url pattern>/rootFolder</url pattern>

</servlet-mapping>

</web-app>

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 servletserá 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 caminhoe 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:

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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

74

Page 38: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

38

ServletContextMétodos Principais Representa o contexto da aplicação

Caminho físico de arquivos; web.xml

public java.lang.String getInitParameter(java.lang.String name)E t ét d it bt l d â t i t t i Este método permite obter o valor de parâmetros existentes no arquivo 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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

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")

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 ligadossessã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

Programação para InternetFlávio de Oliveira Silva, M.Sc.

Object getAttribute(String name)

void setAttribute(String name, Object value)

void invalidate()

void setMaxInactiveInterval(int interval)

boolean isNew()76

Page 39: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

39

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 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 InternetFlá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 Classe: ServletContext 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

Nível Sessão Classe: HttpSession

Objeto armazenado esteja disponível para todos os servlets

Duração equivalente à Sessão

Nível Pedido

Programação para InternetFlávio de Oliveira Silva, M.Sc.

Nível Pedido HttpServletRequest

Objeto armazenado pode ser enviado para outro servlet através do RequestDispatcher

Duração do pedido

78

Page 40: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

40

ServletsEncaminhamento de Pedido 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

1. RequestDispatcher rd;

2 rd = request getRequestDispatcher("/errorpage");

Programação para InternetFlávio de Oliveira Silva, M.Sc.

2. rd = request.getRequestDispatcher("/errorpage");

//Encaminhar request e response para outro servlet

3. rd.forward(request, response);

79

ExemploRealização Login

Programação para InternetFlávio de Oliveira Silva, M.Sc.

80

Page 41: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

41

ServletPapé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

Exemplo Anterior: LoginServlet

Programação para InternetFlávio de Oliveira Silva, M.Sc.

p g

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

81

Armazenamento e Recuperação de InformaçõesContexto Aplicação (ServletContext)1. public class LoginStaticServlet extends HttpServlet {

2. public void init(ServletConfig config) throws ServletException {

3. super.init(config);

4. ServletContext context = config.getServletContext();

5 t t tAtt ib t ("LOGINCOUNTER" I t (0))5. context.setAttribute("LOGINCOUNTER",new Integer(0));

6. }

7. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

8. //...

9. String loginreceived = request.getParameter("user");

10. String password = request.getParameter("password");

11. retorno = service.doLogin(loginreceived, password);

12. if (retorno){

13 //login com sucesso

Programação para InternetFlávio de Oliveira Silva, M.Sc.

13. //login com sucesso

14. Integer loginCounter;

15. loginCounter = (Integer) context.getAttribute("LOGINCOUNTER");

16. //A cada login com sucesso o contador é acrescido de um

17. loginCounter = loginCounter + 1;

18. context.setAttribute("LOGINCOUNTER", loginCounter);

19. }

20. }82

Page 42: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

42

Armazenamento de InformaçõesContexto da Sessão1. public class LoginStaticServlet extends HttpServlet {

2. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

3. //...

4 retorno = service doLogin(loginreceived password);4. retorno = service.doLogin(loginreceived, password);

5. if (retorno){

6. //login com sucesso

7. //...

8. //Cria a sessão usuário, caso a mesma não exista

9. HttpSession session = request.getSession(true);

10. //Armazena o nome do usuário na sessão

11. session.setAttribute("USER", loginreceived);

12. //...

13 //Encaminha pedido para o AppServerlet

Programação para InternetFlávio de Oliveira Silva, M.Sc.

13. //Encaminha pedido para o AppServerlet

14. RequestDispatcher rd;

15. rd = request.getRequestDispatcher("/apphome");

16. rd.forward(request, response);

17. }

18. }

83

Recuperação de InformaçõesContexto da Aplicação e Sessão1. public class AppServlet extends HttpServlet {

2. protected void doPost(HttpServletRequest request, HttpServletResponse

3. response) throws ServletException, IOException {

4. //recupera o contexto da aplicação e o valor dos atributos

5 S l tC t t t t thi tS l tC t t()5. ServletContext context = this.getServletContext();

6. Integer logCounter = (Integer) context.getAttribute("LOGINCOUNTER");

7. //Obtem o nome do usuario que realizou o login

8. HttpSession session = request.getSession();

9. String sLoginName = (String) session.getAttribute("USER");

10. response.setContentType("text/html");

11. PrintWriter out = response.getWriter();

12. out.println("<html>");

13. out.println("<head>");

t i tl (" titl A H /titl ")

Programação para InternetFlávio de Oliveira Silva, M.Sc.

14. out.println("<title>AppHome</title>");

15. out.println("</head>");

16. out.println("<body>");

17. out.println("Bem Vindo " + sLoginName);

18. out.println("<h3>Sistema acessado "+ logCounter.toString()+ " vezes");

19. out.println("</body>");

20. out.println("</html>");

21. }

22. }84

Page 43: Programação para Internetflavio/pi/files/2010-02/Programacao Internet We… · 10/7/2010 2 Ementa Aspectos históricos da Internet. Sistemas Multimídia. Análise de tendências.

10/7/2010

43

Aplicação Exemplo Fluxo entre páginas

Programação para InternetFlávio de Oliveira Silva, M.Sc.

85

Aplicação Exemplo - Servlets Servlets Associados

Programação para InternetFlávio de Oliveira Silva, M.Sc.

86