Java Web, o Tutorial

315
Versão: 3.0 Capacitação de Desenvolvedor Java Java Web [email protected] Todos os direitos reservados e protegidos © 2006 e 2010 Java Web Capacitação Desenvolver Java Web Application Rildo F Santos [email protected] twitter: @rildosan skype: rildo.f.santos http://rildosan.blogspot.com/ (11) 9123-5358 (11) 9962-4260 www.etcnologia.com.br

description

Este tutorial apresenta como desenvolver aplicações para o ambiente Web utilizando a tecnologia Java.

Transcript of Java Web, o Tutorial

Page 1: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010

Java WebCapacitação

Desenvolver Java

Web Application

Rildo F [email protected]

twitter: @rildosan

skype: rildo.f.santos

http://rildosan.blogspot.com/

(11) 9123-5358

(11) 9962-4260

www.etcnologia.com.br

Page 2: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 2

Programa: “Menos Papel, Mais Árvores ®”

Qual é o mundo que queremos ?

O primeiro passo para criar um mundo melhor, é saber qual tipo

de mundo que queremos ter e qual tipo que deixaremos de

herança para as próximas gerações.

Nossa missão: É buscar pelo equilibro do homem, da

tecnologia e do meio ambiente.

Para cumprir esta missão é necessário: conscientizar,

comprometer e AGIR.

O programa Menos Papel, Mais Árvores®, é uma

ação, com objetivo de estimular o consumo sustentável

de papel dentro das organizações.

Quer participar ?

- Reduza o uso de papel (e de madeira) o máximo

possível.

- Só imprima se for extremamente necessário.

- Evite comprar produtos com excesso de

embalagem.

- Ao imprimir ou escrever, utilize os dois lados do

papel.

- Use papel reciclado.

Este material não deve ser

impresso..

Page 3: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 3

Facilitador: Rildo F. Santos (@rildosan)

Coach , Instrutor, Consultor, Palestrante e Professor de Gestão de

Negócios, Inovação, Sustentabilidade, Processos e Tecnologia da

Informação e Métodos Ágeis.

Minha Experiência:

Tenho mais de 10.000 horas de experiência em Gestão de Negócios,

Gestão de Inovação, Governança e Engenharia de Software. Sou formado

em Administração de Empresas, Pós-Graduado em Didática do Ensino

Superior e Mestre em Engenharia de Software pela Universidade

Mackenzie.

Fui instrutor de Tecnologia de Orientação a Objetos, UML e Linguagem Java

(Sun MicroSystems e IBM).

Conheço Métodos Ágeis (SCRUM, XP, FDD, Lean e OpenUP), Arquitetura

de Software, SOA (Arquitetura Orientado a Serviço), Processo Unificado,

Business Intelligence, Gestão de Risco de TI entre outras tecnologias.

Sou professor de curso de MBA da Fiap e fui professor de pós-graduação da

Fasp e IBTA.

Tenho conhecimento de Gestão de Negócio (Inteligência de Negócio,

Gestão por Processo, Inovação, Gestão de Projetos e GRC - Governance,

Risk ando Compliance), SOX, Basel II e PCI;

Experiência na implementação de Governança de TI e Gerenciamento de

Serviços de TI. Fluência nos principais frameworks e padrões: ITIL, Cobit,

ISO 20000, ISO 27001 e ISO 15999;

Participei de diversos projetos nos segmentos: Financeiro,

Telecomunicações, Seguro, Saúde, Comunicação, Segurança Pública,

Fazenda, Tecnologia, Varejo, Distribuição, Energia e Petróleo e Gás.

Possuo as certificações: CSM - Certified SCRUM Master, CSPO -

Certified SCRUM Product Owner , SUN Java Certified Instrutor, ITIL

Foundation e sou Instrutor Oficial de Cobit Foundation e Cobit Games;

Sou membro do IIBA-International Institute of Business Analysis

(Canada)

Onde estou:

Twitter: @rildosan

Blog: http://rildosan.blogspot.com/

Comunidade: http://etecnologia.ning.com

Page 4: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 4

Conteúdo

Servidores, Protocolos, Serviços,

Componentes, Formulários, Páginas

dinâmica e Scripts

Java Servlet: APIs e funcionalidades

JSP: APIs e funcionalidades

JavaBeans e JDBC

Recomendações, dicas e Melhores

prática para o desenvolvimento de

aplicação Web

Nota: As tags HTML foram escritas em letras minúsculas. A melhores práticas recomendam que

elas sejam em maiúsculo.

Page 5: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 5

Page 6: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 6

Conceitos

Introdução

Servidores

Server Pages

Páginas

Protocolos

Formulários

Componentes

Web Container: Tomcat

Scripts

Page 7: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 7

Podemos dizer que as aplicações web são

baseada na arquiteturas Cliente/Servidor de

duas ou três camadas:

Camada de Recursos

WWW Browser

Web Server / ASs

HTML

CGIASP Java

Business Object

Services

Business Object

Engine

Camadas

Apresentação,

Lógica de

Negócios e

Integração

Camada de Cliente

Page 8: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 8

Arquitetura da Web

Page 9: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 9

Os servidores são responsáveis por gerenciar um

sistema virtual de arquivos e atender a requisições.

- Basicamente que temos:

Web Server:

Para atender uma aplicação web pequena ou

mediana com baixo volume de requisições e

transações.

Exemplo: Intranets extranets, webmail, fóruns e

pequenos site empresariais ou pessoais

(demanda controlada)

Application Server:

Para atender uma aplicação web corporativa

com alto volume de requisições e/ou transações.

Exemplo: aplicações de e-commerce, e-business

serviços (home banking) e grandes portais (UOL,

Globo.com, IG)

(demanda incontrolada)

O Lado Servidor : Servidores

Arquitetura da Web

Page 10: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 10

O Lado Servidor: Web Server

Os servidores Web são programas que respondem chamadas

através de conexões TCP/IP com arquivos que são,

basicamente, gerados em html. Esses softwares são

instalados nas máquinas em que são armazenadas as

páginas da Web.

Ao ser instalados, criam uma estrutura de diretórios e nesses

diretórios são colocadas as páginas que se deseja fazer

acesso. Quando executado, o servidor Web abre uma porta

de comunicação (Porta 80) para que os usuários internos (no

caso de uma intranet) ou externos (internet ou extranet)

possam fazer o seu acesso. Atualmente existem diversos

softwares atuando como servidores Web disponíveis no

mercado.

Existem servidores “open source”, como Apache (maior

“player” do mercado) e outros tais como: MS Internet

Information Server, SunOne e etc.

Alguns servidores Web, são extremamente pequenos, como

o Apache, ocupando pouco espaço, outros como o IIS são

bem maiores, e já são disponibilizados com o Sistema

Operacional, no caso Windows NT e 2000.

Um ponto importante a considerar sobre os Servidores Web,

é a configuração. Apesar de ser relativamente simples

entender os princípios básicos desse tipo de software, a

configuração às vezes não é uma tarefa fácil.

Arquitetura da Web

Page 11: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 11

O Lado Servidor: Web Server

Arquitetura da Web

Os mais populares servidores Web, são:

- Apache;

- Microsoft Internet Information Server (IIS);

- Zeus e

- SunOne.

O apache é produto open source que tem mais de 60% de

mercado (www.apache.org).

Microsoft IIS é distribuido atrelado a sistema operacional

Windows, no caso Windows NT e 2000.

Page 12: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 12

Arquitetura da Web

A estrutura escalar e portabilidade são as novas regras

para quem quer ter vantagem competitiva sobre a

concorrência.

Em meio este cenário os Application Server despontarão como soluções completas, de desenvolvimento a Gerenciamento de Sistemas. Application Server simplifica o desenvolvimento, facilita integração, distribuição e gerenciamento de clientes leves e sistemas de software distribuídos.

Proporciona soluções de negócios que integram ambientes empresariais heterogêneos, incluindo servidores Web, servidores de Banco de Dados, Legados, Múltiplos clientes, Linguagens e Plataformas.

Construído baseado em padrão aberto e em padrões de indústria, tais como: CORBA, J2EE (EJB, JSP, Servlets), C++, XML e HTML, gera confiabilidade, crescimento escalar e flexibilidade, necessárias para atingir a demanda de aplicações comerciais.

O Lado Servidor: Application Server

Page 13: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 13

Arquitetura da Web

Principais características de Application Server:

• Sistema de usuários que permita a criação de grupos e

usuários, integração com segurança da rede (usuários de

todas as plataformas, seja Windows, Linux, Unix ou

Mainframe, OS/390);

• Cadastro e uso facilitado de certificado de autorização

• Controle de acesso em nível de componentes da aplicação

e com filtros de dados;

• Estrutura escalar (embutir recursos de clusters)

• Fail Over (Tolerância a Falhas);

• Persistência de sessão;

• Atualização de componentes a quente (hot deployment)

• Suporte a padrões: Corba, XML, J2EE, EJB, COM, Web

Services e etc;

• Acesso a Banco de Dados (com recurso de pool de

conexões);

• Balanceamento de carga;

• Monitoria de Transações e

• WebServer (com suporte a HTML, RMI, IIOP, XML, WAP).

O Lado Servidor: Application Server

Page 14: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 14

O Lado Servidor: Application Server

Arquitetura dos Application Server

(tecnologia J2EE)

Arquitetura da Web

Web

server

Firewall

Clientes

(browsers)

JSP e

Servlet

Container(Componentes)

EJB

Servidor de Aplicações

Banco de Dados

Legado

Camada

Cliente

Lógica e Regra de Negócios

Repositório

de dadosCamadas Apresentação,

Lógica de Negócio e

Integração Camada

Recursos

Page 15: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 15

O Lado Servidor: Application Server

Arquitetura Cliente Servidor (Três Camadas)Application Server (tecnologia J2EE)

J2EE

App Client

WEB CONTAINER

Clients protocols

Suporte (HTTP, HTTPs

RMI, IIOP SOAP

BrowserHTTP / HTTPS

Java Servlets

JSP

EJB CONTAINER

Clients protocols

Capable of making (HTTP, HTTPs

RMI, IIOP SOAP)

EJB

RMI, IIOP, SSl, TCP

RMI,

IIOP,

SSl,

TCP

JNDI, JTA, JDBC, JMS, JAVAMAIL

JAXP, CONNECTORS e JAAS

Enterprise Systems

(ERP, SCM, Mainframe)Banco de

Dados

Arquitetura da Web

Page 16: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 16

O Lado Servidor: Application Server

Razões para usar um Application Server

Arquitetura da Web

Estrutura escalar:

Você nunca sabe quantas conexões seu site vai exigir.

Seu sucesso pode matá-lo:

BOL previu 40.000 novos usuários na

primeira semana de uso

Recebeu 60.000 no primeiro dia

O cache de transações possibilita atender o

crescimento da demanda

O balanceamento de carga possibilita dividir o

processamento em várias CPUs

A portabilidade possibilita mudar a plataforma de

hardware e software para atender uma nova

demanda

Quantos usuários

terei...?

Page 17: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 17

O Lado Servidor: Application Server

Razões para usar um Application Server

Portabilidade

Arquitetura da Web

Trocar de hardware e Software, digo, Sistema

Operacional e preservar a Aplicação...

A maioria dos Application Server são baseados na

tecnologia Java (J2EE) que oferece a portabilidade entre

Sistemas Operacionais.

A portabilidade favorece o atendimento de crescimento

ou nova demanda.

Troque de hardware continue com a mesma aplicação.

“Você pode começar sua aplicação com a dobradinha wintel

(Windows + Intel) e mais tarde migrar para Unix e Risc”

Page 18: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 18

O Lado Servidor: Application Server

Razões para usar um Application Server

Arquitetura da Web

Redução de Custos:

• O custo das transações efetivadas através do

Home Banking é quase dez vez menor que

nas agências.

• Call Center vs Internet, o custo de

atendimento via Internet é muito menor do

que o atendimento telefônico.

• SCM e e-Procurement podem reduzir os

custos...

Integração da Cadeia de Valores

• Possibilidade de toda a integração da cadeia

de valores, integração com Fornecedores,

Clientes e Investidores

Page 19: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 19

O Lado Servidor: Application Server

Razões para usar um Application Server

As vantagens do Java:

A grande maioria dos Application Servers tem

suporte a Java. Algumas característica da

tecnologia Java:

• É Orientada por Objetos;

• Foi projetada para redes;

• É segura;

• É multitarefa;

• Gerenciamento de memória automático

• Está portada para uma grande variedade de

plataformas

• É uma padrão de mercado

• Baixo custo de aquisição de software

Arquitetura da Web

Page 20: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 20

O Lado Servidor: Application Server

Razões para não usar um Application Server

Nem todos os projetos necessitam de Application

Server, veja os porquês:

• Baixo volume transações;

• Falta de domínio da tecnologia;

• Baixo investimento em hardware e

• Baixo investimento software.

Arquitetura da Web

Page 21: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 21

O Lado Servidor: Application Server

Application Server:

Arquitetura da Web

Existem diversos Application Server disponíveis no mercado,

tais como:

- WebSphere Application Server, IBM

- Oracle Application Server, Oracle

- JBoss, JBoss Group (Open source)

Entre outros...

Quais são os

Application Server

disponíveis ?

Page 22: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 22

Arquitetura da Web

Page 23: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 23

CGI:

A CGI (Commom Gateway Interface) é um padrão criado para

fazer interface entre servidores Web e aplicações externas. O

programa CGI é conhecido como Script CGI, aplicação CGI ou

simplesmente Gateway.

Através dos componentes CGI podemos adicionar novas

funcionalidades aos Web Server. Fazer a aplicação

comunicação com Banco de Dados, usar mecanismo de busca,

contadores, livro de visita entre outras coisas.

Características Funcionais:

Geração de Documentos Virtuais (on-the-fly)

Documentos virtuais aqueles criados no momento de sua

requisição, ou seja, eles não existem efetivamente, como um

arquivo .HTML. Assim, são gerados automaticamente por um

programa CGI, permitindo que sejam personalizados.

Por exemplo, pode-se enviar página HTML, agradecendo o

usuário, mencionando seu nome na página, por ter preenchido

um formulário.

Arquitetura da Web

CGI

Page 24: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 24

Gateway para outros serviços:

Gateways são “pontes” de comunicação para outros

serviços, por exemplo, as informações vindas de formulário

podem ser gravadas em um banco de dados, ou então

requisição web podem originar chamada a drivers capazes

de ativar componentes específicos (como envio de

mensagens para “pagers”), interface com telefones

celulares e etc.

Quando uma requisição CGI é enviada, o controlador CGI

localiza no diretório destinado aos scripts CGI, o programa

a ser acionado. Após esta localização, o programa é lido do

disco e executado em memória, sendo este recurso liberado

após o processamento. Assim estabelece-se o fluxo de

processamento CGI:

RequisiçãoAcesso a

DiscoExecução

Emissão de

resposta

Liberação

do recurso

Arquitetura da Web

CGI

Page 25: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 25

Características Funcionais:

Gateway para outros serviços

Para cada requisição é gerado um novo fluxo, para grande

volumes de requisições, será necessário infra estrutura, para

responder tal volume. A maior desvantagem no uso do CGI é

que ele pode sobrecarregar o servidor, a maioria das

soluções, acabam por limitar a portabilidade.

RequisiçãoAcesso a

DiscoExecução

Emissão de

resposta

Liberação

do recursoRequisição

Acesso a

DiscoExecução

Emissão de

resposta

Liberação

do recursoRequisição

Acesso a

DiscoExecução

Emissão de

resposta

Liberação

do recursoRequisição

Acesso a

DiscoExecução

Emissão de

resposta

Liberação

do recursoRequisição

Acesso a

DiscoExecução

Emissão de

resposta

Liberação

do recurso

Requisições

Servidor

Arquitetura da Web

Componentes Web: CGI

Page 26: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 26

PerlPerl (Practical Extraction and Reporting Language) é uma linguagem que usa técnicas de orientação a objetos que combina um mix de C e Unix, tornando-se, uma das opção poderosa ferramentas para desevolvimento da Internet.

Características:

Os programas feito para Perl são escrito em arquivos ASCII e

depois executados em Perl.

As classes e rotinas de bibliotecas, estão contidas em módulo

(arquivo Perl com a extensão .pm)

Disponibilidade.

Existem disponíveis gratuitamente, diversos módulos Perl. Os

módulos mais comuns utilizam o ODBC para acessar os

diversos Banco de dados, possibilitando a portabilidade do

programa para vários formato diferentes

CGI e Perl

um casamento

perfeito

Arquitetura da Web

Componentes Web: CGI

Page 27: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 27

Integração CGI e PerlQuando um usuário submete uma requisição o CGI/Perl fazem o processamento de entrada (validando os dados) e a saída (reposta ao envio do formulário)

Nome

Cidade

Cep

OK

<input... Name=Nome...>

<input... Name=Cidade...>

<input... Name=Cep...>

Ins_cli.pl

Ins_cli.html

HTML

Que contém um Form<...Action=“.../Ins_cli.pl...>

CGI em Perl (Ins_cli.pl)Recebe os dados inseridos

no Form (CGI_Lite)

Retorna uma página

HTML (on the fly)

agradecendo a adesão.

Arquitetura da Web

Componentes Web: CGI

Page 28: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 28

Integração CGI e Perl (Exemplo)

A arquitetura básica é a mesma para cada Banco de Dados:

uma requisição de é enviada contendo uma consulta SQL, por

meio de formulários HTML.

Por meio de chamadas CGI ou API, o servidor Web submete o

formulário a um agente SGBD, que o converte em uma consulta

SQL específica de Banco de Dados. Os resultados são

formatados em HTML e devolvidos pelo gateway CGI ou API

para servido web, e de volta Browser.

CGI

(Programa .PL)

ODBC

Interface

Win::ODBC

SGBD SGBD

Cliente

(browser)

Servidor

(Web Server)

Dados

(Banco de

Dados)

Arquitetura da Web

Componentes Web: CGI

Page 29: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 29

Arquitetura da Web

Componentes Web

Componentes Web, são parecidos componentes de

software:

“ Componentes são unidades de software freqüentemente

usadas no desenvolvimento de aplicações. Um

componente é genérico o suficiente para que possa ser

usado em diversos programas, é eficiente, fácil de usar,

possível de ser combinado com outros componentes e

tem interface bem definida”

Exemplos de componentes de Software:

- JavaBeans

- Enterprise JavaBeans

- COM (DLLs e ActiveX)

- etc

Exemplos de componentes de web (Tecnologia Java):

- JSP

- Java Servlet

Esses componentes são classes e interfaces Java com

propósito bem definido e somente podem ser executados

em ambiente especifico.

Estes ambientes são chamados de contêineres.

Page 30: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 30

Arquitetura da Web

Componentes Web: Servlets

Servlets:

A API Java Servlet é uma extensão da plataforma Java que

permite que os desenvolvedores adicionem, nos servidores

web, mecanismos que estendam sua funcionalidade.

Um Servlet executa somente no Side Server (lado servidor).

Um Servlet pode fornecer vários serviços ao Servidor Web

como por exemplo:

• Processar formulários;

• Persistência de conexões http;

• Fazer acesso a Banco de Dados;

• Enviar de e-mail automáticos;

• Agentes de procura;

• Compatibilidade com vários protocolos (http, url, ftp)

Page 31: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 31

Arquitetura da Web

Componentes Web: Servlets

Comparação CGI vs Servlets:

A tecnologia Servlets oferecem algumas vantagens sobre as

aplicações baseadas em CGI, entre elas podemos destacar:

-Independência de plataforma, ou seja, portabilidade;

-Melhor performance;

-Extensibilidade;

-Facilidade de manutenção;

-Consome menos memória, pois quando um novo programa

CGI é carregado para cada requisição, um servlet é carregado

somente uma vez e para cada nova requisição é gerado uma

nova thread e

-Servlet podem ter acesso o jogo grande de APIs disponível

para a plataforma de Java.

Page 32: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 32

Arquitetura da Web

Page 33: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 33

Arquitetura da Web

• Páginas Cliente são a abstração de páginas Web

como elas são vistas no lado cliente (página HTML)

• Atributos da página cliente representam variáveis do

Script. Operações da página cliente representam as

funções do Script.

• Associações das páginas cliente normalmente são

feitas com objetos do lado cliente (applets, ActiveX,

objetos Script e etc)

• As páginas cliente tem associações do tipo <<link>>

com outras páginas cliente.

Páginas Clientes

Page 34: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 34

Arquitetura da Web

Páginas Clientes

BrowserScripts

Plug ins

Sockwave

(Flash)

Real Video

PDF

Applet Java

JavaScript

VBScript

JScript

Linguagens

HTML

XML

Internet Explorer

Netscape

Opera

Mozilla

Tecnologias no lado cliente:

Page 35: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 35

Arquitetura da Web

Page 36: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 36

Server Pages

O que são Server Pages ?

Uma <<Server Page>> é um estereótipo de classe que

abstrai o comportamento da página Web no lado server

• Operações são funções executadas no server

• Atributos são variáveis no escopo da página

• Associações são feitas com recursos do lado server

(componentes, bancos de dados, sistemas externos e

etc)

O principal papel destes scripts é separar “Conteúdo”

da “Lógica de Negócio”.

Arquitetura da Web

Page 37: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 37

O que é ASP?

ASP (Active Server Pages) é uma tecnologia

criada pela Microsoft, que combina

instruções HTML, comandos script e

componentes ActiveX, para criar páginas

web com conteúdo dinâmico. Os scripts são

executados no servidor web (“Server-side”),

ao contrário de outros scripts, como

Javascript que são executados no “Browser”

do cliente (“Client-side”).

Em ASP podem ser usados com quaisquer

linguagens que suportem ActiveX scripting,

tais como: Javascript, VBScript, PerlScript,

Rexx, Phyton e etc.

Plataforma para ASP

Originalmente, ASP somente poderia ser

utilizada com servidores web da Microsoft

(Personal WebServer e IIS), para a

plataforma Windows. Atualmente existem

fornecedores para outra plataforma, por

exemplo, Unix. Entre eles estão Sun (http://wwws.sun.com/software/chilisoft/index.html)

Ferramentas de Produtividade

Embora as páginas ASP possam ser criadas

a partir de simples Editor de Texto, como

Bloco de Notas, ou dos mais populares,

como FrontPage, Dreamweaver.

Server Pages Arquitetura da Web

Page 38: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 38

PHP (Personal Home Page)

Baseada em C++, PHP fica embutido no script

HTML, oferece suporte a a SGBD (dBase,

Interbase, mSQL, mySQL, Oracle, Sybase,

PostgreSQL e vários outros);

Protocolos como IMAP, SNMP, NNTP, POP3 e

HTTP; Seu módulo de compilação é pequeno e

rápido;

Criada em 1994 por Rasmus Lerdorf,

aperfeiçoado pelo projeto Zend 2000 - PHP4. É

“Open Source”.

Server Pages

Arquitetura da Web

Page 39: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 39

Server Pages

JavaServer Pages é uma extensão da tecnologia

Java Servlets, que simplifica o processo de

desenvolvimento de sites com conteúdo dinâmico.

Com JSP os designers e programadores podem

rapidamente incorporar elementos dinâmicos em

páginas usando o Java embutido e algumas tags de

marcação simples (HTML).

Estas tags fornecem ao designer de HMTL um meio

de fazer acesso aos dados e lógica de negócios

armazenadas em objetos (javabeans e EJB) sem

precisar conhecer as complexidades do

desenvolvimento de aplicações.

JavaServer Pages usam tags XML e scriptlets para

escrever programas em Java para encapsular a

lógica que gera o conteúdo para a página

Arquitetura da Web

+ Veja mais em: Solução Java - JavaServer

Pages

Page 40: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 40

Tecnologia Java:

Applet, Java Servlet e JavaServer Pages (JSP), EJB

JavaMail e JMS são tecnologias do framework J2EE,

que permitem desenvolver aplicações para Internet,

os recursos fornecidos por esta tecnologia

proporcionam a criação de aplicações com conteúdo

dinâmico, robusta, segura, portáveis, pois, são

independentes de plataforma e com recursos de

orientação ao objetos. Servlet e JSP são partes

integrantes da J2EE.

Destaques da tecnologia Java:

Portabilidade;

Controle de exceção;

Gerenciamento de alocação de memória;

Permite fazer acesso à gama extensiva de Java

APIs (JDBC, JavaMail, etc.);

Componentes de lógica portáteis com ênfase ao

reúso;

Desempenho;

Page 41: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 41

Page 42: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 42

JavaServlets Tomcat

O que é o Tomcat ?

Para desenvolvermos aplicações Web Java

(Servlet e JSP) precisamos de web container

ou algo similar. No nosso caso Tomcat é ideal.

É servlet container, também conhecido como web

container, que é usado como referência oficial da

implementação da tecnologia Servlet e JSP.

É um projeto “open source”

Cada versão do Tomcat atende uma versão Servlet

e JSP:

http://jakarta.apache.org/tomcat/index.html

Servlets JSP Tomcat

2.4 2.0 5.X.X

2.3 1.2 4.1.29

2.2 1.1 3.3.1avers

ões

Isto significa que vamos precisar do arquivo servlet.jar

(tomcat_home\commom\lib) para compilar as aplicações. Você

pode colocar a referência deste arquivo na Classspath.

Page 43: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 43

JavaServlets Tomcat

Quais são os pré-requisitos

para instalar o Tomcat ?

Precisamos criar algumas variáveis de ambiente:

TOMCAT_HOME | CATALINA_HOME (depende

da versão que estou instalando)

Precisamos também do Kit de desenvolvimento

Java (j2sdk1.4.1_XX) instalado e suas variáveis

de ambiente como JAVA_HOME e Classpath.

Após a instalação do Tomcat você terá algumas

pastas, que representam a estrutura do Tomcat, veja

algumas delas:

Pasta Descrição

binOs executáveis do Tomcat e arquivos para iniciar e

parar o serviço

Commom

classes

lib

Nesta pasta colocamos todas as classes, na

subpasta classes e os jar na subpasta lib, que são

comuns a todas as aplicações.

conf

Estrutura do Tomcat

Nesta pasta encontramos os arquivos de

configuração do Tomcat, como: server.xml e outros

logsNesta pasta encontramos os arquivos de

log do Tomcat e das aplicações

Webapps

Root

<contexto>

Esta pasta é onde publicamos as aplicações web.

Você poderá colocar as aplicações no contexto

Root ou criar um novo contexto para sua aplicação

Page 44: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 44

JavaServlets Tomcat

Como o Tomcat funcionar ?

Para iniciar o Tomcat você tem algumas opções

veja algumas delas:

- Se você optou por instalar o Tomcat como um

serviço (caso Windows), basta iniciá-lo a partir

da janela de serviços.

- Uma outra opção é executar o arquivo startup.bat

(windows) ou startup.sh (Unix), para iniciar o

serviço. Para parar use o arquivo shutdown.bat

ou shutdown.sh (Unix)

Page 45: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 45

Page 46: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 46

Page 47: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 47

JavaServlets

Introdução

Interaçao com Servlets

Aplicação dos Servlets

Eu preciso de container Web ?

O que é container web ?

Container Web e Servidores Web

Como um Container Web Trabalha

Arquitetura:

Os pacotes

Ciclo de Vida

O pacote: Generic Servlet

O pacote: HTTP Servlet

Generic Servlet vs HTTP Servlet

Configuração, Deployment e afins

WAR Web Archive

Formulários HTML e Servlets

Formulários e tags

Metodos HTML vs HttpServlet

Tag INPUT

Tutorial

Debug

Descritor Web.xml

Arquivo descritor

Tutorial

Métodos: getInitParameter, getInitParameterNames...

Exercício

Os elementos do arquivo descritor

Escrevendo documento XML Boas Práticas

Cookie, Sessões...

Introdução

API HTTP Servlet, a classe Cookie

usando Cookies

Sessões

A interface HttpSession

Timeout

Usando Sessões

Conteúdo

Page 48: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 48

JavaServlets

Despachar e Redirecionar Requisições

Interface RequestDispatcher: forward e include

Redirecionar: sendRedirect e SendError

Servlet Context

Introdução

A interface ServletContext

A interface ServletConfig

Interface ServletContextListener

Tratando Erros e Exceções

Introdução

A classe ServletException

Erros HTTP

Personalizando Páginas de erro

Tutorial

Threads

Sincronização

A intergace SingleThreadModel

Segurança

Autenticação

Autorização e Perfis

Segurança e Perfis no Tomcat

Tutorial: Protegendo um recurso com a MemoryRealm

Filtros

Introdução

Interface Filter

Interface FilterChain

Interface FilterConfig

Os elementos do Filtro

Tutorial

Boas Práticas

Conteúdo

Page 49: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 49

JavaServlets

Page 50: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 50

O que é um Servlet ?

Servlets é uma tecnologia que estende a funcionalidade de

servidores Web. Um servlet é um componente web,

administrado por um container web que é responsável pelo

seu ciclo de vida.

Servlets são programas baseado na tecnologia Java (que é

independentes de plataforma) e podem ser dinamicamente

carregados e executada em ambiente de Internet. Os servlets

só executam no lado servidor.

JavaServlets

O que é um

Servlet ?

Introdução

Page 51: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 51

Como feito a interação com Servlet ?

Como os servlets são projetados para a Internet as interações

entre os clientes (os browsers) e um servlet dar-se-á através

do paradigma requisição (request) e resposta (response).

O cliente faz uma requisição e o servlet (container web)

retorna uma resposta. Este paradigma de requisição e

resposta é baseado no Hipertexto Transferência Protocolo

(HTTP).

JavaServlets

Principais características da Tecnologia:

•Suporte a multithread (multi programação)

•Suporte a todas as API Java (JDBC, JMS, Java2D, JavaMail e

etc)

•Controle de sessão ;

•Persistência via Cookies e

•Servlet container pode suportar ainda o HTTPs (HTTP + SSL)

para dar suporte a transações seguras.

Principais vantagens quando se usa os Servlets:

- Manutenção centralizada;

- Clientes mais leves, pois, todo processamento está no lado

servidor;

- Desempenho;

-Segurança;

-Por ser baseado na linguagem Java tem suporte a orientação ao

objetos e demais características desta tecnologia e

- Extensibilidade através das APIs da Linguagem Java.

Introdução

Page 52: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 52

Você poderá usar Servlet para fazer diversas coisas, deste

uma simples resposta de requisição http até como parte

integrante de uma aplicação web.

Um Servlet pode fornecer vários serviços ao Servidor Web

veja alguns exemplos:

• Processar formulários;

• Persistência de conexões http;

• Fazer acesso a Banco de Dados;

• Enviar e-mail automáticos;

• Suporte a ferramenta de busca;

• Permite compatibilidade entre protocolos (http, url, ftp);

• Gerar documentos em vários formatos, tais como XML, PDF

e imagens (GIF, JPG e PNG);

• Fazer integração com legado e.

• Em uma aplicação Web desenvolvida em camadas o

servlet tem o papel de “Controller”.

JavaServlets

Quando usar

Servlet ?

Introdução

Page 53: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 53

Eu preciso de Container Web ?

Os servidores web entende um conjunto de serviços

baseados no protocolo HTTP, o que é muito limitado para as

algumas necessidades dos usuários.

Vejamos o caso a seguir:

Alguém quer saber o saldo de sua conta corrente, ela poderia

conseguir esta informação de várias maneiras.

Todavia a maioria dos bancos fornecem este serviço através

da Internet, são os chamados de “Home banking”.

Porém esta necessidade está além dos serviços oferecidos

pelo Servidor Web, pois, será necessário executar um

programa externo para atender a necessidade do usuário.

Para isto, precisaremos de um tecnologia adicional, tais como

CGI, ASP, PHP ou Java (Servlet ou JSP), bem no nosso caso

ficaremos com a tecnologia Java.

Para implementar a tecnologia escolhida precisamos de um

ambiente que dê suporte a ela. O web container pode ser

a solução para este problema...

JavaServlets

Qual é

meu saldo ?

Introdução

Page 54: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 54

JavaServlets

O que é um Container Web ?

O container web, também são conhecido como servlet

container, é o ambiente que é responsável por tratar as

requisições Servlet e/ou JSP. Este container proverá respostas

das requisições dos usuários, desta forma conseguiremos

suprir algumas necessidade dos usuários. Exemplo: Saber o

saldo de sua conta corrente.

Browser

(cliente)

Servlet

Container

Servlet /

JSP

Conteúdo

estático

(html)

Requisição HTTP

Resposta HTTP

Servidor Web

(HTTP)

Este é um exemplo de arquitetura onde um servidor web,

também é conhecido como Servidor HTTP, (Apache, por

exemplo) recebe as requisições que são submetidas ao

servidor.

O servidor verifica se a requisição do cliente é uma chamada

Java, ou seja, Servlet ou JSP. E direciona para container web

que receberá esta requisição e a responderá.

Se for uma requisição padrão o próprio servidor web resolverá.

Exemplo: Requisição de uma página HTML estática.

Introdução

Page 55: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 55

Container Web e Servidores Web:

Existem diversos containeres Web disponíveis no mercado,

entre eles podemos destacar o Tomcat (jakarta.apache.org).

O tomcat é um robusto container web, “open source” e escrito

em linguagem java.

A mesma coisa vale para servidores web, nossa sugestão vai

para o Apache (apache.org)

Serviços:

http, pop3

ftp e etc

Web

Container+

Servidor Web

JavaServlets

Apache (Unix, Linux e Win32)

ou MSIIS (Win32 )

Tomcat, Jetty, Resin...

A liberdade de escolha sempre é importante. Por isso você

poderá optar por qualquer Servidor Web e por qualquer

container web. Exemplo: Você poderia utilizar o Internet

Information Server, como Servidor Web e Resin, como web

Container ou o Tomcat.

Introdução

Page 56: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 56

JavaServlets

Uma outra opção para de uso do container web é a utilização

sem um servidor web. Uma vez que ele é baseado no

protocolo HTTP ele também consegue entender as

requisições não Java, como chamada a conteúdo estático.

Este é um exemplo de arquitetura onde um container web

recebe requisição HTTP e a responde.

Contudo, esta arquitetura é mais limitada que anterior, pois,

ela não teria como tratar um “módulo” para dar suporte a PHP

ou a outro recurso.

Browser

(cliente)

Servlet

Container

Servlet

Conteúdo

estático

(html)

Requisição HTTP

Resposta HTTP

Uma terceira opção seria utilizar um Servidor de Aplicação,

como JBoss (www.jboss.org) que possui container web

embutido, o Jetty e/ou Tomcat.

Como você pode perceber que existem diversas opções para

usar container web. Faça sua opção e mãos obra.

Introdução

Page 57: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 57

Como um Container Web Trabalha:

JavaServlets

Requisição HTTP

Servlet está

carregado?

É servlet

corrente ?

Processa Resposta

Retorna resposta HTTP

sim

sim

não

Carrega Servlet

não

Resposta HTTP

Recebe requisição HTTP

(servlet ou JSP)

Introdução

Page 58: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 58

JavaServlets

Page 59: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 59

JavaServlets

javax.servlet javax.servlet.http

Arquitetura: Os pacotes

A tecnologia Java Servlet baseia em conjunto de

classes e interfaces que possibilita criar aplicações

web.

A arquitetura servlet tem alguns pacotes, os mais

importantes são: javax.servlet e o javax.servlet.http

O pacote javax.servlet contém uma interface genérica

e as classes que são implementados e estendem por

todos servlets.

O pacote javax.servlet.http contém as classes que

são estendidas quando criam especificação servlet

HTTP.

Arquitetura

Page 60: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 60

JavaServlets

Arquitetura: Ciclo de Vida

O núcleo desta arquitetura é a interface

Javax.servlet.Servlet. Ela fornece o “framework” para

todo o servlets.

A interface servlet define alguns métodos:

- init()

- service()

- destroy()

- servletConfig() e

- getServletInfo()

Pronto

inicio

init()

destroy()

fim

Arquitetura

Clico de Vida:

doGet() | doPost() | service()...

Page 61: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 61

Clico de Vida:

O método init é invocado quando o Servlet é carregado pela

primeira vez e somente na primeira inicialização do Servlet.

Este é um bom local para declarar variáveis ou ler parâmetros.

O método recebe um argumento, uma referência ao objeto

ServletConfig.

O método service, este é o núcleo do Servlet, é neste método

que as requisições são recebidas, onde ocorre o processamento

e o envio da resposta para o cliente.

Este método recebe dois parâmetros um ServletRequest e um

ServletResponse que correspondem a Requisição e Resposta.

O método destroy, é chamado antes que o Servlet seja

finalizado.

O objetivo deste método é possibilitar a liberação dos recursos.

JavaServlets Arquitetura

Interface Servlet do pacote javax.servlet é responsável pelo

ciclo de vida dos servlets.

Esta interface tem cinco métodos, destacando-se os métodos:

- init(), service() e destroy(). Outros métodos: getServletConfig() e getServletInfo()

Page 62: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 62

Generic Servlet

JavaServlets Arquitetura

GenericServlet

{abstract}

service()

<<interface>>

Servlet

service

<<interface>>

ServletRequest

seuServlet

service()

javax.servlet

<<interface>>

ServletResponse

getWriter(): PrintWriter

public abstract class

GenericServlet

extends java.lang.Object

implements Servlet,

ServletConfig,

java.io.Serializable

<<interface>>

ServletConfig

public abstract interface

Servlet

import javax.servlet.*;

import javax.io.*;

public class seuServlet extends GenericServlet {

public void service(Servlet req, ServleResponse

response){

...

}

}

Page 63: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 63

Generic Servlet

JavaServlets Arquitetura

import javax.servlet.*;

import java.io.*;

public class GenericServletHello extends GenericServlet {

public void service(ServletRequest request, ServletResponse response)

throws IOException

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<body>");

out.println("<head>");

out.println("<title>Generic Hello World!</title>");

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

out.println("<body>");

out.println("<h1>Hello World!</h1>");

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

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

}

}

Classe GenericServletO pacote Servlet

Corpo da resposta

O método service() pertence a classe GenericServlet. O servlet

GenericServletHello herda este métodos (outros também são herdados)

e sobre-escreve. Este método recebe uma requisição e processa uma

resposta, aqui no formato HTML.

Page 64: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 64

Generic Servlet

JavaServlets Arquitetura

Abaixo um exemplo de como o Web container trabalha, ou seja, processa

uma requisição e retorna uma resposta ao cliente no formato HTML.

Browser

(cliente)

Servlet

Container

Requisição HTTP

Resposta HTTP

http://localhost:8080/servlet/GenericServletHello

<<html>

<body>

<head>

<title>Generic Hello

World!</title>

</head>

<body>

<h1>Hello World!</h1>

</body>

</html>

Hello

World!GenericServletHello{service(ServletRequest req,

ServletResponse res){

....

}

}

Requisição

Resposta

1

2

3

4

5

javax.Servlet

Page 65: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 65

HTTP Servlet

JavaServlets Arquitetura

GenericServlet

{abstract}

service()

<<interface>>

HttpServlet

doGet()

doPost()

doPut()

doDelete()

doHead

doTrace()

<<interface>>

HttpServletRequest

seuServletservice | doGet | doPost

e etc...

javax.servlet.http

<<interface>>

HttpServletResponse

getWriter(): PrintWriter

public abstract class

HttpServlet

extends GenericServlet

implements

java.io.Serializable

import javax.servlet.http.*;

import javax.io.*;

public class seuServlet extends HttpcServlet {

public void doGet(HttpServletRequest req,

HttpServleResponse response){

...

}

}

Page 66: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 66

JavaServlets Arquitetura

import javax.servlet.http.*;

import java.io.*;

public class ServletHello extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse

response)

throws IOException

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<body>");

out.println("<head>");

out.println("<title>Simple Hello World!</title>");

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

out.println("<body>");

out.println("<h1>Hello World!</h1>");

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

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

}

}

Classe GenericServletO pacote Servlet

Corpo da resposta

O método doGet pertence a classe HttpServlet. Este método é herdado

pelo ServletHello e que faz um “overriding” do método.

O papel do doGet é processar uma requisição e devolver uma resposta,

ao cliente.

HTTP Servlet

Page 67: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 67

JavaServlets Arquitetura

Browser

(cliente)

Servlet

Container

Requisição HTTP

Resposta HTTP

http://localhost:8080/servlet/ServletHello

<<html>

<body>

<head>

<title>Generic Hello

World!</title>

</head>

<body>

<h1>Hello World!</h1>

</body>

</html>

Hello

World!ServletHello{doGet(HttpServletRequest req,

HttpServletResponse res){

....

}

}

Requisição

Resposta

1

2

3

4

5

javax.servlet.http

HTTP Servlet

Abaixo um exemplo de como o Web container trabalha, ou seja, processa

uma requisição e retorna uma resposta ao cliente no formato HTML.

Page 68: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 68

A principal diferença entre os pacotes é que enquanto o

pacote javax.servlet oferece um único método genérico,

service, para tratar as requisições e as respostas.

O pacote javax.servlet.http oferece vários métodos (doGet,

doPost, doPut, doDelete, doHead e doTrace) para tratar as

requisições. Os métodos oferecidos tem funcionalidade

similar os métodos do protocolo HTTP.

Assim podemos tratar cada requisição de acordo com as

características presentes nos métodos do HTTP, ou seja, o

método get seria tratado pelo doGet e assim por diante.

Desta forma este o pacote javax.servlet.http é mais

indicado.

JavaServlets

Qual é a diferença

entre os pacotes ?

Introdução

Generic Servlet vs HTTP Servlet:

Page 69: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 69

import java.io.*;

import javax.servlet.*;

public class GenericServletHello1 extends GenericServlet {

public void doGet(ServletRequest request, ServletResponse response)

throws IOException

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<body>");

out.println("<head>");

out.println("<title>Generic Hello World!</title>");

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

out.println("<body>");

out.println("<h1>Hello World!</h1>");

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

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

}

public void service(ServletRequest request, ServletResponse response)

throws IOException

{ }

}

JavaServlets

Qual é resposta que

servlet irá devolver ?

Quiz-Show

1 ( ) Hello world!

2 ( ) Nada

3 ( ) Erro

Page 70: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 70

JavaServlets

Page 71: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 71

Para chamar um servlet que está no contexto “root”. Execute

os seguintes passos:

1 - Copie o servlet HelloServlet.class para a pasta:

....\webapps\ROOT\WEB-INF\classes

2 - Chame o browser (tenha certeza que o serviço do tomcat

esteja funcionando)

3 - No browser digite a seguinte URL:

http://localhost:8080/servlet/ServletHello

JavaServlets

Como posso

chamar os

servlets ?

Aplicação Web

webapps

ROOT

WEB-INF

WebContainer

Aplicação

classes

servlet

O contexto “root”

HelloServlet.class

web.xml

Diretório de

Deployment

JSPs | HTML | Imagens | etc

lib

configurações

Page 72: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 72

Para criar seu próprio contexto faça o seguinte:

1 - Criar uma pasta com o nome do contexto. Exemplo: loja

2 - Criar dentro da pasta loja a pasta: WEB-INF.

3 - Criar dentro da pasta WEB-INF o arquivo chamado

web.xml, que será utilizado para fazer as configurações da

aplicação.

3.1 Ainda dentro da pasta WEB-INF crie duas pastas a

classes (para os servlets e demais classes) e a pasta lib

(para os arquivos jar)

4 - Copie a pasta loja para a pasta: ....\webapps\

5 - Chame o browser (tenha certeza que o serviço do tomcat

esteja funcionando)

6 - No browser digite a seguinte URL:

http://localhost:8080/loja/

JavaServlets

Posso criar

o meu próprio

contexto ?

Aplicação Web

contexto

Page 73: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 73

JavaServlets

webapps

ROOT

WEB-INF

WebContainer

web.xml

classes

loja

WEB-INF

HelloServlet.class

Aplicação

classes servlet

Contexto

O contexto “root”

HelloServlet.class

web.xml

Aplicação Web

Diretório de

Deployment

JSPs | HTML | Imagens | etc

JSPs | HTML | Imagens | etc

lib

jars

Javabeans e classes

lib

Configurações da aplicação

Page 74: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 74

JavaServlets Aplicação Web

Como posso verificar o “status” do contexto criado ?

- Para verificar o status de contexto ou para gerencia-lo é necessário ter a senha

de administrador do Tomcat. Veja abaixo;

Na página index.jsp do Tomcat selecione o link

Tomcat Manager e depois informe o nome do

usuário e senha. Lembre-se que usuário deve

ter o papel de administrador.

Tomcat Web Application Manager

Message

Manager

Applications

List Applications HMTL Manager Help Manager Help Server Status

Path Display Name Running CommandsSession

loja Loja true Start Stop Reload Undeploy0

Page 75: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 75

JavaServlets

Page 76: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 76

Módulo WAR (Web Archive)

Arquitetura da Web

JavaServlets WAR

A melhor estratégia para “empacotar” e fazer deployment de

aplicações web é através da criação de um módulo WAR.

O módulo war é um arquivo do tipo “Jar” que pode incluir uma

aplicação web completa.

Um war pode conter páginas estáticas html, páginas dinâmicas

(JSP), imagens, servlets, classes java, componentes

javabeans e etc.

Para criar um módulo (arquivo) war utilizar a ferramenta jar do

J2SDK

Loja

WEB-INF

classes

lib

component.jar

servlet.class

web.xml

index.jsp

Para fazer o deployment no Tomcat coloque o arquivo war

dentro da pasta ..\webapps

Sintaxe:

jar <opções> <nome do arquivo war> <lista de arquivos>

Exemplo:

jar cvf <loja.war> *.*

Loja.war

(módulo WAR)

Page 77: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 77

Exercício:

1 - Criar um contexto chamado teste, para este contexto você

também deverá criar a estrutura necessária para aplicação

web, ou seja, as pasta WEB-INF, classes, lib e etc...

2 - Criar o arquivo chamado teste.war, para isto você dever

utilizar a ferramenta jar;

3 - Fazer o deployment do módulo teste.war;

4 - Fazer validação do contexto criado. Para isto você poderá

criar um simples página chamada index.html e coloca-lo

dentro do contexto.

JavaServlets Aplicação Web

exercício

Page 78: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 78

JavaServlets

Page 79: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 79

Formulários:

Para enviar dados para um servidor web, usamos os formulários.

Eles extremamente úteis para esta tarefa.

Além do envio de dados, pode-se ainda fazer requisição de

serviços, tais como:

- Acesso a banco de dados;

- Envio de e-mail e

- Executar uma aplicação

- E etc.

Os formulários trabalham com conceito de pares chaves, nome e

valor.

Basicamente a informação é enviada ao servidor em duas

partes: a primeira o identificador, ou seja, o nome e depois os

dados em si (o valor).

Por exemplo:

Numa caixa de texto com o nome como cliente onde o usuário

digitou “Ferreira”, os dados serão enviados para o servidor da

seguinte forma: cliente = Ferreira.

JavaServlets Formulários HTML & Servlets

Page 80: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 80

Tags HTML:

A tag <FORM> </FORM> delimita um formulário e contém uma

seqüência de elementos de entrada e de formatação do

documento.

<FORM ACTION="URL_de_script"

METHOD=método>...</FORM>

ACTION:

Especifica o endereço URL ou URI para qual serão enviados os

dados do formulário.

METHOD:

Seleciona um método para acessar o URL de ação. Os métodos

mais populares são GET e POST. Ambos os métodos

transferem dados do browser para o servidor.

Para formulário enviar os dados ao um Servlet é necessário

usar um método de envio: Get ou Post.

Também é preciso apontar para uma URL, que representará a

chamada do servlet.

Exemplo 1: URL completa

<FORM ACTION= ="http://localhost:8080/servlet/Dados"

METHOD="POST">

URL Servletmétodo de envio

Exemplo 2: Apenas parte da URL (URI)

<FORM ACTION= ="/servlet/Dados" METHOD=”GET">

JavaServlets Formulários HTML & Servlets

Page 81: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 81

Metodos HTML vs HttpServlet:

JavaServlets Formulários HTML & Servlets

HTTP HttpServlet (Java)

get doGet

put doPut

head doHead ou doGet

delete doDelete

options doOptions

trace doTrace

post doPost

Page 82: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 82

Tags HTML: INPUT

Dentro de um formulário a tag INPUT define os campos de

entrada de dados.

Padrão de tipo de entrada de dados:

- Botões, checkboxes, password, “radio buttons”, campo de

texto, botões de imagens, Text Area e Hidden fields e etc

Os campos geralmente são associados a um nome e um valor

Exemplo: (fragmento de formulário)

<FORM ACTION="/servlet/Processa" METHOD=”Post">

<BR>Nome: <INPUT TYPE="text" NAME="nome" SIZE=20 TABINDEX=1>

<BR>Idade: <INPUT TYPE="text" NAME="idade" TABINDEX=2>

<INPUT TYPE="submit" VALUE="Enviar">

<INPUT TYPE="reset" VALUE="Limpar">

</FORM>

Tag INPUT, aqui somente

botões e caixa de texto

JavaServlets Formulários HTML & Servlets

Page 83: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 83

Dados

Eventos

<HTML>

<TITLE>

Dados

</TITLE>

<BODY>

<H1>Preencha os campos:</H1>

<FORM ACTION="/servlet/ChkForm1" METHOD=”get”>

<BR>Nome: <INPUT TYPE="text" NAME="nome" SIZE=20 TABINDEX=1>

<BR>Idade: <INPUT TYPE="text" NAME="idade" TABINDEX=2>

<HR>

<INPUT TYPE="submit" VALUE="Enviar">

<INPUT TYPE="reset" VALUE="Limpar">

</HR>

</FORM>

</BODY>

</HTML>

Tutorial, parte 1 - O Formulário HTML:

JavaServlets Formulários HTML & Servlets

URI (contexto e servlet)

Método de envio:get

Nome do formulário: Form.html

Page 84: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 84

Tutorial, parte 2 - Escreva o servlet para tratar os dados do

formulário:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class ChkForm extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

// Ajusta o tipo de conteúdo (Mime)

res.setContentType("text/html");

PrintWriter out = res.getWriter();

String nome = req.getParameter("nome");

int idade = Integer.parseInt (req.getParameter("idade") ) ;

//Corpo da Resposta

out.println("<HTML>");

out.println("<HEAD><TITLE>Saudação</TITLE></HEAD>");

out.println("<BODY>");

out.println("Hello, " + nome);

out.println("</BODY></HTML>");

}

}

JavaServlets Formulários HTML & Servlets

Page 85: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 85

webapps

ROOT

WEB-INF

WebContainer

Formulário HTML

classes

servlet

O contexto “root”

ChkForm.class

Web.xml

Form.html

Tutorial, parte 3 - Deployment:

Para encerrar chame o formulário, digitando a seguinte URL:

http://localhost:8080/Form.html

Preencha os dados e envio o formulário que será processado

pelo Servlet (ChkForm).

Faça a distribuição dos arquivos:

JavaServlets Formulários HTML & Servlets

Page 86: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 86

<<interface>>

ServletRequest

getParameter(name): String

getParameterValues(name): String[]

getParameterNames(): Enumeration

...

javax.servlet

public abstract interface ServletRequest

A ServletRequest captura dados como parâmetros (nomes e valores),

atributos e fluxo de dados.

Define um conjunto de métodos para capturar os dados dos clientes.

Esses dados serão tratados pelo Servlet. Na verdade pelos métodos:

doGet, doPost ou service.

JavaServlets Formulários HTML & Servlets

Page 87: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 87

<HTML><HEAD><TITLE>Dados</TITLE></HEAD>

<BODY>

<H1>Preencha os campos:</H1>

<FORM ACTION="/servlet/ChkForm1" METHOD="Post">

<BR> Nome: <INPUT TYPE="text" NAME="nome" SIZE=20

TABINDEX=1>

<BR>Idade: <INPUT TYPE="text" NAME="idade" SIZE=10

TABINDEX=2>

<HR>

<INPUT TYPE="submit" VALUE="Enviar">

<INPUT TYPE="reset" VALUE="Limpar">

</HR>

</FORM>

</BODY>

</HTML>

Ooops...

Onde está problema ?

Debug

Formulário HTML: Form1.html

Apache Tomcat/4.0.6 - HTTP Status 405 - HTTP method POST is not

supported by this URL

type Status report

message HTTP method POST is not supported by this URL

description The specified HTTP method is not allowed for the requested

resource (HTTP method POST is not supported by this URL).

JavaServlets Formulários HTML & Servlets

Page 88: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 88

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class ChkForm1 extends HttpServlet {

public void doGet(HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

res.setContentType("text/html");

PrintWriter out = res.getWriter();

String nome = req.getParameter("nome");

int idade = Integer.parseInt (req.getParameter("idade") ) ;

out.println("<HTML>");

out.println("<HEAD><TITLE>Saudação</TITLE></HEAD>");

out.println("<BODY>");

out.println(”Olá, " + nome + “<BR>”);

out.println("Você já viveu, <B> " + AgeToDay(idade) + "</B>");

out.println("</BODY></HTML>");

}

private int AgeToDay (int idade) {

return (int) (idade * 365);

}

}

Onde está problema ?

Servlet: ChkForm1.html

Debug

JavaServlets Formulários HTML & Servlets

Page 89: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 89

JavaServlets

Page 90: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 90

Arquivo Descritor:

Para tornar a configuração mais simples e declarar quais são

os serviços requerido pelo servlet, escrevemos um documento

(arquivo) no formato XML.

Este documento pode ser usado para fazer várias coisas,

entre elas:

- Nomear um servlet;

- Fazer Mapeamento;

- Fazer Filtros;

- Redirecionar Páginas e

- Passar parâmetros externos.

Nome padrão: web.xml

Localização: dentro da pasta WEB-INF

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<servlet>

<servlet-name>Hello</servlet-name>

<servlet-class>ServletHello</servlet-class>

</servlet>

</web-app>Neste exemplo, podemos chamar o servlet por

Hello mesmo que o nome da classe seja

ServletHello, veja que o nome do servlet ficou

mais amigável.

JavaServlets Descritor

Exemplo:

Page 91: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 91

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<servlet>

<servlet-name>Hello</servlet-name>

<servlet-class>ServletHello</servlet-class>

<init-param>

<param-name>mailwebmaster</param-name>

<param-value>webmaster@webmaster</param-value>

</init-param>

</servlet>

</web-app>

Veja que primeiro declaramos o

nome <param-name> do parâmetro

e depois o valor <param-value>

Tutorial: 1 - Criando arquivo Descritor

Declara que o arquivo é XML

Declara o

DTD do

arquivo

Faz a nomeação do servlet

JavaServlets Descritor

Tutorial: 2 - Salve este arquivo como nome de web.xml

Page 92: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 92

Tutorial: 3 - Escrevendo o servlet.

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class ServletHello extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException

{

String param = getInitParameter("mailwebmaster");

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<body>");

out.println("<head>");

out.println("<title>Hello World!</title>");

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

out.println("<body>");

out.println("<h1>Hello World!</h1>");

out.println("<h3>" + param + "</h3>");

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

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

}

}

Captura o parâmetro externo

JavaServlets Descritor

Page 93: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 93

JavaServlets

Métodos: getInitParameter, getInitParameterNames...

javax.servlet

<<abstract>>

GenericServlet

getInitParameter(name: String): String

getInitParameterNames(): Enumeration

log(message: String)

log(message: String, Throwable: exc)

...

A classe abstrata GenericServlet fornece métodos para

capturar os parâmetros

java.util.Enumeration getInitParameterNames()

Retorna todos os nome dos parâmetros de inicialização como

Enumeration de String ou uma Enumeration vazia se não existir

parâmetros de inicialização.

Métodos:java.util.Enumeration getInitParameter(String name)

Retorna uma String contendo o valor do parâmetro de inicialização

passado como argumento. Caso o não encontre o parâmetro o valor

será nulo (null).

classe GenericServlet:

public abstract classe GenericServlet

Descritor

Page 94: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 94

webapps

teste-servlet

WEB-INF

WebContainer

classes

Aqui você

coloca o

Servlet

contexto

ServletHello.class

web.xml

Tutorial, parte 3 - Deployment:

Para encerrar chame o Servlet, digitando a seguinte URL:

http://localhost:8080/teste-servlet/servlet/Hello

Você poderia chamar o servlet com nome padrão:

http://localhost:8080/teste-servlet/servlet/ServletHello

Faça a distribuição dos arquivos:

Aqui você

coloca o

descritor

JavaServlets Descritor

Page 95: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 95

1 - O formulário HTML. Converte.html

JavaServlets Descritor

Exercício

<HTML><HEAD><TITLE>Conversão</TITLE></HEAD>

<BODY>

<H1>Conversão de Real para Dolar:</H1>

<FORM ACTION="/servlet/Conversao" METHOD="Post">

<BR>Valor em Real: <INPUT TYPE="text" NAME="valorReal"

SIZE=20 TABINDEX=1>

<HR>

<INPUT TYPE="submit" VALUE="Converter">

<INPUT TYPE="reset" VALUE="Limpar">

</HR>

</FORM>

</BODY>

</HTML>

Page 96: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 96

Este parâmetros externos devem

ser passados para o servlet

2 -Faça arquivo Descritor

Declara que o arquivo é XML

Declara o

DTD do

arquivo

Faz a nomeação do servlet

JavaServlets Descritor

Obs: Salve este arquivo como nome de web.xml

Exercício

Page 97: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 97

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class ServletConverte extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException

{

String dataCotacao = getInitParameter("dataCotacao");

double valorDolar = Double.parseDouble( getInitParameter("valorDolar") );

double valorReal = Double.parseDouble(request.getParameter("valorReal") );

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<body>");

out.println("<head>");

out.println("<title>Conversão</title>");

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

out.println("<body>");

out.println("<h3>Data cotação do Dólar: " + dataCotacao + "</h3>");

out.println("<h3>Valor do Dolar é de U$: <B>" + valorDolar +

"<b></h3><BR><BR><BR>");

out.println("<h3> Valor em Real R$: " + valorReal + "<b></h3>");

out.println("<h3>Valor em Dolar é de U$: <D>" + conversaoRealToDolar(valorReal,

valorDolar) + "<D></h3>");

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

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

}

private double conversaoRealToDolar(double valorReal, double valorDolar){

return valorReal * valorDolar;

}

}

3 - Servlet: ServletConverte.

Captura o parâmetro externo

JavaServlets Descritor

Exercício

Page 98: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 98

webapps

ROOT

WEB-INF

WebContainer

classes

Aqui você

coloca o

Servlet

contexto

ServletConverte.class

web.xml

4 - Deployment:

Para encerrar chame o Servlet, digitando a seguinte URL:

http://localhost:8080/Converte.html.

Faça a distribuição dos arquivos:

Aqui você

coloca o

descritor

JavaServlets Descritor

Exercício

Page 99: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 99

<servlet>

O elemento <servlet> pode conter os seguintes elementos:

[opcional] <icon>

<servlet-name> declara o nome do servlet

[opcional] <display-name>

[opcional] <description>

<init-param>

<param-name>

<param-value>

[opcional] <description>

<load-on-startup> indica que servlet deve ser carregado

quando uma aplicação web for iniciada.

<security-role-ref> “mapeia” os papéis chamados dentro

de um servlet e o nome do papel definido para aplicações

web.

<role-name> nome do papel usado dentro do servlet

<role-link> o nome do papel definido em elemento

<security-role>

[opcional] <description>

JavaServlets Descritor

<servlet-mapping>

<servlet-mapping> mapeia um servlet para URL padrão

<servlet-name>

<url-pattern>

web.xml

Page 100: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 100

JavaServlets Descritor

<session-config>

<servlet-config> Configura uma sessão de uma aplicação

web

<session-timeout>define o valor padrão de timeout

de uma sessão, valor expresso em minutos

<welcome-file-list>

< welcome-file-list> Define uma lista de arquivos “welcome”

<welcome-file> nome do arquivo

<error-page>

<error-page> “Mapeia” um erro HTTP ou uma exception

para um recurso (página de erro)

<error-code> contém código do erro HTTP ou

<location> contém a localização da página de erro

dentro de uma aplicação web

<exception-type> Nome de classe java de exceção

<location> contém a localização da página de erro

dentro de uma aplicação web

<welcome-file-list>

<welcome-file>login.jsp</welcome-file>

<welcome-file>index.jsp</welcome-file>

<welcome-file>index.html</welcome-file>

</welcome-file-list>

Exemplo:

web.xml

Page 101: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 101

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<servlet>

<servlet-name>Hello</servlet-name>

<servlet-class>ServletHello</servlet-class>

<init-param>

<param-name>mailwebmaster</param-name>

<param-value>webmaster@webmaster</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>Hello</servlet-name>

<url-pattern>/alo</url-pattern>

</servlet-mapping>

</web-app>

O nome do servlet é mapeado de .../servlet/Hello

para simplesmente alo.

Veja como ficou a URL chamar o servlet:

http://localhost:8080/teste-servlet/alo

Exemplo: Mapping

JavaServlets Descritor

O elemento <servlet-mapping> pode ser usado para simplificar o

nome de um servlet completo (pacote e nome) ou resolver conflitos

de nomes, ambigüidade.

Page 102: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 102

Escrevendo documento XML Boas Práticas:

JavaServlets Descritor

Alguns cuidados que devemos ter quando escrevemos

documentos XML:

- XML é “case-sensitive”, ou seja, sensível as letras maiúsculas

e minúsculas.

- Os elementos devem ser abertos e fechados.

<element> ... </element>

- Verifique os aninhamentos dos elementos, pois, nem sempre

eles são válidos.

- Se possível use ferramenta para validar o documento XML

antes de publicá-lo.

- DTD (Document Type Definition) é responsável pela definição

do formato do documento.<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

Page 103: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 103

JavaServlets

Page 104: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 104

JavaServlets

Introdução

Quando desenvolvemos uma aplicação Web, uma loja

virtual, por exemplo, precisamos guardar algumas

informações sobre os clientes e/ou visitantes, tais como

preferências, últimas consultas, nome, duração da sessão e

etc.

Entretanto, algumas outras informações, tais como

Número e Validade do Cartão de Crédito, devem ser

mantidas apenas como variáveis de memória enquanto

durar a sessão.

Essas informações, formam um estado de um objeto, logo

podemos concluir que elas são transientes.

Para guardar estas informações podemos utilizar os

“cookies”, que são pequenos arquivos no formato texto,

que é armazenado no computador cliente e recuperado

pelo aplicação quando necessário. Assim podemos manter

o estado das sessões persistentes.

Cookies & Sessões

Page 105: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 105

HTTP Servlet, a classe Cookie

JavaServlets

GenericServlet

{abstract}

service()

<<interface>>

HttpServlet

doGet()

doPost()

service()

<<interface>>

HttpServletRequest

getCookie(): Cookie[]

meuServlet

javax.servlet.http

<<interface>>

HttpServletResponse

addCookie(Cookie)

Cookie

name: String

value: int

comment: String

domain: String

path: String

maxAge: int

request response

Cookies & Sessões

Page 106: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 106

JavaServlets

Principais métodos:

String getName() - Retorna o nome do Cookie;

String getPath() - Retorna o caminho;

String getValue() - Retorna o valor do cookie;

int getVersion() - Retorna a versão do cookie;

int getMaxAge() - Retorna a idade do cookie, que definida

em segundos;

void setPath(String uri) - Especifica um caminho para o

cookie;

void setMaxAge(int expiry) - Especifica a idade (em

segundos) do cookie;

void setValue(String newValue) - Atribui um novo valor ao

cookie;

void setVersion(int v) - Atribui o número da versão e

Outros métodos: getSecure, getDomain, getComment

setSecure, setDomain, setComment e clone.

Cookies & Sessões

Class Cookie:

public class Cookie extends java.lang.Object implements

java.lang.Cloneable

A classe Cookie é fornecida pelo pacote: javax.servlet.http;

HTTP Servlet, a classe Cookie

Page 107: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 107

JavaServlets

Cookie métodos :

Cookie[] getCookies() - Retorna um array contendo todos

objetos Cookies.

Cookies & Sessões

public abstract interface HttpServletRequest

extends ServletRequest

A interface HttpServletRequest é fornecida pelo pacote:

javax.servlet.http;

void addCookie(Cookie cookie): Adiciona um Cookie para

uma resposta

public abstract interface HttpServletResponse

extends ServletResponse

A interface HttpServletResponse é fornecida pelo pacote:

javax.servlet.http;

HTTP Servlet, a classe Cookie

Page 108: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 108

JavaServlets

Exemplo:

Cookies & Sessões

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class CookieExample extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

// print out cookies

Cookie[] cookies = request.getCookies();

for (int i = 0; i < cookies.length; i++) {

Cookie c = cookies[i];

String name = c.getName();

String value = c.getValue();

out.println(name + " = " + value);

}

// set a cookie

String name = request.getParamter("cookieName");

if (name != null && name.length() > 0) {

String value = req.getParameter("cookieValue");

Cookie c = new Cookie(name, value);

response.addCookie(c);

}

}

}

Usando Cookies

Page 109: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 109

JavaServlets

Mantendo informações sobre uma sessão:

Quando o usuário faz a primeira chamada ao servidor uma

sessão é criada gerando uma identificação única,

veja exemplo: ID 8E4A1E34E91384AA18362CF5A856049B

Este ID é mantido durante a navegação do usuário pelo site,

até que ele feche o browser, troque de URL ou o tempo de

vida da sessão expire.

A classe HttpSession implementa esta funcionalidade.

O método getId() retorna uma string com o identificador único

da sessão.

Os valores de uma sessão são armazenados na forma de

nome e valor. Use o método setAttribute (nome,valor) para

guardar o ID. Para recupera-la use o método

getAttribute(nome)

Sessões:

Algumas aplicações web, tais de e-commerce, como uma Loja

Virtual, ou de serviços, como home banking.

Precisam manter informações sobre o usuário enquanto ele

estiver fazendo acesso ao site ou enquanto durar a sessão

(geralmente usamos os cookies para determinar quanto

tempo pode durar uma sessão).

Em loja virtual é necessário manter (o estado) da cesta de

compra do usuário enquanto ele navega pelo site...

Cookies & Sessões

Page 110: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 110

JavaServlets

Principais métodos:

Object getAttribute(java.lang.String name) - Retorna um objeto

especificada pelo nome ou null se não encontrar o objeto

java.util.Enumeration getAttributeNames() - Retorna uma Enumeration

de String contendo os nomes dos objetos da sessão

boolean isNew() - Retorna um valor lógico, se “true” a sessão é nova

String getId() - Retorna um string contendo o identificador único da

sessão.

void removeAttribute(String name) - Remove um objeto da sessão

void setAttribute(java.lang.String name, java.lang.Object value) Atribui

um valor ao objeto especificado pelo nome.

A interface HttpSession

Cookies & Sessões

Interface HttpSession:

public abstract interface HttpSession

interface HttpSession é fornecida pelo pacote: javax.servlet.http;

Page 111: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 111

A interface HttpSession

JavaServlets

GenericServlet

{abstract}

service()

<<interface>>

HttpServlet

doGet()

doPost()

service()

<<interface>>

HttpServletRequest

getSession(create: boolean)

getSession()

meuServlet

javax.servlet.http

<<interface>>

HttpSession

getID: String

isNew: boolena

getAttribute(name): String

setAttribute(name, value)

remveAttribute(name)

request

sessoin

Cookies & Sessões

Page 112: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 112

JavaServlets

Sessões métodos :

Cookies & Sessões

public abstract interface HttpServletRequest

extends ServletRequest

A interface HttpServletRequest é fornecida pelo pacote:

javax.servlet.http;

HttpSession getSession()

Retorna a sessão corrente associada a uma requisição ou se a

requisição não tem uma sessão então ela é criada.

HttpSession getSession(boolean create)

Retorna a sessão corrente associada a uma requisição ou se a

requisição não tem uma sessão então ela é criada, se argumento lógico

for true.

A interface HttpSession

Page 113: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 113

JavaServlets

Sessões. Time Out

Cookies & Sessões

<session-config>

<sesson-timeout>10</session-timeout>

</session-config>

Você pode definir o ciclo de vida de sessão no arquivo descritor:

Tempo expresso em minutos

Page 114: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 114

JavaServlets

Exemplo: Servlet

Cookies & Sessões

import java.io.*;

import java.util.Enumeration;

import javax.servlet.*;

import javax.servlet.http.*;

public class ServletSession extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

Pedido pedido;

HttpSession session = request.getSession(true);

String codigo = request.getParameter("codigo");

String produto = request.getParameter("produto");

int quantidade = Integer.parseInt(request.getParameter("quantidade"));

pedido = new Pedido(produto, quantidade);

session.setAttribute(codigo, pedido);

out.println("ID " + session.getId());

Enumeration e = session.getAttributeNames();

while (e.hasMoreElements()) {

String name = (String)e.nextElement();

String value = session.getAttribute(name).toString();

Pedido p = (Pedido) session.getAttribute(name);

out.println("Produto: " + p.getProduto());

out.println("Quantidade: " + p.getQuantidade());

}

}

}

Usando Sessão

Page 115: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 115

JavaServlets

Exemplo: Formulário HTML (FormSession.html)

Cookies & Sessões

<HTML><HEAD><TITLE>Pedido</TITLE></HEAD>

<BODY>

<H1>Preencha os campos:</H1>

<FORM ACTION="/servlet/ServletSession" METHOD="Post">

<BR> Código: <INPUT TYPE="text" NAME="codigo" SIZE=10

TABINDEX=1>

<BR> Produto: <INPUT TYPE="text" NAME="produto" SIZE=30

TABINDEX=1>

<BR>Quantidade: <INPUT TYPE="text" NAME="quantidade" SIZE=5

TABINDEX=2>

<HR>

<INPUT TYPE="submit" VALUE="Adicionar">

<INPUT TYPE="reset" VALUE="Limpar">

</HR>

</FORM>

</BODY>

</HTML>

Exemplo: Entrada de dados

Código Produto Quantidade

100 CD Limp Park 1

200 Livro: JSP in Action 2

Usando Sessão

Page 116: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 116

JavaServlets

Page 117: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 117

JavaServlets

Principais métodos:

void forward(ServletRequest request, ServletResponse response)

“Passa a diante” uma requesição de servlet para outro recurso (servlet,

JSP página ou página HTML).

void include(ServletRequest request, ServletResponse response)

Inclui o conteúdo de um recurso (servlet, JSP página ou página HTML)

em uma resposta.

Interface RequestDispatcher: forward e include

Interface RequestDispatcher:

public abstract interface RequestDispatcher

interface RequestDispatcher é fornecida pelo pacote: javax.servlet.

Exemplos: forward e include

RequestDispatcher rd =

getServletContext().getRequestDispatcher("/servlet/GetServlet");

rd.forward(httpservletrequest, httpservletresponse);

RequestDispatcher rd =

getServletContext().getRequestDispatcher("/servlet/GetServletInclude");

if (rd!=null)

try {

rd.include(httpservletrequest, httpservletresponse);

} catch (Exception e) {

}

Despachar & Redirecionar

Page 118: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 118

JavaServlets

forward

RequestDispatcher rd =

getServletContext().getRequestDispatcher("/servlet/TesteB");

rd.forward(httpservletrequest, httpservletresponse);

RequestDispatcher rd =

getServletContext().getRequestDispatcher("/servlet/TesteD");

rd.include(httpservletrequest, httpservletresponse);

TesteA

Requisição HTTP: \servlet\TesteA

TesteB

Resposta HTTP

include

TesteC

Requisição HTTP: \servlet\TesteC

TesteD

Resposta HTTP

Despachar & Redirecionar

Page 119: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 119

JavaServlets

Redirecionar: sendRedirect e sendError

Exemplo: response.sendRedirect(”http://www.sun.com/index.xml");

Podemos passar o controle a uma URL (de forma absoluta), não

que precisa fazer parte da aplicação. Geralmente utilizado para

redirecionar a outra tecnologia, tais como: chamar página

PHP, ASP e etc.

void sendRedirect(java.lang.String location)

void sendError(int sc)

void sendError(int sc, java.lang.String msg)

Métodos para redirecionamento:

public abstract interface HttpServletResponse

extends ServletResponse

A interface HttpServletResponse é fornecida pelo pacote:

javax.servlet.http;

Exemplo: response.sendError(404, “Page not found”);

O método sendError permite que enviemos uma mensagem

(string) ao cliente, com o código de erro:

Despachar & Redirecionar

Page 120: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 120

JavaServlets

Page 121: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 121

JavaServlets

Introdução

Aplicação WEB

Uma aplicação WEB é uma coleção de diversos recursos, tais

como páginas HTML, imagens (jpg, gif, png), arquivos xml,

servlets, páginas JSPs e componentes javabeans, classes entre

outros objetos.

O arquivo descritor, web.xml, é utilizado para especificar a

estrutura e os serviços usados pela aplicação.

Dentro de aplicação web deve existir uma área comum de

variáveis que pode ser compartilhada por todos os recursos ou

pelo maioria deles.

Este lugar comum chamamos de contexto. O objeto

ServletContext representa a aplicação em execução.

Servlet Context

Page 122: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 122

JavaServlets

ServletContext

ServletContext representa o contexto para uma aplicação WEB

Principais características:

- Ele permite que se passe o controle para qualquer outro

recurso dentro da mesma aplicação.

- Existe um mecanismo centralizado de logs, disponível aos

servlets e JSP da aplicação

- Há uma área para armazenagem de variáveis

Servlet Context

javax.servlet.ServletContext javax.servlet.ServletContext

context = getServletContext();

O método pode ser chamado a partir de qualquer

servlet, e está disponível em uma variável JSP também

sempre disponível.

Este método é criado quando a aplicação WEB é carregada e

destruído quando a aplicada web for descarregada.

Diferentes Servlets e JSPs da mesma aplicação WEB

compartilham o mesmo contexto.

Page 123: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 123

JavaServlets Servlet Context

A interface ServletContex

<<abstract>>

GenericServlet

getServletContext(): ServletContext

log(message: String)

log(message: String, Throwable: exc)

javax.servlet

<<interface>>

ServletContext

getInitParameter(name: String): String

getInitParameterNames(): Enumeration

getAttribute(name: String): Object

setAttribute(name: String, value: Objet)

getAttributeNames(): Enumeration

getResource(path): URL

getResourceAsStream(path): InputStream

log(message: String)

log(message: String, Throwable: exc)

Page 124: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 124

JavaServlets

Principais métodos:

Interface ServletContext

public abstract interface ServletContext

interface ServletContext é fornecida pelo pacote: javax.servlet.

java.util.Enumeration getInitParameterNames()

Retorna todo os nome dos parâmetros de inicialização como

Enumeration de String ou uma Enumeration

vazia se não parâmetros de inicialização.

java.lang.Object getAttribute(java.lang.String name)

java.util.Enumeration getAttributeNames()

ServletContext getContext(java.lang.String uripath)

int getMajorVersion()

java.lang.String getMimeType(java.lang.String file)

int getMinorVersion()

RequestDispatcher getNamedDispatcher(java.lang.String name)

java.lang.String getRealPath(java.lang.String path)

RequestDispatcher getRequestDispatcher(java.lang.String path)

java.net.URL getResource(java.lang.String path)

java.io.InputStream getResourceAsStream(java.lang.String path)

java.util.Set getResourcePaths(java.lang.String path)

java.lang.String getServerInfo()

java.lang.String getServletContextName()

void log(java.lang.String msg)

void log(java.lang.String message, java.lang.Throwable throwable)

void removeAttribute(java.lang.String name)

void setAttribute(java.lang.String name, java.lang.Object object)

Servlet Context

A interface ServletContex

Page 125: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 125

JavaServlets Servlet Context

Exemplo: Contexto de parâmetro de inicialização

<web-app>

<context-param>

<param-name> catalogoProduto </ param-name>

<param-value>/WEB-INF/catalogo.txt</ param-value>

...

</context-param>

</web-app>>

Recuperando os parâmetros:

ServletContext ctxt = sce.getServletContext();

String catalogoProduto = ctxt.getInitParameter(“catalogo.txt”);

Gravando o log:

ctxt.log(“parâmetro catalogoProduto inicializado”);

Trabalhando com atributos. Atribuição e Recuperação:

ctxt.setAttribute(“catalogo”, catalogoProduto);

ctxt.getAtrribute(“catalogo”);

Os parâmetros de inicialização são informados, formato nome

e valor, no arquivo descritor (web.xml)

Page 126: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 126

JavaServlets

Exemplo: Servlet. Gravando atributo

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class CallServletAtrib extends HttpServlet

{

public void doGet(HttpServletRequest httpservletrequest,

HttpServletResponse httpservletresponse)

throws ServletException, IOException

{

RequestDispatcher rd =

getServletContext().getRequestDispatcher("/servlet/GetServletAtrib");

getServletContext().setAttribute ("nome", "Duke");

rd.forward(httpservletrequest, httpservletresponse);

if (rd!=null)

System.out.println(rd);

}

}

Servlet Context

Grava um atributo

Page 127: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 127

JavaServlets

Exemplo: Servlet. Recuperando atributo

import java.io.*;

import javax.servlet.ServletException;

import javax.servlet.ServletResponse;

import javax.servlet.http.*;

public class GetServletAtrib extends HttpServlet

{

public void doGet(HttpServletRequest httpservletrequest,

HttpServletResponse httpservletresponse)

throws ServletException, IOException

{

httpservletresponse.setContentType("text/html");

PrintWriter printwriter = httpservletresponse.getWriter();

StringBuffer stringbuffer = new StringBuffer();

String value = (String) getServletContext().getAttribute ("nome");

stringbuffer.append("<HTML><HEAD><TITLE>\n");

stringbuffer.append("A Simple Servlet Example\n");

stringbuffer.append("</TITLE></HEAD><BODY>\n");

stringbuffer.append("<H1>Welcome to Servlets!" + value + </H1>\n");

stringbuffer.append("</BODY></HTML>");

printwriter.println(stringbuffer.toString());

printwriter.close();

}

}

Servlet Context

Recupera o atributo

Page 128: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 128

JavaServlets

A interface ServletConfig

Interface ServletConfig

public abstract interface ServletConfig

Servlet Context

A responsabilidade da interface ServletConfig é fornecer um

meio para que um servlet possa ter acesso a informações

definidas no web.xml durante o processo de inicialização.

A interface ServletConfig é parte do pacote: javax.servlet

Principais métodos:

String getInitParameter(String nome): lê um parâmetro

de inicialização <init-param> do web.xml

Enumeration getInitParameterNames(): obtém os nomes

de todos os parâmetros de inicialização disponíveis

Os métodos de ServletConfig devem ser chamados no

método init(), do servlet

Exemplo: init(ServletConfig)

public void init(ServletConfig config) throws ServletException

{

String p = config.getInitParameter(“name”);

}

Page 129: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 129

JavaServlets

Interface ServletContextListener

Interface ServletContextListener

public abstract interface ServletContextListener extends

java.util.EventListener

Servlet Context

Principais métodos:

public void contextInitialized(ServletContextEvent e) -

Notifica que contexto está pronto para processar resposta.

public void contextDestroyed(ServletContextEvent e)

Notifica que contexto está pronto para “shut down”

Este métodos são chamados depois que um contexto é criado

e antes que ele seja destruído. Para isto é preciso registrá-lo

no web.xml usando o elemento <listener>

Exemplo:

<listener>

<listener-class>ListenerCtx</listener-class>

</listener>

ServletContextEvent possui um método getServletContext()

que permite obter o contexto associado

Você pode usar a ServletContextListener para controlar o

ciclo de vida do ServletContext. Esta interface pertence ao

pacote javax.servlet.

Page 130: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 130

JavaServlets

Page 131: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 131

JavaServlets

Introdução

Tratando Erros & Exceções

A linguagem Java fornece mecanismo para classificação e

tratamento destas exceções.

Esse mecanismo de tratamento de exceções tem alguns

benefícios, pois permite isolar o código responsável pelo

tratamento do erro em blocos separados, deixando o código

principal mais limpo. Também é possível tratar erros similares

com um único bloco de tratamento, eliminando código

duplicado.

Temos duas classes que tratam as exceções referente aos

Servlets a ServletException e UnavailableException.

O que são exceções ?

São condições anormais que mudam o fluxo de um

programa. Uma exceção pode representar uma

falha na leitura ou gravação de um arquivo, erros de

sintaxes, problemas com banco de dados, falta de

recursos e etc.

Quando ocorre uma exceção, ela é lançada e a

execução do programa é transferida para o código

responsável por tratar essa exceção.

Page 132: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 132

JavaServlets

Método:

java.lang.Throwable getRootCause()

Retorna uma exceção que causou o problema

A classe ServletException

classe ServletException

public class ServletException extends java.lang.Exception

A classe ServletException é fornecida pelo pacote: javax.servlet.

ServletException

ServletException()

ServletException(String message)

ServletException(Throwable cause)

ServletException(Throwable cause, String message)

Throwable getRootCause()

Exception

UnavailableException

UnavailableException(String message)

UnavailableException(String message, int forSeconds)

Tratando Erros & Exceções

Page 133: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 133

JavaServlets

Erros genéricos (HTTP):

Por “default” quando ocorre um erro o Browser exibe uma página

padrão com uma mensagem de erro.

Servlets Exceptions:

A tecnologia Java pode gerar exceções para indicar que aconteceu

algum problema com o processamento da requisição.

O Servlet invoca a classe ServletException para informar ao

Web Container que uma exceção ocorreu.

Os erros HTTP são classificados pelo servidor através de

um código de status:

- Códigos de status que iniciam com 1, 2 ou 3 não indicam erro

- Códigos que começam com 4 ou 5 são erros:

Entretanto, os que começam com 4, indicam erro originado no

cliente, estes erros podem ser evitados.

Já os que começam com 5 (500, por exemplo) indicam erro

no servidor , não temos como evita-los.

Tratando Erros & Exceções

Page 134: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 134

JavaServlets

Servlets Exceptions:

Veja o exemplo abaixo:

Apache Tomcat/4.0.6 - HTTP Status 500 - Internal Server Error

--------------------------------------------------------------------------------

type Exception report

message Internal Server Error

description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling

this request.

exception

java.lang.NumberFormatException: nullat java.lang.Integer.parseInt(Integer.java:436)

at java.lang.Integer.parseInt(Integer.java:518)

at ServletSession.doPost(ServletSession.java:20)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:465)

at org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:216)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)

at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)

at java.lang.Thread.run(Thread.java:534)

Tratando Erros & Exceções

Page 135: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 135

JavaServlets

Personalizando Páginas de erro

Podemos personalizar as páginas de erro de uma aplicação web

de duas formas:

- Declarativa e

- Programática.

- Declarativa

<error-page>

<exception-type> java.io.IOException </exception-type>

<location>/erros/errospage.html</location>

</error-page>

No arquivo descritor, web.xml, podemos definir um conjunto de

tags para redirecionar os erros e as exceções ocorridas na

aplicação.

É importante criar mapeamento para que esta alternativa funcione

corretamente

- Programática

Usando a estrutura try/catch/finally. Poderíamos capturar as

exceções (catch) e redirecionar para uma página personalizada:

Exemplo: (fragmento de código)

catch(ServletException e){

request.setAttribute(“exception: “, e);

errorPage.forward(request, response);}

Tratando Erros & Exceções

Page 136: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 136

JavaServlets

Tutorial 1: Formulário HTML. Divisão.html

<HTML>

<HEAD>

<TITLE>

Teste de Erros e Exceptions

</TITLE>

</HEAD>

<BODY>

<H1>Divisão de valores:</H1>

<FORM ACTION="/exception/servlet/Divisao"

METHOD="Get">

<BR>Entre com primeiro valor :

<INPUT TYPE="text" NAME="valor1" SIZE=10

TABINDEX=1>

<BR>Entre com segundo valor :

<INPUT TYPE="text" NAME="valor2" SIZE=10

TABINDEX=1>

<HR>

<INPUT TYPE="submit" VALUE="Dividir">

<INPUT TYPE="reset" VALUE="Limpar">

</HR>

</FORM>

</BODY>

</HTML>

Tratando Erros & Exceções

Page 137: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 137

JavaServlets

Tutorial 2: Servlet: ServletDivisao.html

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class ServletDivisao extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse

response)

throws IOException, ServletException {

int div1 = Integer.parseInt( request.getParameter("valor1") );

int div2 = Integer.parseInt( request.getParameter("valor2") );

int resultado = (div1 / div2); //divisão

int restodivisao = (div1 % div2); //resto da divisão

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<body>");

out.println("<head>");

out.println("<title>Divisão</title>");

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

out.println("<body>");

out.println("<br><br>");

out.println("<H2>Divisão: " + div1 + " divido " + div2 + " = <b>" +

resultado + "</b><br><br></H2>");

if (restodivisao > 0 )

out.println("Resto da divisão: <b>" + restodivisao +"</b>");

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

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

}

}

Tratando Erros & Exceções

Page 138: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 138

JavaServlets

Tutorial 3: O descritor: web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<servlet>

<servlet-name>Divisao</servlet-name>

<servlet-class>ServletDivisao</servlet-class>

</servlet>

</web-app>

Tratando Erros & Exceções

Page 139: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 139

JavaServlets

Tutorial 4: Teste

12 / 2 = 6

9 / 3 = 3

Apache Tomcat/4.0.6 - HTTP Status 500 - Internal Server Error

--------------------------------------------------------------------------------

type Exception report

message Internal Server Error

description The server encountered an internal error (Internal Server Error)

that prevented it from fulfilling this request.

exception

java.lang.ArithmeticException: / by zero

at Divisao.doGet(Divisao.java:14)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

4 / 0 = erro

(1)

(2)

(3)

Tratando Erros & Exceções

Page 140: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 140

JavaServlets

Tutorial: 5 - Personalizando a Página de Exceções e Erros

Posso personalizar

as páginas de exceção

e erros ?

- Declarativa

Temos algumas opções para resolver este problema.

Primeira opção escrever os elementos <error-page>dentro do arquivo descritor.

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<servlet>

<servlet-name>Divisao</servlet-name>

<servlet-class>ServletDivisao</servlet-class>

</servlet>

<error-page>

<exception-type>

java.lang.ArithmeticException

</exception-type>

<location>/erros/erro.html</location>

</error-page></web-app>

Tratando Erros & Exceções

Page 141: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 141

JavaServlets

Tutorial: 6 - Personalizando a Página de Exceções e Erros

Posso personalizar

as páginas de exceção

e erros ?

<HTML>

<HEAD>

<TITLE>

Teste de Erros e Exceptions

</TITLE>

</HEAD>

<BODY>

<H1>Página de Erro:</H1>

<H2>

Divisão por zero!

</H2>

</BODY>

</HTML>

Página de erro: erro.html

Tratando Erros & Exceções

Page 142: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 142

JavaServlets

Exercício: 1 - Teste

O que acha o que acontece

se não for informar nenhum

valor e enviar a requisição ao

servlet ?

Escolha um resposta:

1 ( ) Nada

2 ( ) Uma exceção

3 ( ) Uma mensagem de erro

Apache Tomcat/4.0.6 - HTTP Status 500 - Internal Server Error

------------------------------------------------------------------------------------------------------------------

type Exception report

message Internal Server Error

description The server encountered an internal error (Internal Server Error) that prevented

it from fulfilling this request.

exception

java.lang.NumberFormatException: For input string: ""

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

at java.lang.Integer.parseInt(Integer.java:489)

at java.lang.Integer.parseInt(Integer.java:518)

at Divisao.doGet(Divisao.java:11)

Quiz-Show

Agora que já sabe o problema dê a solução. Use o arquivo

descritor.

Tratando Erros & Exceções

Page 143: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 143

JavaServlets

Tutorial: 7 - Personalizando a Página de Exceções e Erros

Posso personalizar

as páginas de exceção

e erros ?

- Programática:

Uma outra opção para resolver este problema, tratar a

exceção dentro da próprio Servlet, utilizando o método

sendError, podemos produzir uma mensagem mais

amigável ao usuário.

Apache Tomcat/4.0.6 - HTTP Status 500 - Divisão por zero

--------------------------------------------------------------------------------

type Status report

message Divisão por zero

description The server encountered an internal error (Divisão por zero)

that prevented it from fulfilling this request.

Tratando Erros & Exceções

Page 144: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 144

JavaServlets

Tutorial: 8 - Personalizando a Página de Exceções e Erros

- Programática:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class ServletDivisao2 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

int div1 = Integer.parseInt( request.getParameter("valor1") );

int div2 = Integer.parseInt( request.getParameter("valor2") );

try {

int resultado = (div1 / div2);

int restodivisao = (div1 % div2);

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<body>");

out.println("<head>");

out.println("<title>Divisão</title>");

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

out.println("<body>");

out.println("<br><br>");

out.println("<H2>Divisão: " + div1 + " divido " + div2 + " = <b>"

+ resultado + "</b><br><br></H2>");

if (restodivisao > 0 )

out.println("Resto da divisão: <b>" + restodivisao +"</b>");

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

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

} catch(java.lang.ArithmeticException e){

response.sendError(response.SC_INTERNAL_SERVER_ERROR,

"Divisão por zero");

}

}

}

Tratando Erros & Exceções

Page 145: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 145

JavaServlets

Page 146: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 146

JavaServlets

Threads

Threads

Servlet geralmente executa sobre um servidor multithread,

cabe você deve tratar os acessos concorrente.

Podemos usar “synchronized” para garantir a integridade

dos dados.

Exemplo 1: A sincronização é feita sob o método

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class ServletThread extends HttpServlet {

public synchronized void doGet(HttpServletRequest request,

HttpServletResponse

response)

throws IOException, ServletException

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<body>");

out.println("<head>");

out.println("<title>Conversão</title>");

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

out.println("<body>");

out.println("<H2>Contagem</H2><BR><BR>");

for(int i=0; i < 5000;i++)

out.println("<b>" + i + ", </b>");

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

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

}

}

Page 147: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 147

JavaServlets

Threads

Threads

Exemplo 2: Neste exemplo é sincronizado somente parte

do método. Esta implementação é mais eficiente que anterior.

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class ServletThread extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException

{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<body>");

out.println("<head>");

out.println("<title>Conversão</title>");

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

out.println("<body>");

out.println("<H2>Contagem</H2><BR><BR>");

synchronized(this) {

for(int i=0; i < 5000;i++)

out.println("<b>" + i + ", </b>");

}

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

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

}

}

Page 148: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 148

JavaServlets

A interface SingleThreadModel Garante que um servlet trata

somente uma única requisição por vez. Ela faz parte do

pacote: javax.servlet

Threads

interface SingleThreadModel

public abstract interface SingleThreadModel

Não resolve todos os problemas de sincronismo:

- Atributos de sessão

- Variáveis estáticas

“Não é recomendável o uso deste recurso, pois, ele é

ineficiente.

** Deprecated na especificação Servlets 2.4 **

SingleThreads

public class seuServlet extends HttpServlet

implements SingleThreadModel {

//…

}

Page 149: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 149

JavaServlets

Page 150: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 150

JavaServlets

Autenticação

Segurança

BASIC: Exibe uma janela do browser que recebe nome e senha.

Os dados são enviados em conexão insegura.

FORM: Igual a BASIC, mas, em vez de usar uma janela do

browser, é permitido o usar um formulário HTML, por exemplo.

DIGEST: Exige um algoritmo de criptografia para enviar os

dados, exemplo: MD5

CLIENT-CERT: Requer do usuário um certificado SSL (Secure

Socket Layer) e que container web use protocolo HTTPs (HTTP

+ SSL), esta é forma mais segura.

Os servlet podem ter configuração de segurança em dois

domínios:

Autenticação: É o processo de verificação da identidade do

usuário.

Autenticação é medida de segurança que pode ser configurada

no Container Web. Existem quatro técnicas, você poderá

escolher uma: BASIC, DIGEST, FORM e CLIENT-CERT.

<login-config>

<auth-method>

BASIC

</auth-method>

</login-config>

Exemplo: BASIC

Page 151: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 151

JavaServlets Segurança

<login-config>

<auth-method>

FORM

</auth-method>

<form-login-page>/login/login.html> </form-login-page>

<form-error-page>/login/error.html> </form- error-page>

</login-config>

Exemplo: FORM

Autenticação

Page 152: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 152

JavaServlets

Autorização

Segurança

Autorização: É o processo de divisão de recursos baseado no

perfil (role) do usuário.

Após a escolher da técnica de autenticação, é necessário

definir perfil (role) do usuário.

Coleção de recursos web (Web resource collections):

É um grupo de páginas e URIs. Geralmente esta coleção tem

alguma coisa em comum:

Administração, Regras de Negócios Especiais, Clientes

Preferencias. Veja exemplo abaixo:

A autorização é implementada de forma declarativa, logo

usamos o arquivo web.xml para fazer isto.

Para implementar a autorização é necessário:

- Identificar a coleção de recursos web (Web resource

collections)

- Identificar o perfis

- Mapear a coleção de recursos para perfis (role)

- Identificar os usuários e seus respectivos perfis.

<web-resource-collection>

<web-resource-name>Celebridades</web-resource-name>

<description>Acesso restrito para celebridades </description>

<url-pattern>/membros/*</url-pattern>

<url-pattern>/preferencias/config.jsp</url-pattern>

<http-method>GET</http-method>

<http-method>POST</http-method>

</web-resource-collection>

Page 153: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 153

JavaServlets Segurança

Declarando Perfis de Segurança:

Agora precisamos definir os perfis dos usuários que serão

autorizados a fazer acesso a esta coleção.

Esta configuração é feita através do elemento <security-

constraint>

Veja o exemplo:

<security-constraint><web-resource-collection>

<web-resource-name>Celebridades</web-resource-name>

<description>Acesso restrito para celebridades </description>

<url-pattern>/membros/*</url-pattern>

<url-pattern>/preferencias/config.jsp</url-pattern>

<http-method>GET</http-method>

<http-method>POST</http-method>

</web-resource-collection>

<auth-constraint>

<role-name>administrator</role-name>

</auth-constraint>

<security-constraint>

<login-config>

<auth-method>

FORM

</auth-method>

</login-config>

<security-role>

<role-name>administrator</role-name>

<security-role>

Autorização

Page 154: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 154

JavaServlets

Segurança e Perfis no Tomcat

Segurança

Para definir domínio de segurança no Tomcat veja a

documentação sobre security realms:

Para ter acesso às páginas administrativas do Tomcat, é

preciso alterar o arquivo: tomcat-users.xml

Você pode encontrar este arquivo <TOMCAT_HOME>\conf

NOTE: By default, no user is included in the "manager" role required

to operate the "/manager" web application. If you wish to use this app,

you must define such a user - the username and password are arbitrary.

-->

<tomcat-users>

<user name="tomcat" password="tomcat" roles="tomcat" />

<user name="role1" password="tomcat" roles="role1" />

<user name="both" password="tomcat" roles="tomcat,role1" />

</tomcat-users>

<user name=”admin" password=”admin”

roles=” tomcat,manager,standard,admin />

Page 155: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 155

JavaServlets

Tutorial : Protegendo um recurso com a MemoryRealm

Segurança

Passos:

1 - Verificar o arquivo server.xml (<tomcat_home>\conf):

Abrir o arquivo server.xml e tenha certeza que o elemento:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application

2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app>

<security-constraint>

<web-resource-collection>

<web-resource-name>seguranca</web-resource-name>

<description>Acesso restrito</description>

<url-pattern>/*</url-pattern>

<http-method>GET</http-method>

<http-method>POST</http-method>

</web-resource-collection>

<auth-constraint>

<role-name>manager</role-name>

</auth-constraint>

</security-constraint>

<login-config>

<auth-method>BASIC</auth-method>

<realm-name>seguranca</realm-name>

</login-config>

</web-app>

<Realm className="org.apache.catalina.realm.MemoryRealm" />

Está presente e não comentado.

2 - Crie um novo contexto chamado seguranca (dentro da pasta

WebApps). Crie também toda estrutura de aplicação web.

3 - Escrever o arquivo web.xml:

Page 156: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 156

<?xml version='1.0' encoding='utf-8'?>

<tomcat-users>

<role rolename="tomcat"/>

<role rolename="role1"/>

<role rolename="manager"/>

<role rolename="admin"/>

<user username="tomcat" password="tomcat" roles="tomcat"/>

<user username="both" password="tomcat" roles="tomcat,role1"/>

<user username="role1" password="tomcat" roles="role1"/>

<user username="admin" password="admin" fullName="Administrador"

roles="admin,manager,role1,tomcat"/>

</tomcat-users>

JavaServlets Segurança

4 - Criar um usuário e associar a um perfil. Para fazer isto

você deve editar o arquivo tomcat-users.xml.

Você pode encontrar este arquivo <TOMCAT_HOME>\conf.

Acrescente um usuário e uma senha, o perfil que nós vamos

usar é “manager” que já está definido.

<user name=”admin" password=”admin” roles=”manager” />

Tutoria: Protegendo um recurso com a MemoryRealm

Passos (continuação):

5 - Criar uma página html, chamada index.html, coloque este

arquivo na raiz do contexto.

<html>

<head>

<title>Segurança</title>

</head>

<body>

<h1> Teste: Segurança </h1>

</body>

</html>

Page 157: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 157

JavaServlets Segurança

7 - Digite agora usuário e senha:

http://localhost:8080/seguranca/

Tutorial: Protegendo um recurso com a MemoryRealm

Passos (continuação):

6 - Para encerrar chame o browser e informe a seguinte URL:

Page 158: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 158

JavaServlets

Page 159: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 159

JavaServlets

Introdução

Filtros

O uso de filtro permite modificar as requisições e as respostas

dinamicamente. As requisição podem ser interceptadas e

alteradas antes e depois do processamento do servlet.

Os filtros podem ser aplicados a páginas ou componentes

web.

Os filtros são implementados através de três interfaces:

Filter, FilterChain e FilterConfig ambas são pertencentes ao

pacote javax.servlet

Veja algumas coisas que os filtros podem fazer:

Browser

(cliente)

Filtro1Servlet

Requisição HTTP

Resposta HTTP Filtro2

Filtro1

Bloquear requisição

Fazer autenticação

Personalizar Requisição

Descompactação

Personalizar Resposta

Transformação XSLT

Compactação

Page 160: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 160

JavaServlets

Interface Filter

Pacote: javax.servlet

Interface Filter

public abstract interface Filter

Filtros

Principais métodos:

void doFilter(ServletRequest request, ServletResponse

response) throws IOException, ServletException

Filtros podem trabalhar encadeados, ou seja, um filtro pode

chamar outro filtro.

Pacote: javax.servlet

Interface FilterChain

public abstract interface FilterChain

Interface FilterChain

Principais métodos:

void init(FilterConfig config) throws ServletException:

Objeto que faz inicialização do filtro.

void destroy(): Objeto que libera os recursos alocados pelo

filtro.

void doFilter(ServletRequest req, ServletResponse res,

FilterChain chain) throws IOException, ServletException:

Objeto que faz filtro trabalhar.

Page 161: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 161

JavaServlets

API. FilterConfig

Pacote: javax.servlet

Interface FilterConfig

public abstract interface FilterConfig

Filtros

Principais métodos:java.lang.String getFilterName() - Retorna o nome do filtro

definido no arquivo descritor. java.lang.String

getInitParameter(java.lang.String name)

Retorna uma string contendo o valor do parâmetro de inicialização

especificado pelo argumento

java.util.Enumeration getInitParameterNames() - Retorna

Enumeration de objetos string contendo os nomes dos parâmetros

de inicialização .

ServletContext getServletContext() - Retorna a referêcia do

ServletContext

Esta classe permite a configuração do filtro durante o processo

de iniciação

Pronto

inicioinit()

destroy()

fimdoFilter()

Ciclo de vida

Page 162: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 162

JavaServlets

Os elementos do Filtro

Filtros

<filter>

<filter-name>

log

</filter-name>

<filter-class>

LogFilter

</filter-class>

</filter>

O uso de filtro requer a implementação da declaração do

elemento <filter> no arquivo descritor, web.xml, escrevemos

os elementos referente ao filtro, primeiro definimos o nome do

filtro e o nome da classe.

Depois definimos o “mapeamento”:

<filter-mapping>

<filter-name>log</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

Page 163: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 163

JavaServlets

Tutorial 1 - Classe que implementa o Filtro:

Filtros

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public final class SimpleFilter implements Filter {

private FilterConfig filterConfig = null;

public void init(FilterConfig filterConfig) {

this.fi lterConfig = filterConfig;

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

if (filterConfig == null)

return;

filterConfig.getServletContext().log("in SimpleFilter");

chain.doFilter(request, response);

filterConfig.getServletContext().log("Getting out of SimpleFilter");

}

public void destroy() {

filterConfig = null;

}

public String toString() {

String goBack=null;

if (filterConfig == null)

goBack ="SimpleFilter()";

else {

StringBuffer sb = new StringBuffer("SimpleFilter(");

sb.append(filterConfig);

sb.append(")");

goBack = sb.toString();

}

return goBack;

}

}

Page 164: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 164

JavaServlets

Tutorial 2 - O arquivo Descritor.

Filtros

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app>

<filter>

<filter-name>Teste Filtro</filter-name>

<filter-class>SimpleFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>Teste Filtro</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

</web-app>

Mapeamento

Nome e

classe do

Filtro

Page 165: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 165

JavaServlets

Tutorial 3 - Arquivo index.html

Filtros

<html>

<head>

<title>

Filtros

</title>

</head>

<body>

<h1> Teste: Filtro </h1>

</body>

</html>

webapps

filtro

WEB-INF

WebContainer

classes

contexto

SimpleFilter.class

web.xml

Tutorial 4 - Deployment:

Faça a distribuição dos arquivos:

index.html

Page 166: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 166

JavaServlets

Tutorial 5 - Chame o arquivo: index.html

Filtros

2004-01-13 20:35:05 StandardWrapper[/filtro:default]: Loading container servlet default

2004-01-13 20:35:05 StandardWrapper[/filtro:invoker]: Loading container servlet invoker

2004-01-13 20:35:49 in SimpleFilter

2004-01-13 20:35:49 Getting out of SimpleFilter

2004-01-13 20:35:49 in SimpleFilter

2004-01-13 20:35:49 Getting out of SimpleFilter

2004-01-13 20:35:49 in SimpleFilter

2004-01-13 20:35:49 Getting out of SimpleFilter

Registro:

Nome do arquivo: localhost_log.2004-01-13

local: <TOMCAT_HOME>\log

1

2

Note que toda vez que você chama o arquivo: index.html

preciso é registrado no log e depois o browser exibe o

arquivo.

Page 167: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 167

JavaServlets

Page 168: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 168

JavaServlets

1 - Tente evitar o uso da interface SingleThreadModel

2 - Use o servlet para responder requisições que não tenham

o formato HTML, pois, o JSP é mais apropriado para isto.

3 - Substitua o out.println(...) por StringBuffer.append(...), assim reduzimos o tráfego de rede. Exemplo:

Boas Práticas

Recomendações:

StringBuffer buffer = new StringBuffer();

buffer.append("<HTML><HEAD><TITLE>\n");

buffer.append("A Simple Servlet Example\n");

buffer.append("</TITLE></HEAD><BODY>\n");

buffer.append("<H1>Welcome to Servlets!" + value + </H1>\n");

buffer.append("</BODY></HTML>");

//O método setContentLenght define o tamanho do conteúdo que será

//enviado ao cliente.

httpServletResponse.setContentLength(buffer.length());

httpServletResponse.getOutputStream().print(buffer.toString());

4 - Use classes e componentes Javabeans e/ou EJBs para

lógica de negócio.

5 - Use os métodos init(), service() e destroy().

Page 169: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 169

Page 170: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 170

Introdução

Estrutura

Elementos

Declarações

Scriptlet

Expressões

Objetos Implicitos

Request

Response

Session

Out

Application

Comentários

Diretivas

page

inclue

Cookies

Tratando Exceções

Actions

JavaBeans

Outras Ações

Custom Tags

Comparação JSP e Servlet

Formulários

Integrando JSP e Servlets

Tags Lib

JavaBeans

JDBC - Conexão com Banco de Dados

Conteúdo

JavaServer Pages

Page 171: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 171

JavaServer Pages

Page 172: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 172

Introdução

É uma tecnologia baseada em Java que simplifica o

processo de desenvolvimento de sites com conteúdo

dinâmico. Com JSP os designers e programadores

podem rapidamente incorporar elementos dinâmicos

em páginas usando o Java embutido e algumas tags

de marcação simples (HTML).

Estas tags fornecem ao designer de HMTL um meio de

fazer acesso aos dados e lógica de negócios

armazenadas em objetos, tais como JavaBeans e EJB,

sem precisar conhecer as complexidades do

desenvolvimento destes componentes.

JSP é um script server side (lado servidor), ele faz

uso de todas as APIs Java já existentes, como JDBC,

JavaMail e etc.

Estrutura básica do JSP:

•Elementos de script

•Tipos de variáveis

•Estruturas de controle

•Declaração de funções

Componentes: JavaBeans

•Definindo classes

•Passagem de parâmetros

•Servidores

JavaServer Pages

Page 173: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 173

Principais Vantagens:

Suporte a componentes, estimulando o reúso;

Recompilação automática quanto são feitas

mudanças no código;

Possibilita a separar conteúdo da lógica de

negócio;

Suporte as APIs Java;

É portável;

Oferece a possibilidade de criar Tags

“customizadas” e

Suporte a XML.

Principais Desvantagens:

É necessário um Java web container e

Tempo de aprendizado maior que as demais

concorrentes (ASP e PHP).

JavaServer Pages

Page 174: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 174

Servidores e Web Contêiner:

Cliente

(browser)

Servlets(após a compilação)

JavaBeans

SGDB

Container

Componentes

Requisição HTTP

Servidor Web

Resposta HTML

Servidor

Web

JSP

OUServlets

JavaServer Pages

Page 175: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 175

Estrutura de execução de um arquivo JSP:

Requisição HTTP:

JavaServer Pages

Chama o mecanismo JSP

Arquivo JSP

encontrado?

Retorna erro HTTP 404

Código-fonte

compilado?

Compila o arquivo JSP

Carrega as clases

código.jspInit()

Chama código.jspService() para

processar a requisição HTTP

Código.class

carregado?

não

Retorna resposta HTTP

não

sim

sim

sim

As páginas JSP são compiladas na primeira execução e

transformadas em Servlet.

Page 176: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 176

Ciclo de Vida de um arquivo JSP:

Chama o método

_jspInit()

Fase de

carregamento

Chama o método

_jspService()

Chama o método

_jspDestroy()

Fase de Serviço

Fase de

descarregamento

Processa as requisições

JSP inicializada

JSP finalizada

JavaServer Pages

Page 177: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 177

Nos endereços acima podemos encontrar:

- API, Documentação Exemplos e demais tecnologias

relacionada com JSP.

http://java.sun.com/products/jsp/

JavaServer Pages

Onde posso encontrar informações

sobre Java Servlets e JSP ?

http://java.sun.com/products/servlet/index.html

Page 178: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 178

Ferramentas que tem suporte JSP e Servlets

Neste endereço podemos encontrar uma lista de produtos

com suporte a Java Servlet e JS:P

http://java.sun.com/products/jsp/industry.html

O Tomcat é um servlet container que tem suporte a Java

Servlets e JSP. Ele é contêiner “Open Source”, é também o

mais popular. Para maiores informações:

http://jakarta.apache.org/tomcat/index.html

O Tomcat pode utilizado como qualquer Servidor Web, tais

como: Apache ou Microsoft Internet Information Server.

Outra opção para a plataforma Windows (IIS) tenha suporte

a JSP e Servlets, podemos usar um Plug-in, Caucho Resin

-

O Resin é um dos web container compatíveis com Servlets

Java e também trabalha como Servlet Engine para

servidores web IIS, SunOne e Apache. Além de Open

Source (padrão aberto) ele tem uma boa performance e

bons recursos como bibliotecas próprias.

http://www.caucho.com

JavaServer Pages

Page 179: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 179

Comparação JSP e ASP:

Fonte: http://java.sun.com/products/jsp/industry.html

JavaServer Pages Active Server Pages

Web ServerSupport

Most popular web serversincluding Apache,Netscape, and MicrosoftIIS can be easily enabledwith JSP.

Native support only within Microsoft IIS orPersonal Web Server. Support for selectservers using third-party products.

Platform SupportPlatform independent.Runs on all Java-enabledplatforms.

Is fully supported under Windows.Deployment on other platforms iscumbersome due to reliance on the Win32-based component model.

Component Model

Relies on reusable, cross-platform components likeJavaBeans, EnterpriseJavaBeans, and customtag libraries.

Uses the Win32-based COM componentmodel.

ScriptingCan use the Javaprogramming language orJavaScript.

Supports VBScript and JScript for scripting.

SecurityWorks with the Javasecurity model.

Can work with the Windows NT securityarchitecture.

Database Access Uses JDBC for data access. Uses Active Data Objects for data access.

CustomizableTags

JSP is extensible withcustom tag libraries.

Cannot use custom tag libraries and is notextensible.

JavaServer Pages

Page 180: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 180

JavaServer Pages

Page 181: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 181

JSP - Estrutura básica:

Existem duas categorias de elementos de

programação disponíveis para construir um aplicativo

JSP:

JavaServer Pages

Elementos de script JSP, que são usados para

incorporar código Java em uma página JSP.

Objetos implícitos JSP, que estão disponíveis dentro

de página JSP, para acessar os objetos Java

subjacentes, como uma requisição “request” HTTP.

Page 182: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 182

JSP - Estrutura básica:

Existem três tipos de elementos de script

disponíveis em uma JSP:

Declarações;

<%! Declaration %>

Scriptlets:

<% code %>

Expressões

<%= expression %>

A especificação JSP fornece duas maneiras de

notação sintática para cada tipo de elemento de script.

Uma notação usa delimitadores como <% e %> para

iniciar e terminar um elemento de script, enquanto a

outra usa sintaxe compatível com XML para mesmo

fim.

O motivo de fornecer notações semelhante à XML é

para permitir que as JSPs possam ser escritas usando

ferramentas de autoria de documento XML.

JavaServer Pages

Page 183: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 183

JSP - Estrutura básica:

Declarações;

São as declarações de variáveis e método Java, que

usaremos no código Java do arquivo JSP. Elas

aparecem dentro de tags <%! e %> e podem ser

usadas na página inteira. Exemplo, o bloco a seguir

declara duas variáveis Java do tipo de dado String:

Nome e Sobrenome:

<%!

String Nome;

String Sobrenome;

%>

Usando-se a notação compatível com XML, as

declarações são escritas da seguinte forma:

<jsp:declaration>

String Nome;

String Sobrenome;

</jsp:declaration>

JavaServer Pages

Page 184: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 184

JSP - Estrutura básica:

Declarações (continuação);

As variáveis declaradas anteriormente, são

inicializadas quando a página JSP é carregada. Essas

declarações de variáveis não produzem diretamente

qualquer saída na página mas, elas são usadas por

outros elementos na JSP, como expressões e

scriptlets, para criar conteúdo dinâmico.

JavaServer Pages

Page 185: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 185

JSP - Estrutura básica:

Declarações:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE>JSP Declarations</TITLE>

<META NAME="author" CONTENT="Marty Hall">

<META NAME="keywords"

CONTENT="JSP,declarations,JavaServer,Pages,servlets">

<META NAME="description"

CONTENT="A quick example of JSP declarations.">

<LINK REL=STYLESHEET

HREF="JSP-Styles.css"

TYPE="text/css">

</HEAD>

<BODY>

<H1>JSP Declarations</H1>

<%! private int accessCount = 0; %>

<H2>Accesses to page since server reboot:

<%= ++accessCount %></H2>

</BODY>

</HTML>

Declarações

AccessCounts

JavaServer Pages

Page 186: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 186

JSP - Estrutura básica:

Expressões:

São as expressões Java avaliadas durante a

execução e impressas como String na página de

saída. Elas aparecem incorporadas dentro de tags

<%= e %>, que são intercaladas com o conteúdo

estático. Por exemplo, a instrução a seguir

incorpora a expressão Java Nome dentro de algum

código HTML para imprimir a saudação:

Oi <%= Nome %> ! Bom dia

Na notação XML, veja como ficaria:

Oi <jsp:expression> Nome </jsp:expression> !

Bom dia

JavaServer Pages

Page 187: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 187

JSP - Estrutura básica:

Expressões (Exemplo):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE>JSP Expressions</TITLE>

<META NAME="author" CONTENT="Marty Hall">

<META NAME="keywords"

CONTENT="JSP,expressions,JavaServer,Pages,servlets">

<META NAME="description"

CONTENT="A quick example of JSP expressions.">

<LINK REL=STYLESHEET

HREF="JSP-Styles.css"

TYPE="text/css">

</HEAD>

<BODY>

<H2>JSP Expressions</H2>

<UL>

<LI>Current time: <%= new java.util.Date() %>

<LI>Your hostname: <%= request.getRemoteHost() %>

<LI>Your session ID: <%= session.getId() %>

<LI>The <CODE>testParam</CODE> form parameter:

<%= request.getParameter("testParam") %>

</UL>

</BODY>

</HTML>

Expressions

http://localhost:8080/Expressions.jsp?testParam=TestePassando parâmetros via URL

JavaServer Pages

Page 188: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 188

JSP - Estrutura básica:

Scriptlets:

Os scriptlets são fragmentos de código Java que

são executados quando a JSP é ativada. Elas

aparecem dentro de tags <% e %>, intercaladas

com o conteúdo estático. Por exemplo: o código

abaixo verifica se o valor da variável contador é

maior que 0 e imprime uma mensagem na tela, de

acordo com o resultado:

<% if (contador > 0 ) { %>

<B>

o valor do contador <%= contador %>

</B> <% } else { %>

<B>

o valor do contador é zero

</B>

<% } %>

JavaServer Pages

Page 189: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 189

JSP - Estrutura básica:

Scriptlets:

Os scriptlets e a expressão aparecem intercalados

com código HTML na ordem que eles devem ser

executados.

Os scriptlets não são necessariamente blocos

completos de instrução Java.

Quando a página é traduzida, essas pedaços de

código Java são combinados para gerar um bloco

Java.

Esse bloco deve ser sintaticamente válido, para

compilar com êxito. Vejamos como codificar o scriptlet

usando a notação XML.

JavaServer Pages

Page 190: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 190

JSP - Estrutura básica:

Scriptlets: (continuação)

<jsp:scriptlet>

if (contador > 0 ) { %>

</jsp:scriptlet> <B>

o valor do contador

<jsp:expression> contador

</jsp:expression>

</B> <jsp:scriptlet> } else {

</jsp:scriptlet>

<B>

o valor do contador é zero

</B>

<jsp:scriptlet>} </jsp:scriptlet>

JavaServer Pages

Page 191: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 191

JSP - Estrutura básica:

Request:

Esse objeto representa a requisição HTTP da

chamada do cliente. Ele é uma espécime do tipo

javax.servlet.http.HttpServletRequest, ele fornece os

métodos como getParameter(), getParameterNames()

e getParameterValues(), para recuperar parâmetros de

ativação da requisição HTTP.

Response:

Esse objeto representa a resposta HTTP do servidor.

Ele é uma espécime do tipo

javax.servlet.http.HttpServletResponse, ele fornece os

métodos como setContentType(), para configurar a

codificação de caracteres de saída.

JavaServer Pages

Objetos JSP implícitos:

Para facilitar o desenvolvimento das páginas JSPs,

existem vários objetos Java que estão disponíveis

para uso.

Objetos implícitos: Request, Response, Session, out e

Application

Page 192: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 192

JSP - Estrutura básica:

Objetos JSP implícitos: (continuação)

Session:

Esse objeto representa a sessão HTTP associado a

requisição do cliente. Ele é uma espécime do tipo

javax.servlet.http.HttpServletSession, ele fornece os

métodos como getAttribute, setAttribute, para

armazenar e recuperar dados.

Out:

Esse objeto representa o fluxo de saída da JSP. Ele

usado para escrever os dados estáticos. Ele é uma

espécime do tipo javax.servlet.jsp.JspWriter e prove

métodos como print(), println(), clear(), flush() e close(),

para escrever dados de saída.

Application:

Esse objeto representa o contexto da aplicação Web

(contexto de servlet) dentro do qual a JSP está sendo

executada. Ele é uma espécime do tipo

javax.servlet.ServletContext, prove métodos como

log(), para gravar erros e outras mensagens no arquivo.

JavaServer Pages

Page 193: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 193

Objetos JSP implícitos: (continuação)

A especificação JSP define outros objetos implícitos,

como pageContext, config e page.

pageContext: Representa o contexto da página JSP,

javax.servlet.jsp.PageContext

config: É semelhate ao “ServletConfig” ele recebe o

método init.

page: É similar ao “this” da linguagem Java, não é muito

usado nas páginas JSPs.

Veja um exemplo de um scriptlet JSP que usa o objeto

implícito request.

<%

String user = request.getParameter(“unsername”);

out.print(user);

%>

JavaServer Pages

Page 194: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 194

JSP - Sintaxe básica e estrutura

Comentários

Existem dois tipos principais de comentários que podem

ser usados em uma página JSP:

Comentário de Conteúdo: esses comentários são

enviados de volta para o browser como parte da resposta

de JSP e são visíveis na visualização do código da

página. O comentário de conteúdo tem a seguinte

sintaxe:

<!-- comment -->

Aqueles familiarizados com HTML percebem que é a

mesma sintaxe de comentário para essa linguagem de

marcação. Tais comentários não produzem qualquer

saída visível, mas podem ser visualizados pelo usuário

final através do item "view source" do browser.

Comentários JSP: não são enviados para o cliente e

são visíveis apenas nos arquivos fonte JSP originais. O

corpo do comentário é ignorado pelo container JSP. Os

comentários JSP podem assumir duas sintaxes:

<%-- comment --%> e

<% /* comment */ %>

Esse segundo comentário é introduzido dentro da página

através de um scriptlets, usando a sintaxe de comentário

nativa da linguagem de criação de scripts, no caso JAVA.

JavaServer Pages

Page 195: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 195

JavaServer Pages

Page 196: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 196

JSP - Sintaxe básica e estrutura

JavaServer Pages

<%@ directive %>

<jsp:directive.typeAttribute = value/>

Actions

As diretivas permitem fazer as seguintes coisas:

- inserir dinamicamente um arquivo;

- Invocar componentes Javabeans e

- Chamar outra página.

As diretivas são usadas para fornecer informações especiais ao

contêiner JSP sobre a página JSP quando ela é compilada

para servlet. As diretivas JSP afetam a estrutura global da

classe servlet.

Page 197: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 197

JSP - Sintaxe básica e estrutura

Diretivas:

Existem dois tipos de diretivas:

- page: permite importar classes, customização da super

classes Servlet entre outras coisas;

- include: permite que seja inserido o conteúdo de um arquivo

no servlet no momento em que o arquivo JSP é traduzido para

servlet.

- Diretiva page:

A diretiva page tem a seguinte sintaxe:

<%@ page attribute1=valor1 attribute2=valor2 attribute3=... %>

Abaixo relacionamos os atributos mais utilizados nas diretivas

page:

- Atributo import:

import="package.class" ou

import="package.class1,...,package.classN".

permite que seja especificado qual o pacote a ser importado.

Por exemplo:

<%@ page import="java.util.*" %>

O atributo import pode pode aparecer várias vezes na mesma

página.

JavaServer Pages

Page 198: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 198

JSP - Sintaxe básica e estrutura

- Atributo isThreadSafe isThreadSafe="true|false".

O valor de true (default) indica que servlet é compartilhado

pelas múltiplas requisições. Quando o valor é false indica que

o servlet deve implementar SingleThreadModel, ou seja, não

será compartilhado.

- Atributo session session="true|false".

O valor de true (default) indica que a variável predefinida

session (do tipo HttpSession) deve estar conectada a sessão

existente, caso não exista uma sessão, uma nova é criada. O

valor false indica que não será usado a sessão.

- Atributo buffer buffer="sizekb|none"

Especifica o tamanho do buffer para o JspWriter.out (saída). O

buffer padrão é definido pelo servidor.

- Atributo autoFlush autoflush="true|false"

o valor de true (default) indica se o “buffer” deve ser esvaziado

quando estive cheio. O valor false, indica que uma exceção

deve ser apresentada quando ocorrer overflows.

JavaServer Pages

Page 199: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 199

JSP - Sintaxe básica e estrutura

- Atributo extends extends="package.class"

Define se a super classe do servlet deve ser gerada.

- Atributo info info="message"

Define uma string que pode ser recuperada pelo método

getServletInfo(). Com esse atributo o desenvolvedor pode

adicionar uma dados sobre a documentação da página que

resume sua funcionalidade. O valor padrão para o atributo

é a cadeia vazia (null).

- Atributo errorPage errorPage="url"

Especifica que a página JSP deve processar algum

Throwables (Classe de exceção), mas, não carregá-la na

página corrente.

- Atributo isErrorPage isErrorPage="true|false"

Define se uma página pode atuar como uma página de

execeção para uma outra página JSP. O default é false.

- Atributo language language="java"

Especifica a linguagem que está sendo usada. Por

enquanto o JSP suporta somente Java.

JavaServer Pages

Page 200: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 200

JSP - Sintaxe básica e estrutura

Sintaxe básica (continuação)

Diretiva include:

A diretiva include permite que sejam incluídos arquivos na

hora em que a página JSP é traduzida no servlet.

Uma directive include é algo como:

<%@ include file="relative url" %>

Essa diretiva pode ser implementada de acordo com o a

necessidade do desenvolvedor.

A maior vantagem deste recurso é que ele evita a duplicação

de código.

Exemplo:

Muitos sites têm uma barra de navegação em cada página.

Devido a problemas com frames HTML isto é normalmente

implementado com um tabela repetindo o código HTML em

cada página do site.

Esta diretiva ajuda o desenvolvedor na construção de páginas

JSP e facilita a manutenção. Veja o código abaixo:

<html>

<%@ include file=" barranavega.html" %>

<!-Parte específica da página ... -->

</body>

</html>

JavaServer Pages

Page 201: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 201

JSP - Sintaxe básica e estrutura

Sintaxe básica (continuação)

<%@ include file="relative url" %>

Continuação do exemplo:

<font face="verdana" size=1 color="#ffffcc">

<a href="home.jsp">HOME</a> -

<a href="secao_01.jsp">SEÇÃO 01</a> -

<a href="secao_02.jsp">SEÇÃO 02</a> -

<a href="secao_02.jsp">SEÇÃO 02</a>

</font>

Arquivo barranavega.html

<html>

<body>

<font face="verdana" size=1 color="#ffffcc">

<a href="home.jsp">HOME</a> -

<a href="secao_01.jsp">SEÇÃO 01</a> -

<a href="secao_02.jsp">SEÇÃO 02</a> -

<a href="secao_02.jsp">SEÇÃO 02</a>

</font>

<!-Parte específica da página ... -->

</body>

</html>

JavaServer Pages

Page 202: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 202

JSP - Sintaxe básica e estrutura

Resumo das principais Sintaxes

DeclaraçõesDeclara variáveis e métodos válidos no

script daquela página.<%! declaração; [declaração;]+ ... %>

ExpressõesContém uma expressão válida no script daquela

página.<%= expressão %>

ScriptletContém um fragmento de código válido no

script daquela página.

<% fragmento de um código com uma ou mais linhas

%>

Comentário

HTML

Cria um comentário que é enviado para o

cliente viabilizar no código da página.<!-- comentário [<%= expressão %>] -->

Comentário

JSP

É visto apenas no fonte do JSP mas não é

enviado para o cliente.

<%-- comentário --%> ou

<% /* comentário */ %>

Diretiva

"Include"

Inclue um arquivo estático, analisando os

elementos JSP daquela página.<%@ include file="URL relativa" %>

Diretiva

"Page"

Define atributos que serão aplicados a uma

página JSP.

<%@ page [ atributo = valor(es) ] %>

atributos e valores:- language="java"

- extends = "package.class"

- import = "{package.class" | package.* }, ..." ]

- session = "true | false"

- buffer = "none | 8kb | sizekb"

- autoFlush = "true | false"

- isThreadSafe = "true | false"

- info = "text"

- errorPage"relativeURL"

- contentType = "{mimeType [; charset = characterSet

] text/html; charset = isso-8859-1}"- isErrorPage = "true | false"

DiretivaTaglib

Define uma biblioteca tag e um prefixo parauma tag padrão usada na página JSP.

<%@ taglib uri="URIToTagLibrary"prefix="tagPrefix" %>

<tagPrefix:na

me>

Acessa um padrão de funcionalidade de uma

tag.

<tagPrefix:name attribute="value" + ... />

<tagPrefix:name attribute="value" + ... >

other tags and data

</tagPrefix:name>

<jsp:foward>Redireciona uma requisição para um arquivo

HTML, JSP ou servlet para processar.

<jsp:forward page="{relativeURL | <%= expressão

%>}"

JavaServer Pages

Page 203: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 203

JavaServer Pages

Page 204: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 204

JSP - Sintaxe básica e estrutura

Cookies

Cookie é um mecanismo padrão fornecido pelo protocolo

HTTP e que permite gravarmos pequenas quantidades de

dados persistentes ou transientes no browser de um usuário.

Tais dados podem ser recuperados posteriormente pelo

navegador. Esse mecanismo é usado quando queremos

recuperar informações. Com os cookies, pode-se reconhecer

quem entra num site, de onde vem, com que periodicidade

costuma voltar. Para se ter uma idéia de como eles fazem

parte da sua vida, dê uma olhada na sua máquina. Se você

usa o Internet Explore:

JavaServer Pages

Page 205: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 205

JSP - Sintaxe básica e estrutura

Cookies

No Netscape 7.0, os cookies ficam em

. Os cookies em si não atrapalham ninguém, se propriamente

usados.

Como padrão, os cookies expiram tão logo o usuário encerra

a navegação naquele site, porém podemos configurá-los para

persistir por vários dias. Além dos dados que ele armazena,

um cookie recebe um nome; um servidor pode então definir

múltiplos cookies e fazer a identificação entre eles através

dos seus nomes. Os cookies são associados ao URL da

página que os manipula.

JavaServer Pages

Page 206: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 206

JSP - Sintaxe básica e estrutura

Cookies

Gerenciando Cookies

Os cookies são definidos por um servidor da web. Quando

um usuário solicita um URL cujo servidor e diretório

correspondam àqueles de um ou mais de seus cookies

armazenados, os cookies correspondentes são enviados de

volta para o servidor. As páginas JSP acessam os seus

cookies associados através do método getCookies() do objeto

implícito request. De forma similar, as páginas JSP podem

criar ou alterar cookies através do método addCookie() do

objeto implícito response.

JavaServer Pages

Objeto Implícito Método Descrição

request getCookies() retorna uma matriz de cookies acessíveis da página

response addCookie() envia um cookie para o navegador para armazenagem/modificação

Esses métodos são resumidos na tabela abaixo:

Page 207: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 207

JSP - Sintaxe básica e estrutura

Cookies

A classe Cookie

Manipulamos um cookie através de instâncias da classe

javax.servlet.http.Cookie (API import javax.servlet.http.*;)

Essa classe fornece apenas um tipo de construtor que recebe

duas variáveis do tipo String, que representam o nome e o

valor do cookie. O cookie tem a seguinte sintaxe:

Cookie cookie = new Cookie("nome" , "valor");Abaixo apresentamos os métodos fornecidos pela classe Cookie:

Método Descrição

getName() retorna o nome do cookie

getValue() retorna o valor armazenado no cookie

getDomain() retorna o servidor ou domínio do qual o cookie pode ser acessado

getPath() retorna o caminho deURL do qual o cookie pode ser acessado

getSecure() indica se o cookie acompanha solicitações HTTP ou HTTPS.

setValue() atribui um novo valor para o cookie

setDomain() define o servidor ou domínio do qual o cookie pode ser acessado

setPath(nome do path) define o caminho de URL do qual o cookie pode ser acessado

setMaxAge(inteiro) define o tempo restante (em segundos) antes que o cookie expire

setSecure(nome) retorna o valor de um único cabeçalho de solicitação como um número inteiro

Depois de construir uma nova instância, ou modificar uma

instância recuperada através do método getCookies(), é

necessário usar o método addCookie( ) do objeto response,

com a finalidade salvar no navegador do usuário as alterações

feitas no cookie. Para apagar um cookie utilizamos a seguinte

técnica: chamamos o método "setMaxAge(0)" com valor zero e

depois mandamos gravar chamando o método "addCookie( )".

Isso faz com que o cookie seja gravado e imediatamente

(após zero segundos) expira.

JavaServer Pages

Page 208: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 208

JSP - Sintaxe básica e estrutura

Cookies (exemplo:)

Guardando informações em um Cookie

<html>

<head>

<title>The Red Cookie Page</title>

</head>

<%@ page import="java.util.Date" %>

<%@ page import="java.net.*" %>

<% String cookieName = "RedCookie";

Date now = new Date();

String timestamp = now.toString();

Cookie cookie = new Cookie(cookieName, URLEncoder.encode(timestamp));

cookie.setPath("/webdev");

cookie.setMaxAge(7 * 24 * 60 * 60); // One week

cookie.setVersion(0);

cookie.setSecure(false);

cookie.setComment("Timestamp for red cookie.");

response.addCookie(cookie);

%>

<body>

<font color="red">

<h1>The Red Cookie Page</h1>

<p>

This is the <i>red</i> cookie page.<br>

The blue cookie page is <a href="blue-cookie.jsp">here</a>.

</p>

</font>

</body>

</html>

JavaServer Pages

Page 209: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 209

JSP - Sintaxe básica e estrutura

Recuperando as informações de um Cookie

<html>

<head>

<title>The Blue Cookie Page</title> </head>

<%@ page import="java.util.Date" %>

<%@ page import="java.net.*" %>

<% String cookieName = "RedCookie";

Cookie cookies[] = request.getCookies();

Cookie redCookie = null;

if (cookies != null) {

for (int i = 0; i < cookies.length; ++i) {

if (cookies[i].getName().equals(cookieName)) {

redCookie = cookies[i];

break;

}

}

}

%>

<body>

<font color="blue">

<h1>The Blue Cookie Page</h1>

<p>This is the <i>blue</i> cookie page.<br>

You last visited the <a href="red-cookie.jsp">red cookie page</a>

<% if (redCookie == null) { %>

over a week ago.

<% } else { %>

on <%= URLDecoder.decode(redCookie.getValue()) %>.

<% } %>

</p> </font>

</body>

</html>

JavaServer Pages

Cookies (exemplo:)

Page 210: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 210

JavaServer Pages

Page 211: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 211

Tratamento de exceções

Exceções

Existem pelo menos dois tipos de exceções que podem

ocorrer com uma JSP, a primeiro ocorre “tempo de

compilação”, ou seja, quando da tradução de JSP para Java

Servlet, por exemplo, erros de sintaxes, veja a figura abaixo:

Descritor da Tag Library500 Servlet Exception

/Fact.jsp:9: '}' expected.

pageContext.write(_jsp_string4, 0, _jsp_string4.length);

^

/Fact.jsp:12: Statement expected.

public long fact(long x) throws IllegalArgumentException {

^

/Fact.jsp:18: Identifier expected.

pageContext.write(_jsp_string5, 0, _jsp_string5.length);

^

3 errors

Resin 2.0.4 (built Thu Nov 15 17:56:24 PST 2001)

JavaServer Pages

Engine JSP

Erros?

Sim

Não, gera o Servlet

Browser

BrowserHttp://localhost:8080/Fact.jsp

2

1

3

Lado

Servidor

Page 212: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 212

Tratamento de exceções

Exceções

O outro tipo de erro que acontece é “em tempo de execução”,

quando uma requisição é feita e por algum motivo gera uma

exceção, que pode ser desde a falha pode ser de comunicação

(rede), de hardware, de web server ou simplesmente quando

um objeto ou um recurso é solicitado não é encontrado. Veja o

exemplo abaixo:

JavaServer Pages

Browser

Http://localhost:8080/login.jsp

2

1

3

Objeto

500 Servlet Exception

/profile.jsp:9: jsp:useBean

can't find class

`User.Profilea'

Resin 2.0.4 (built Thu Nov 15 17:56:24 PST

2001)

autenticar.jsp

...

<jsp:useBean id=”p" scope="page" class=”User.Profile"/>

<jsp:setProperty name = "p" property= "*" />

Lado

Servidor

Chama o objeto

(o componente

Javabean)

Profile

Page 213: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 213

Tratamento de exceções

Quando acontece uma exceção em tempo de execução, devemos trata-

lá através de implemento de página de erro, por exemplo, o papel desta

página e tornar mais amigável a mensagem de exceção, todavia,

podemos fazer algumas interações como gravar o erro em um “log” ou

enviar um

e-mail para pessoa responsável pela aplicação. A figura abaixo ilustra

esta situação.

Browser Http://localhost:8080/login.jsp

2

1

3

autenticacao.jsp

...

<jsp:useBean id=”p" scope="page" class=”User.Profile"/>

<jsp:setProperty name = "p" property= "*" />

Lado

Servidor

Erros?

erro.jsp

Não, chama o objeto

simChama o

objeto

Profile

Requisita a

colaboração

da JSP

autenticacao

Trata as

possíveis

exceções

4Responde

a requisição

(Exibe

mensagem)

JavaServer Pages

Page 214: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 214

Como criar uma página genérica para tratar as exceções:Agora vamos implementar a solução apresentada para tratamento de

exceções “em tempo de execução”.

Passos:

1 - Criar um página genérica de exceção

2 - Criar páginas para testar a funcionalidade

3 - Fazer um novo teste simulando uma exceção

Vamos criar a página genérica de erro, que será responsável por exibir

as mensagens de exceções ou de erro.

Veja página errorpage.jsp

<%@ page isErrorPage="true" %>

<html>

<body text="red">

<!-- mensagem -->

Error: <%=exception.getMessage() %> foi encontrado, avise o responsável pela

Aplicação!

</body>

</html>

O atributo isErrorPage =“true”, indica que a página pode fazer

tratamento de exceções. Este atributo chama o Container JSP para criar

o objeto exception implícito na página.

Sintaxe: <%@ page isErrorPage="true|false" %>

Podemos destacar do código os seguintes trechos:

Sintaxe: <%= exception.getMessage() %>

Exibe a mensagem de erro.

JavaServer Pages

Tratamento de exceções

Page 215: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 215

<%@ page contentType="text/html" errorPage="errorpage.jsp" %>

<html>

<body text="red">

<!-- teste -->

<% if (true) {

throw new Exception("Test exception");

}

%>

</body>

</html>

Esta diretiva será responsável por referenciar a página de erro.

Error: Test exception foi encontrado, avise o responsável pela Aplicação!

No segundo teste vamos criar uma página simples que apresente uma

exceção no momento de sua execução.

Testando a funcionalidade:Para garantir a funcionalidade da solução, precisamos fazer um teste.

Abaixo o página de teste. Testerror.jsp

Sintaxe: <%@ page errorPage="errorpage.jsp" %>

Os Testes

Após o teste devemos ter a seguinte mensagem exibida no “Browser”:

Destaques:

throw new Exception("Test exception")

Provoca uma exceção, passando a mensagem.

JavaServer Pages

Tratamento de exceções

Page 216: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 216

Abaixo uma nova página de teste, chamaremos de divisao.jsp

<%@ page contentType="text/html" errorPage="errorpage.jsp" %>

<html>

<!-- teste -->

<%

int bananas = 0;

int macacos = 10;

out.println( "Quantas bananas ganhara cada macaco? " + macacos/bananas );

%>

</body>

</html>

O resultado do segundo teste foi:

Error: / by zero foi encontrado, avise o responsável pela Aplicação!

Veja a exceção: Divisão por zero

Tratamento de exceções

JavaServer Pages

Page 217: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 217

Tornando as mensagens mais amigáveis:

Podemos personalizar a mensagem de erro, para que ela fique mais

amigável, entretanto, para isto precisamos fazer alguns ajuste na

página genérica de exceção. Veja o código da página abaixo

myerrorpage.jsp

<%@ page isErrorPage="true" %>

<html>

<body text="red">

<!-- mensagem -->

Error:

<%

if (exception instanceof ArithmeticException) {

out.println("<H2>" + "Divisão por zero!" + "</H2><BR>");

}

else

{

out.println(exception.getMessage());

}

%> foi encontrado, avise o responsável pela Aplicação!

</body>

</html>

Está linha de código possibilita a personalização da exceção, assim

estamos tratando a exceção referente a divisão por zero.

if (exception instanceof ArithmeticException)

Tratamento de exceções

Destaque:

JavaServer Pages

Page 218: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 218

Um novo teste:

Para fazer um teste como nova página genérica de exceção, será

necessário criar um arquivo, neste caso criaremos o mydisivao.jsp,

que é semelhante ao exemplo anterior, a única mudança foi na diretiva:

page errorPage= “myerrorpage.jsp, Veja o exemplo completo abaixo:

<%@ page contentType="text/html" errorPage="myerrorpage.jsp" %>

<html>

<!-- teste -->

<%

int bananas = 0;

int macacos = 10;

out.println( "Quantas bananas ganhara cada macaco? " +

macacos/bananas );

%>

</body>

</html>

O resultado deste teste foi:

Error:

Divisão por zero!foi encontrado, avise o responsável pela Aplicação!

Tratamento de exceções

Veja neste caso que a mensagem exibida é mais inteligível.

JavaServer Pages

Page 219: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 219

JavaServer Pages

Page 220: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 220

Ações:

Introdução:

As ações em JSP são definidas como Tags que podem ser

usada para facilitar o encapsulamento de ações comuns.

Existem dois tipos de ações:

- Aquelas que estão relacionadas com JavaBeans

- Outro padrão de ações;

Nós começaremos com os JavaBeans.

JavaServer Pages

Page 221: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 221

Solução Java

Page 222: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 222

Introdução

JavaBeans são componentes escritos em Java, podendo

conter regras de negócios, controle de segurança, conexão

com banco de dados, formatação de campos em interfaces

entre outras coisas.

A função do JavaBeans em relação a JSP, é que Beans deve

conter regras de negócios, enquanto a JSP tem como objetivo

separar conteúdo das regras de negócios, gerar conteúdo

dinâmico e etc.

Maior vantagem dos componentes é a possibilidade de reúso

de código, já que este podem ser usados por mais de uma

aplicação.

Estrutura:

Os componentes são compostos de propriedades e métodos.

O métodos devem ser do tipo get/set. Sintaxe:

set:

public void set<Nome da Propriedade>(<Nome da

Propriedade> valor)

{ //corpo do método }

get:

public <Tipo da Propriedade> get<Nome da Propriedade>()

{ //corpo do método }

public <Tipo da Propriedade> is <Nome da Propriedade>()

O método is<Tipo da Propriedade> é usado somente para

propriedades do tipo Boolean.

JavaBeans

Solução Java

Page 223: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 223

Introdução (continuação)

As propriedades podem ser ordenadas. Neste caso, os

métodos são declarados da seguinte forma:

set

public void set<Nome da Propriedade>(int índice,<Nome da

Propriedade> valor)

{ //corpo do método }

get:

public <Tipo da Propriedade> get<Nome da

Propriedade>(int índice)

{ //corpo do método }

public <Tipo da Propriedade> is <Nome da Propriedade>(int

índice)

Solução Java

JavaBeans

Page 224: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 224

JavaBeans

Principais Características:

• Instropection (introspeção)

Controle a publicação e identificação das operações e

propriedades de um bean.

• Customization (personalização)

Habilita o desenvolvedor a personalizar a aparência e

comportamento de bean em tempo de projeto

• Event (eventos)

Habilita a comunicação entre beans através modelo de

eventos

• Properties (propriedades)

Deixa o desenvolvedor escolher a aparência e o

comportamento

• Persistence (persistência)

Permite o salvar e recuperar o estado de bean em meio

físico.

Page 225: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 225

JavaBeans

O que é Persistência ?

“É a possibilidade de armazenar e recuperar os estados

dos objeto em dado momento.”

Na linguagem Java, consequentemente no JavaBeans, a

persistência é implementada através da Interface Serializable .

Classes, Objetos e Persistência. Exemplo:

ISBN 0747551006

Titulo: Harry Potter and the

Order of the Phoenix

Autor: J. K. Rowling

ISBN 0747551006

Titulo: O Poder da inteligência

Emocional

Autor: Daniel Goleman

Cada livro desta coleção é “instance”

(objeto) da classe livro.Cada objeto

possui um estado

Persistência

00010000

00010011

11110001

11101010

10101011

Serializable

Page 226: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 226

JavaBeans

Serialization é implementação de persistência em Java.

O que é persistência ?

É a possibilidade de gravar métodos virtuais em um meio

físico, por exemplo Hard Disk.

Entretanto alguns recursos não suportam a persistência são

eles: THREADS, IMAGENS E CONEXÕES.

A persistência deve ser implementada com cuidado, pois, uma

vez implementada, poderemos ter problemas com segurança.,

pois os métodos podem representar as regras de negócios e

estas podem acabar sendo violadas.

Para especificar os recursos e/ou atributos que não devem ser

persistindo, devemos usar a palavra reservada chamada

“transient”.

Page 227: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 227

JavaBeans

Exemplo de JavaBeans .

import java.io.Serializable;

public class MyBean implements Serializable {

private int property1;

private boolean property2;

public MyBean() {

}

public void setProperty1(int property1) {

this.property1 = property1;

}

public void setProperty2(boolean property2){

this.property2 = property2;

}

public int getProperty1() {

return property1;

}

public boolean isProperty2() {

return property2;

}

}

Page 228: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 228

Neste exemplo, a tag useBean “instanciará um” objeto que será

identificado por soma, a partir da classe app.Soma.

A definição do escopo depende muito do projeto em questão.

No exemplo acima, este objeto criado será compartilhado por

toda sessão que será mantida com o usuário. Caso encontre-

se uma nova tag de criação de um objeto da classe app.Soma,

o objeto já instanciado será usado não havendo a necessidade

de criação de outro.

Solução Java

JavaBeans

Usando componentes JavaBeans

Antes de fazer acesso um “bean” dentro de uma página JSP, é

necessário identificar o bean e obter uma referência dele. A tag

jsp:useBean tenta obter uma referência de um bean que já

esteja criado, dependendo do escopo em que ele foi definido.

Caso não haja o componente definido haverá a criação de um

novo objeto.

Sintaxe da a tag:

<jsp:useBean id="nome do objeto"

class="nome_completo_da_classe"

scope="page|request|session|application”/>

Exemplo:

<jsp:useBean id=”soma" class=”app.Soma" scope="session"/>

Page 229: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 229

Usando componentes JavaBeans

Passos para criação do objeto:

1. Tentativa de localizar o objeto baseado nas informações (id,

scope). Este inspeção é feita sincronizada apropriadamente

por escopo para evitar comportamentos não-determinísticos.

2. Definir a variável de script identificado por id.

3. Se o objeto for encontrado, a variável é inicializada com a

referência localizada e então é realizado um casting para o tipo

específico. Se o cast falhar então uma exceção do tipo

java.lang.ClassCastException irá ocorrer e o processamento da

tag acaba.

4. Se o objeto não for encontrado no escopo e a classe não

poder ser encontrada, então uma exceção do tipo

java.lang.InstantiationException ocorrerá e o processamento da

tag acabará.

5. Se o objeto não foi achado no escopo e a classe for

encontrada com um construtor default (sem argumentos) o

objeto é “instanciado” e associado com a variável de scriplet

identificada por id.

Se um construtor sem argumentos não for encontrado então

uma exceção do tipo java.lang.InstantiationException ocorrerá

e o processamento da tag encerará

Solução Java

JavaBeans

Page 230: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 230

Usando componentes JavaBeans

Passos para criação do objeto:

6. O processamento do corpo da tag é então executado. Um

corpo de uma tag <jsp:useBean> é executado para realizar

algumas inicializações desejadas, veja o exemplo:

<jsp:useBean id=”paciente" class="Cliente" scope="page">

<jsp:setProperty name=”paciente" property="nome"

value=”Duke">

<jsp:setProperty name=”paciente" property="telefone"

value=”9090-6666"/> </jsp:useBean>

Neste exemplo é inicializado o objeto “paciente” com as

propriedades nome e telefone.

Solução Java

JavaBeans

Page 231: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 231

Exemplo

Arquivo JSP:

<%@ page contentType="text/html;charset=WINDOWS-1252"%>

<html>

<head>

<title>

Bean Pontencia

</title>

</head>

<body>

<jsp:useBean id="p" scope="page" class="Soma.Potencia"/>

<jsp:setProperty name = "p" property= "*" />

<form>

<input type=text name="num1" size=5 value="<jsp:getProperty

name="p" property = "num1" />"> ^

<input type=text name="num2" size=5 value="<jsp:getProperty

name="p" property = "num2" />"> =

<jsp:getProperty name="p" property = "resultado" />

<br>

<input type=submit>

</form>

</body>

</html>

Arquivo

JSPJavaBeans

Requisição

Resposta

Servlet-JSP

JavaBeans

Solução Java

Page 232: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 232

package Soma;

public class Potencia

{

double num1 = 0, num2 = 0;

public void setNum1(double valor)

{

num1 = valor;

}

public double getNum1()

{

return num1;

}

public void setNum2(double valor)

{

num2 = valor;

}

public double getNum2()

{

return num2;

}

public double getResultado()

{

if (num1 == 0 || num2 == 0)

{

return 0;

}

else

{

return Math.pow(num1,num2);

}

} }

JavaBeans

Solução Java

Exemplo

Como compilar: javac -d . Potencia.java, o arquivo .class

estará dentro de “subpasta” chamada Soma.

Page 233: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 233

JavaServer Pages

Page 234: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 234

Outras Ações:

JavaServer Pages

<jsp:include> Fornece um mecanismo para inclusão de

arquivo em página JSP.

<jsp:include page="relative URL" flush="true" />

Exemplo: <jsp:include page= "header.jsp" flush="true" />

<jsp:param> Esta tag é usada para prover um parâmetro e

seu respectivo valor, paradigma chave e valor.

<jsp:param name= "cidade" value= "Javali" />

Esta tag pode ser usado junto com as outras ações.

<jsp:plugin> - Permite executar um applet ou JavaBeans, se

for preciso carrega um plug in java para executa-lo.

<jsp:plugin type = "pluginType"

code="classFile"

codebase ="relativeURL" >

....

</jsp:plugin>

<jsp:forward> - Permite fazer “Forward” passar a requisição

para outra página.

<jsp:forward page = "relativeURL" />

Page 235: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 235

JSP - Integrando JSP e Servlets

Outras Ações:

<html>

-->

<body bgcolor="white">

<!-- Forward to a servlet -->

<jsp:forward page="/servlet/servletToJsp" />

</html>

Arquivo JSP1

Arquivo

JSP Servlet

Requisição

Resposta

Servlet-JSP

Arquivo

JSP

Para chamar um Servlet a partir de um arquivo JSP,

usamos o método forward

(javax.servlet.RequestDispatcher - esta interface fornece

funcionalidade que permitem incluir ou encaminhar

as requisições para outros recursos).

JavaServer Pages

Page 236: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 236

Arquivo JSP (Hello.jsp)3

JSP - Integrando JSP e Servlets

import javax.servlet.*;

import javax.servlet.http.*;

public class servletToJsp extends HttpServlet {

public void doGet (HttpServletRequest request,

HttpServletResponse response) {

try {

// Set the attribute and Forward to hello.jsp

request.setAttribute ("servletName", "servletToJsp");

getServletConfig().getServletContext().getRequestDispatcher("/jsp/jsptoserv/hel

lo.jsp").forward(request, response);

} catch (Exception ex) {

ex.printStackTrace ();

}

}

}

<html>

<body bgcolor="white">

<h1>

I have been invoked by

<% out.print (request.getAttribute("servletName").toString()); %>

Servlet.

</h1>

</html>

Arquivo Servlet2

JavaServer Pages

Outras Ações:

Page 237: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 237

JavaServer Pages

Page 238: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 238

Introdução Tag Lib

O padrão de tags do JSP, (<jsp:useBean id=”teste"

class=”regras.Teste" scope="session"/>) permite invocar as

operações sobre um componente JavaBeans para atender as

requisição e despachar páginas JSPs.

Entretanto, a tecnologia JSP, também fornece um outro

mecanismo para encapsular outros tipos de funcionalidades

dinâmicas em “custom tags”, que são extensões da linguagem

JSP.

“Custom tags” são geralmente distribuídas na forma de “tag

libraries” que definem um conjunto de tags e contém os objetos

que implementam estas tags.

Alguns exemplos de coisas que podemos realizar com “Custom

tags”: Operações com objetos implícitos, processar formulários,

controlar fluxo de controle (if, for, while etc), fazer acesso banco

de dados, enviar e-mail, mensagens e outros serviços.

Enfim podemos tratar regras de negócios.

Tag Libs

Page 239: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 239

O que é Custom Tag ?

Custom Tag é um elemento da Linguagem JSP que é definida

pelo usuário (desenvolvedor).

Quando uma página JSP contém uma “custom tag” ela é

traduzida em um servlet, a tag é convertida para operação

sobre um objeto chamado tag handler.

O container Web então invoca estas operações quando a

página JSP é executada.

Principais características:

Podem ser personalizadas via atributos passados pela página

chamadora

Podem fazer acesso a todos objetos disponíveis na página

JSP.

Podem modificar a resposta gerada pela página chamadora.

Por ser aninhada dentro outra tag, permite interações

complexas dentro de página JSP

Tag Libs

Page 240: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 240

Tab Library

É composta de três elementos:

- Diretiva taglib:

É uma tag inserida dentro das páginas JSP que permite

chamar uma tag custom.

- Tag Library Descriptor (TLD):

Arquivo XML que define a tag e descrevem informações sobre

as tag (por exemplo: localização) e a conecta à sua classe

(Tag Handler).

- Tag Handler Classes:

Fornece funcionalidades as tags. A classe que executa as

operações associadas as tags.

Tag Libs

Page 241: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 241

Arquitetura:

TLDJSP

Biblioteca

<%@

taglib

uri="http://boo.co

m/ex”

prefix=”data"%>

<taglib>

<tag>

...

</tag>

</taglib>

Tag1.class

Tag2.class

Tag3.class

TagN.class

Java

JSP XML

Tag Libs

Page 242: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 242

Page 243: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 243

Diretiva taglib:

Diretiva taglib:

Esta diretiva deve ser declarada na página JSP (logo no início):

<%@ taglib uri="/WEB-INF/t-template.tld"

prefix="template" %>

...

<html>

<body>

<template: getName />

<body>

</html>

Tag Libs

Exemplo:

Define a tag “Hello” que tem como “tag

handler” a classe HelloTag.class.

<%@ taglib uir = /hello.tld” prefix = “h” %>

<hmtl>

<body>

<h:Hello/>

<body>

<html>

Page 244: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 244

Page 245: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 245

Descritor TLD (Tag Library Descriptors)

Um arquivo TLD é documento escrito em XML que descreve

uma tag lib.

Um arquivo TLD contém informações gerais e detalhada das

tag contidas dentro da lib. Os TLDs são usados pelo Web

Container para validar as tags.

Regras:

Os arquivos TLD devem ter a extensão “.tld”. São

armazenados no diretório WEB-INF de arquivo WAR ou em

subdiretório da WEB-INF.

Os arquivos TLDs deve começar com tag XML, que especifica

a versão do XML e do DTD (document type definition).

Exemplo:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD

JSP Tag

Library 1.2//EN"

"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

Tag Libs

Page 246: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 246

Tag Libs

Todos os subelementos

Page 247: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 247

Escrevendo o arquivo Descritor:

<? xml version=" 1.0" ?>

<! DOCTYPE taglib PUBLIC "-// Sun Microsystems, Inc.//

DTD JSP Tag Library 1.2// EN” "http:// java. sun. com/ dtd/

web- jsptaglibrary_ 1_ 2. dtd">

<taglib>

<tlib- version> 1.0</ tlib- version>

<jsp- version> 1.2</ jsp- version>

<short- name>exemplo</ short- name>

<uri> http:// boo. com/ ex </ uri>

<tag>

<name>data</ name>

<tag- class>exemplos. Data</ tag- class>

<description>Data atuale</ description>

</ tag>

</ taglib>

Descritor TLD (Tag Library Descriptors)

Tag Libs

Page 248: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 248

Exemplo:

Descritor TLD (Tag Library Descriptors)

Cada TLD pode especificar várias tags usando a

seguinte estrutura:

<tag>

<tagclass> Classe </tagclass>

<bodycontent>JSP|Itagdependent|empty</bodycontent>

<atribute>

<name> nome do atributo </name>

<required> true|false|yes|no </required>

<rtexprvalue> true|false|yes|no </ rtexprvalue >

</atribute>

<teiclass> LookupTagTEI<teiclass>

</tag>

Exemplo:

<?xml version=“1.0”?>

<taglib>

<tag>

<name> Hello </name>

<tagclass> HelloTag </tagclass>

<info> Exemplo Hello </info>

</tag>

</taglib>

Tag Libs

Page 249: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 249

Localização do Descritor

O arquivo Web.XML, exemplo:

<web-app>

<taglib>

<taglib-uri>/t-template</taglib-uri>

<taglib-location>

/WEB-INF/t-template.tld

</taglib-location>

</taglib>

</web-app>

Descritor TLD (Tag Library Descriptors)

Tag Libs

Page 250: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 250

Page 251: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 251

Tag handlers é tipo especial de classes que contém código

que executa uma tag, em outras palavras as funcionalidades

de um tag está contida dentro de tag handlers.

Diferente JavaBeans que são coleção de funcionalidades

comuns, as tag tem objetivo focado para dar suporte a uma

simples tag.

Um tag library tem uma tag handlers para cada custom tag.

Tag Handlers

Tag Libs

Tag handler é uma classe Java que implementa a interface

Tag (javax.sevlet.jsp.Tag) e é executada quando a tag

personalizada é processada pelo container JSP. Cada “tag

handler” implementa o método: public int doStartTag()

que especifica a ação a ser executada quando a tag é

processada. Se a tag incluir atributos, então a tag handler

deve definir esses atributos e seus métodos get/set, por

exemplo:

private String name = null;

public void setName(String s) {

name = s ;

}

public String getName() {

return name ;

}

Page 252: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 252

Tag Libs

Page 253: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 253

Exemplo:

public Hello extends Tag Suport {

public int doStartTag() throws JspExeption {

try {

pageContext.getOut().print(“Hello”);

} catch(Exception e) {

throws JspTagExeption(“Hello: ” +

e.getMessage());

}

return SKIP_BODY;

}

public int doEndTag() {

return EVAL_PAGE;

}

}

Tag Libs

Page 254: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 254

Page 255: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 255

Page 256: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 256

O que é JDBC ?

JDBC (Java Database Connectivity)

Para fazer conexão com Banco de Dados a

linguagem Java tem uma interface chamada

JDBC.

O que é a interface JDBC ?

É uma camada de abstração que permite um

aplicativo Java utilizar uma interface padrão

(que adere ao ANSI-2 SQL) para fazer acesso

a banco de dados relacional, através da

linguagem SQL.

ODBC (Open Database Connectivity) também

é uma interface de acesso a banco de dados

relacionais que possui drivers para um grande

número de banco de dados.

Uma aplicativo Java pode utilizar diretamente

uma interface ODBC, mas isto implica em

executar chamadas, dentro do código Java a

rotinas C da API do ODBC, chamadas com

código nativo Java são trabalhosas e elimina a

portabilidade de uma aplicação.

Conexão com Banco de Dados utilizando a

API JDBC

Conexão com Banco de DadosJDBC

Page 257: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 257

- Arquitetura JDBC

Um aplicativo Java utiliza uma API JDBC a que é

independente do Banco de Dados ou “driver” que estiver

sendo utilizado. Os drivers para conexão e acesso ao

principais banco de dados são fornecidos pelos fabricantes. O

desenvolvedor precisa apenas saber utilizar o driver

adequando e a API JDBC.

Onde obter os drivers?

A lista de fornecedores e/ou fabricantes de drivers JDBC está

em constante crescimento. Para maiores informações veja o

site: http://www.java.sun.com/products/jdbc.drivers.html

SGDB

Clientes

Banco de Dados

Aplicação

JDBC

Conexão com Banco de DadosJDBC

Page 258: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 258

API JDBC.

Pacote: java.sql

Principais interfaces & classes:

Pacote: java.sql.Statement

Interfaces: CallableStatement, Statement, PreparedStatement

ParameterMetaData

Pacote: java.sql.ResultSet

Interfaces: ResultSet, ResultSetMetaData,

javax.sql.RowSetMetaData, javax.sql.RowSet

Pacote: java.sql.Data

Interfaces: Blob, Clob, Array, Struct, Ref

Classes: Date, java.util.Date, Time, Timestamp, Types

Pacote: java.sql.Connection

Interfaces: DatabaseMetaData, Connection, Driver, Savepoint

Classes: DriverManager, DriverPropertyInfo

Exceção: SQLException e SQLWarning

Conexão com Banco de DadosJDBC

Page 259: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 259

API JDBC. Exemplos:

Pacote: java.sql

Principais interfaces & classes:

Pacote: java.sql.Statement

Interfaces: CallableStatement, Statement, PreparedStatement

Statement: (Select, Insert, Update, Delete e Create Table)Statement stmt = con.createStatement();

String sql = ”INSERT INTO Produto(codigo, descricao) VALUES(“+ codigo + “,’”+

descricao +”´)";

int result = st.executeUpdate(sql);

PreparedStatement: (Select, Update, Delete e Insert)String sql="DELETE Produto WHERE codigo like ?”

PreparedStatement pstmt = con.prepareCall(sql);

pstmt.setInt(1, 100);

pstmt.execute();

CallableStatement: (Executar Stored Procedure)

CallableStatement sp = conn.prepareCall("{ call sp_novo_depto(?, ? , ?)}");

sp.setInt(1, departamento);

sp.setString(2, nome);

sp.setString(3, local);

sp.execute();

Pacote: java.sql.Connection

Interfaces: DatabaseMetaData e Connection,

DatabaseMetaData:DatabaseMetaData dma = conn.getMetaData ();

System.out.println("\nConnected to " + dma.getURL());

System.out.println("\nConnected to " + dma.getUserName());

System.out.println("Driver " + dma.getDriverName());

System.out.println("Version " + dma.getDriverVersion());

Conexão com Banco de DadosJDBC

Page 260: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 260

API JDBC. Exemplos:

Pacote: java.sql

Principais interfaces & classes:

Pacote: java.sql.ResultSet

Interfaces: ResultSet e ResultSetMetaData,

ResultSet: (Select)Connection con = DriverManager.getConnection(url,usuario, senha);

Statement stmt = con.createStatement();

String sql = ”Select * from Produto";

ResultSet rs = stmt.executeQuery(sql);

while (rs.next()) {

System.out.println(rs.getInt(“codigo”) + “\t” + rs.getString(“descricao”);

}

ResultSetMetaData:ResultSet rs = st.executeQuery("Select codigo, descricao from Produto order by codigo");

ResultSetMetaData rsmd = rs.getMetaData();

int numberOfColumns = rsmd.getColumnCount();

Conexão com Banco de DadosJDBC

Page 261: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 261

Tipos de Drivers:

•Ponte JDBC-ODBC com driver ODBC

•Driver com API parcialmente nativa

•Driver puro-Java JDBC-rede

•Driver puro-Java com protocolo nativo

O Tipo 1 - Ponte

O acesso ao banco de dados é via driver ODBC convencional. A

ponte possui código nativo a fim de fazer chamadas à API

ODBC. A ponte quanto o driver ODBC devem residir na

máquina onde está o programa Java (uma vez que as

chamadas são locais). Isso exige um controle maior sobre a

distribuição do aplicativo Java (Cliente/Servidor)

Banco

de

Dados

Clientes

Aplicação

Protocolo

Servidor de

Aplicação

JDBC

HTTP/IIOP/RMI

JDBC. Tipos de Drivers

Conexão com Banco de DadosJDBC

Page 262: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 262

JDBC. Tipos de Drivers

Tipo 4 – Driver puro-Java com protocolo nativo

Assim como o tipo 3, este tipo poder se escrito totalmente em

Java. O driver acessa diretamente o gerenciador de banco de

dados usando o protocolo nativo do mesmo. Por essa razão

normalmente é fornecido pelos fabricantes de banco de dados.

Em geral é de tamanho reduzido e chamado de “thin driver”.

Não é necessário instalação uma vez que o driver é carregado

como uma classe Java (inclusive em applets). Este tipo ideal

para aplicações com tecnologia baseada em Internet, Extranet

e Intranet.

Conexão com Banco de DadosJDBC

Page 263: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 263

Driver Manager é uma classe do pacote java.sql responsável por:

-Gerenciar o conjunto de drivers JDBC disponíveis para o

aplicativo Java;

-Fazer a conexão dos drivers com o banco de dados;

-Controlar o login e as mensagens entre banco de dados e driver.

Um aplicativo pode usar simultaneamente vários tipos de Drivers

JDBC distintos (acessando banco de dados diferentes, se

necessário). Todos os drivers devem ser registrados na Classe

Driver Manager. Para isso, todos os drivers devem possuir um

bloco estático onde um objeto de sua classe é “instanciado” e

registrado no DriverManager com método estático registerDriver,

por exemplo:

// Fragmento de código de um driver JDBC

import java.sql;

public class DriverJDBC implements Driver {

static {

try { Driver drv = New xDriver();

DriverManager.registerDrive(drv);

...

} catch (SQLExpection e) { }

}

}

JDBC. Driver Manager

Conexão com Banco de DadosJDBC

Page 264: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 264

Um desenvolvedor que utiliza um driver não precisa saber como

ele foi codificado, entretanto, deve saber que é suficiente

carregar o driver para que ele se registre no DriverManager.

Para carregar o driver pode-se usar um dos 3 modos:

-Carga dinâmica da classe com o método ClassforName:

Class.forName(“pacote.xDriverJDBC”);

ou Fazendo a instance de um objeto para forçar a carga da

classe:

new pacote.xDriverJDBC();

- Através de linha de comando usando a opção -D

Java –Djdbc.drivers=pacote.xDriverJDBC Aplicativo

- Através de arquivo de configuração.

JDBC. Driver Manager

jdbcDriver = oracle.jdbc.driver.OracleDriver

jdbcUrl = jdbc:oracle:thin:@10.1.11.13:1521:ORCL

jdbcUser = Scott

jdbcPassword = Tiger

Arquivo:configDB.properties

Conexão com Banco de DadosJDBC

Page 265: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 265

ODBC-JDBC (Driver MSAccess) Tipo 1;

String url = "jdbc:odbc:cadastros"; // onde “cadastro” é nome

registrado na fonte de dados

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //Carrega o driver

Connection con = DriverManager.getConnection(url,"usuario","senha");

JDBC. Driver Manager (Exemplos)

JDBC (Driver Oracle) Tipo 4 (Thin driver)

new oracle.jdbc.driver.OracleDriver();

String url = "jdbc:oracle:thin:@10.1.11.13:1521:ORCL";

Connection con = DriverManager.getConnection(url,"usuario","senha");

JDBC (Driver MySQL) Tipo 4

(versão do driver mm.mysql-2.0.8)

Class.forName("org.gjt.mm.mysql.Driver").newInstance();

Connection con =

DriverManager.getConnection("jdbc:mysql:/Localhost//mysql?user=root

&password=");

JDBC (Driver PostGreSQL) Tipo 4

String url = "jdbc:postgresql://host/database"

Class.forName("org.postgresql.Driver"); //load the driver

Connection con = DriverManager.getConnection(url,username,

password);

Conexão com Banco de DadosJDBC

Page 266: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 266

Para garantir a integridade dos dados a API JDBC permite

definir transações no acesso a Banco de Dados. As transações

são agrupamentos de comandos SQL que devem ser

executados por inteiro. Assim, o processo de COMMIT finaliza

ou efetiva a transação.

O comando ROLLBACK desfaz todos os comandos anteriores

não efetivando a transação.

O Banco de Dados garante que a transação iniciada, mas

terminada com um COMMIT, seja automaticamente cancelada

(ROLLBACK). Isso assegura que os processos dependentes de

várias instruções SQL sejam integralmente feitos ou

integralmente desfeitos.

Um exemplo clássico de transação é o processo de débito entre

contas correntes (exemplo: DOC), deve existir o débito e crédito

nas respectivas contas, caso contrário a operação deve ser

desfeita.

Autocommit, commit e rollback

O método setAutoCommit da classe Connection permite mudar

esta propriedade:

con.setAutoCommit(true);

faz com que a mensagem de commit seja enviada após cada

commando SQL, e

con.setAutoCommit(false): desabilita o commit automático.

Neste caso devem ser usados métodos commit e rollback, da

classe Conection, para controlar as transações. (Ver a classe

Connection – Javadoc)

JDBC. Transações

Conexão com Banco de DadosJDBC

Page 267: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 267

void commit()

Efetiva todos as instruções enviadas ao banco de dados

desde a última mensagem semelhante. Termina a transação

e começa uma nova.

void rollback()

Desfaz todas as instruções SQL que foram envidas ao banco

de dados desde o último commit(). Recomeça a última

transação. Por exemplo:

JDBC. Transações

con.setAutoCommit(false);

try {

contaCorrente.debito(valor);

outraContaCorrente.credito(valor);

// instruções SQL;

con.commit(); //envia commit para o banco

} catch(Error e) {

con.rollback(); //Desfaz a transação

}

Conexão com Banco de DadosJDBC

Page 268: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 268

Mapeamento entre os tipos de dados SQL e Tipos de

Dados Java

JDBC. Tipos de Dados

SQL TYPE Java Technology Type

Char String

Varchar String

Longvarchar String

Numeric java.math.BigDecimal

Decimal java.math.BigDecimal

Bit boolean

Tinyint byte

Smallint short

Integer int

Bigint long

Real float

float double

binary Byte[]

Método Java

getString

getString

getString

getBigDecimal

getBigDecimal

getBoolean

getByte

getShort

getInt

getLong

getFloat

getDouble

getBytes

Conexão com Banco de DadosJDBC

Page 269: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 269

Mapeamento entre os tipos de dados SQL e Tipos de Dados

Java

JDBC. Tipos de Dados

SQL TYPE Java Technology Type

Date java.sql.Date

time java.sql.Time

Timestamp java.sql.Timestamp

Método Java

getDate

getTime

getTimestamp

Conexão com Banco de DadosJDBC

Page 270: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 270

JBDC

commom

classes

WebContainer

Web.xml

contexto

WEB-INF

HelloServlet.class

Aplicação

classes servlet

Aplicação Web

JSPs | HTML | Imagens | etc

lib

jars

endorsed

libColoque aqui o “driver”

do Banco de Dados, este

driver será compartilhado

para todas as aplicaçõeswebapps

Coloque aqui o “driver”

do Banco de Dados

Page 271: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 271

Comparação

Page 272: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 272

Servlet e JSP - Uma breve comparação:

Servlet:

Ampliar a funcionalidade do WebServer;

Gerar objetos que não contenham HTML;

Iniciar aplicações Web

Fazer o papel de “controller” em aplicação

web

JSP:

Separar o conteúdo da lógica e regras de

negócio;

Suporte a conteúdo dinâmico,

personalização (a Internet de cada um).

Faz o papel de “view” em uma aplicação

Web

Comparação

Java

HTMLJava

HTML

Page 273: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 273

Page 274: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 274

Page 275: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 275

Principais Características:

- Alta disponibilidade (24x7);

- Alcance Global;

- Estrutura Escalar;

- Performance;

- Segurança e

- Usabilidade.

Introdução

Conceitos

Aplicação Web

Page 276: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 276

Introdução

Desenvolvimento de Aplicações Web

Em pouco tempo as aplicações web

ficaram popular devido as facilidades

e as novas possibilidades de acesso aos

dados.

Entretanto, as mudanças constantes nos

requisitos de negócio e alta competição,

tornaram as aplicações mais complexas,

com tempo menor de desenvolvimento

e com orçamento reduzido.

Em meio este cenário apareceram várias

técnicas e ferramentas para ajudar o

desenvolvimento destas aplicações.

Page 277: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 277

Desenvolvimento de Aplicações Web

Aplicações Web Java podem ser divididas em duas categorias:

Model 1: O cliente acessa diretamente uma página JSP que

redireciona a resposta para a próxima página.

Web Server

Servlet/

JSP

Servlet/

JSP

Servlet/

JSP

Servlet/

JSP

Page 278: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 278

Desenvolvimento de Aplicações Web

Aplicações Web Java podem ser divididas em duas categorias:

Model 2: O cliente acessa um Servlet que de acordo com o

estado da aplicação determina qual JSP será apresentado

como resposta.

Web Server

Servlet/

JSP

Servlet/

JSP

Servlet/

JSP

Servlet (Controller)

JavaBeans/EJB (Model)

Page 279: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 279

Desenvolvimento de Aplicações Web

Como faço uma aplicação em

três camadas ?

Page 280: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 280

Aplicação do MVC (Model, View e Controller)

MVC originou da linguagem Smalltalk e foi usada para projetar

interfaces com usuário. Esta padrão é divido em três partes

model, view e controller.

Model: Representa o dado ou objeto. Ele é que manipula e

objetos, exemplo: JavaBeans e EJB.

View: É visão de como os dados serão apresentados,

exemplo: páginas JSP e ASP

Controller: Recebe os dados e faz validação e define o model

que manipulará os dados.

Exemplo: Servlet.

Algumas vantagens do uso do MVC:

- Baixo acoplamento;

- Possiblita o reúso.

- Possibilita o desenvolvimento em paralelo;

- Isolamento e separação das camadas e

- Separação de Lógica de Negócios e Design (Layout)

Desenvolvimento de Aplicações Web

Page 281: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 281

Lado

Cliente

JSP +

HTML

Camada de

Apresentação

Servlets

Camada

de Lógica e Regra de

Negócios

JavaBeane EJB

Classes

View Controller Model

Delegação

e Mapeamento

Trata Regras de

Negócios

Trata apresentação

dos dados

Camada

Repositório

de Dados

e Sistemas

Legados

Banco de

Dados

Manipula Dados

e Consultas

Três

Camadas=>

Big Picture:

Aplicação do MVC em ambiente de três camadas (Internet).

Lado

Servidor

WebServer Recurso

Browser

Desenvolvimento de Aplicações Web

Legado

Page 282: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 282

Aplicação do MVC (Model, View e Controller)

View:

Visão representa a apresentação dos dados (interface com

usuário). O componentes View obtém os valores do estado do

Model.

Separação da View e do Model habilita a construção

independente interfaces com diferentes “Look and Feel”

(aparências). Diferentes Views podem interagir com

mesmo model. JSP é escolha natural para implementação

da View

Controller:

O Controller fornece a ligação da arquitetura MVC. Ela é

responsável por receber as requisições e determinar qual o

Model apropriado para atende-la.

Os Servlets é a opção ideal para o Controller.

Desenvolvimento de Aplicações Web

Page 283: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 283

Aplicação do MVC (Model, View e Controller)

Model:

O modelo representa as regras de negócios de uma aplicação.

Encapsulando as regras dentro de um componente facilita os

testes, melhora a qualidade e promove o reúso dos

componentes.

Estado do componentes (model)

O estado define um conjunto de valores do Model e inclui

métodos para mudar estes valores. Estes métodos são regras

de negócios e outros métodos.

O “estado” de componente são geralmente um protocolo

independente. JavaBeans é uma boa escolha para

implementar estes componentes.

Desenvolvimento de Aplicações Web

Page 284: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 284

Comparação

Page 285: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 285

Qual a função das páginas JSPs ?

View (JSP)

JSP:

Separar o conteúdo (design), lógica e regras de

negócio;

Suporte a conteúdo dinâmico, personalização

(a Internet de cada um).

Desenvolvimento de Aplicações Web

Page 286: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 286

JSP - Estrutura básica:

Existem três tipos de elementos de script disponíveis em

uma JSP:

Declarações;

Scriptlets;

Expressões

A especificação JSP fornece duas maneiras de notação

sintática para cada tipo de elemento de script. Uma notação

usa delimitadores como <% e %> para iniciar e terminar um

elemento de script, enquanto a outra usa sintaxe compatível

com XML para mesmo fim.

O motivo de fornecer notações semelhante à XML é para

permitir que as JSPs possam ser escritas usando ferramentas

de autoria de documento XML.

View (JSP)

Desenvolvimento de Aplicações Web

Page 287: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 287

Declarações;

São as declarações de variáveis e método Java, que

usaremos no código Java do arquivo JSP. Elas

aparecem dentro de tags <%! e %> e podem ser

usadas na página inteira. Exemplo, o bloco a seguir

declara duas variáveis Java do tipo de dado String:

Nome e Sobrenome:

<%! String Nome;

String Sobreome;

%>

Usando-se a notação compatível com XML, as

declarações são escritas da seguinte forma:

<jsp:declaration>

String Nome;

String Sobreome;

</jsp:declaration>

Desenvolvimento de Aplicações Web

View (JSP)

As variáveis declaradas anteriormente, são

inicializadas quando a página JSP é carregada.

Essas declarações de variável e método não

produzem diretamente qualquer saída na página,

mas elas são usadas por outros elementos na JSP,

como expressões e scriptlets, para criar conteúdo

dinâmico.

Page 288: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 288

JSP - Estrutura básica:

Expressões:

São as expressões Java avaliadas durante a

execução e impressas como String na página de

saída. Elas aparecem incorporadas dentro de tags

<%= e %>, que são intercaladas com o conteúdo

estático. Por exemplo, a instrução a seguir

incorpora a expressão Java Nome dentro de algum

código HTML para imprimir a saudação:

Oi <%= Nome %> ! Bom dia

Na notaçãoXML, veja como ficaria:

Oi <jsp:expression> Nome </jsp:expression> !

Bom dia

Desenvolvimento de Aplicações Web

View (JSP)

Page 289: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 289

Scriptlets:

Os scriptlets são fragmentos de código Java que

são executados quando a JSP é ativada. Elas

aparecem dentro de tags <% e %>, intercaladas

com o conteúdo estático. Por exemplo: o código

abaixo verifica se o valor da variável contador é

maior que 0 (zero) e imprime uma mensagem na

tela, de acordo com o resultado:

<% if (contador > 0 ) { %>

<B>

o valor do contador <%= contador%>

</B> <% } else { %>

<B>

o valor do contador é zero

</B>

<% } %>a

Desenvolvimento de Aplicações Web

JSP - Estrutura básica:

View (JSP)

Page 290: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 290

Scriptlets:

Três diferentes scriptlets Java foram usadas no

exemplo anterior: a instrução if, a instrução else e a

chave de terminal para o bloco if. Uma expressão

JSP incorporada também para exibir o valor da

variável contador. Os scriptlets e a expressão

aparecem intercalados com código HTML na ordem

que eles devem ser executados. Os scriptlets não

são necessariamente blocos completos de instrução

Java.

Quando a página é traduzida, essas pedaços de

código Java são combinados para gerar um bloco

Java. Esse bloco deve ser sintaticamente válido,

para compilar com êxito. Vejamos como codificar o

scriptlet usando a notação XML.

Desenvolvimento de Aplicações Web

JSP - Estrutura básica:

View (JSP)

Page 291: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 291

Scriptlets:

<jsp:scriptlet>

if (contador > 0 ) { %>

</jsp:scriptlet> <B>

o valor do contador

<jsp:expression> contador

</jsp:expression>

</B> <jsp:scriptlet> } else {

</jsp:scriptlet>

<B>

o valor do contador é zero

</B>

<jsp:scriptlet>} </jsp:scriptlet>

Desenvolvimento de Aplicações Web

JSP - Estrutura básica:

Page 292: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 292

Page 293: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 293

Como criar um Servlet genérico ?

Controller (Servlets)

Introdução:

Precisamos criar um Servlet que

desempenhará o papel de Controller.

Bem para isto será necessário desenvolvermos

inicialmente um único Servlet para tal tarefa.

Desenvolvimento de Aplicações Web

Page 294: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 294

Primeira opção:

Inserir um objeto na página HTML/JSP

<FORM METHOD="POST"

ACTION="http://myServer/myApp/myServlet">

<INPUT TYPE="HIDDEN" NAME="OP"

VALUE="createUser"/>

<!-- other form contents... -->

</FORM>

Desenvolvimento de Aplicações Web

Controller (Servlets)

Como criar um Servlet genérico ?

Page 295: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 295

Uma opção mais elegante:

Existem outras maneiras de resolver este

problema, vamos olhar algumas delas:

1 - Criar uma collection (MapSet, HashSet,

ArrayList ou Vector) para associar o nome da

página (HMTL ou JSP) ao

componente que atenderá a requisição.

Dicas:

para capturar a URI (nome reduzido da URL)

podemos usar:

>> out.println("Request URI: " +

request.getRequestURI());

Desenvolvimento de Aplicações Web

Controller (Servlets)

Como criar um Servlet genérico ?

Page 296: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 296

Uma opção nada ”elegante”:

Utilização da instrução if para invocar o Model

apropriado, Veja o fragmento exemplo:

if (op.equals("createUser")) {

model.createUser(request.getAttribute("user"),

request.getAttribute("pass")); }

else if

(op.equals("changeUserInfo")

{ // ... and so on... }

Desenvolvimento de Aplicações Web

Controller (Servlets)

Como criar um Servlet genérico ?

Page 297: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 297

A melhor abordagem é usar o Design

Pattern Command, para resolver, veja

um esboço da solução:

Command

Execute( )

SearchCommand

Execute( )

InsertCommand

Execute( )

OutroCommand

Execute( )

Design Pattern “Command” fornece uma

solução genérica que simplifica a chamada de

um Model, cada “chamada” será considerada

uma comando.

Desenvolvimento de Aplicações Web

Controller (Servlets)

Page 298: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 298

Exemplos:// Action.java:

public abstract class Action {

protected Model model;

public Action(Model model) { this.model = model; }

public abstract String getName();

public abstract Object perform(HttpServletRequest

req);

};

// CreateUserAction.java:

public class CreateUserAction extends Action {

public CreateUserAction(Model model) {

super(model);

}

public String getName() { return "createUser"; }

public Object perform(HttpServletRequest req) {

return model.createUser(req.getAttribute("user"),

req.getAttribute("pass"));

}

}

Desenvolvimento de Aplicações Web

Controller (Servlets)

Como criar um Servlet genérico ?

Page 299: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 299

Exemplos:public class ControllerServlet extends HttpServlet {

private HashMap actions;

public void init() throws ServletException {

actions = new HashMap();

CreateUserAction cua = new CreateUserAction(model);

actions.put(cua.getName(), cua);

//... create and add more actions

}

public void doPost(HttpServletRequest req,

HttpServletResponse resp)

throws IOException, ServletException {

// First identify operation "op" from URL.

// method getOperation() is defined elsewhere.

String op = getOperation(req.getRequestURL());

// Then find and execute corresponding Action

Action action = (Action)actions.get(op);

Object result = null;

//continua...

Desenvolvimento de Aplicações Web

Controller (Servlets)

Como criar um Servlet genérico ?

Page 300: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 300

Exemplos://Continuação

try {

result = action.perform(req);

} catch (NullPointerException npx) {

//... handle error condition: no such action

}

// ... Use result to determine next view (see next section)

}

//... other methods...

}

Desenvolvimento de Aplicações Web

Controller (Servlets)

Como criar um Servlet genérico ?

Page 301: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 301

Page 302: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 302

A - RFCs

Apêndice

B - JSP (Quick Reference)

C - Jar Files

Page 303: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 303

A - RFC´s

• RFC 1630 Uniform Resource Identifiers (URI)

• RFC 1738 Uniform Resource Locators (URL)

• RFC 2396 Uniform Resource Identifiers (URI): Generic Syntax

• RFC 1808 Relative Uniform Resource Locators

• RFC 1945 Hypertext Transfer Protocol (HTTP/1.0)

• RFC 2045 MIME Part One: Format of Internet Message Bodies

• RFC 2046 MIME Part Two: Media Types

• RFC 2047 MIME Part Three: Message Header Extensions for

non-ASCII text

• RFC 2048 MIME Part Four: Registration Procedures

• RFC 2049 MIME Part Five: Conformance Criteria and Examples

• RFC 2109 HTTP State Management Mechanism

• RFC 2145 Use and Interpretation of HTTP Version Numbers

• RFC 2324 Hypertext Coffee Pot Control Protocol (HTCPCP/1.0)1

• RFC 2616 Hypertext Transfer Protocol (HTTP/1.1)

• RFC 2617 HTTP Authentication: Basic and Digest Authentication

Online versions of these RFCs are at http://www.rfc-editor.org/.

Apêndice

The Request for Comments (RFCs)

The Requests for Comments (RFC) document series is a set of technical and

organizational notes about the Internet (originally the ARPANET), beginning in

1969. Memos in the RFC series discuss many aspects of computer networking,

including protocols, procedures, programs, and concepts, as well as meeting

notes, opinions, and sometimes humor. For more information on the history of

the RFC series, see "30 years of RFCs".

http://www.rfc-editor.org/

Page 304: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 304

JSP Quick Reference Card

Default scripting language

The scripting language of a JSP page defaults to Java.

Insert the following line in a JSP page to configure the

page to use JavaScript:

<%@ page language = "javascript" %>

Using white space

White space contained within the template code is

returned to the client as it was entered in the JSP.

Quoting attribute values

Quote attribute values, using either single or double

quotes, to all JSP elements. For example:

<%@ page contentType = " text/plain " %>

Writing comments for the JSP

A JSP comment is not output to the client as part of the

JSP page’s output.

<%-- Comment string ... --%>

Outputting comments to the client

HTML comments are output to the client.

<!-- comments -->

Basic Syntax page

Defines page-wide attributes.

<%@ page attribute =" value " ... %>

attributes , with default values, are:

attribute = language="java" | session="true"

| contentType=text/html;charset="ISO-8859-1"

| import=" package(s) " | buffer="8kb"

| autoflush="true" | isThreadSafe="true"

| info="text_string" | errorPage=" relativeURL "

| isErrorpage="true" | extends=" class_name "

value = a string literal in single or double quotes.

include

Inserts text into a JSP page.

<%@ include file = "path" ... %>

taglib

Defines a custom tag library used by a JSP page.

<%@ taglib uri=" tagLibraryURI "

prefix=" tagPrefix " %>

After the taglib directive, reference the custom tags

using the syntax:

<tagPrefix : tagName >

...

</ tagPrefix : tagName >

declaration

Creates page-wide definitions such as variables.

<%! declaration %>

Example:

<%! private String foo = null;

public String getFoo() {return this.foo;} %>

Directives

Scripting Elements

Apêndice

B - JSP Quick Reference:

Page 305: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 305

scriptlet

Contains a block of scripting code. A JSP page can

contain multiple blocks of scripting code.

<% script code %>

Example:

<% String greeting =

request.getParameter("Greeting");

out.println(greeting); %>

expression

Defines statements evaluated on the server before

sending the page output to the client.

<%= expression %>

Example:

<%= myVar1%>

jsp:include

Call one JSP page from another. Upon completion, the

destination page returns control to the calling page.

<jsp:include page=" path " flush="true"/>

<jsp:include page=" path " flush="true">

<jsp:param name=" paramName"

value=" paramValue " /> ...

</jsp:include>

jsp:forward

Calls one JSP page from another. Execution of the calling

page is terminated by the call.

<jsp:forward page=" path " />

<jsp:forward page=" path ">

<jsp:param name=" paramName"

value=" paramValue " /> ...

</jsp:forward>

Actions

jsp:plugin

Enables you to invoke an applet on a client browser.

<jsp:plugin

type="bean|applet"

code=" objectCode "

codebase=" objectCodebase "

{ align=" alignment " }

{ archive=" archiveList " }

{ height=" height " }

{ hspace=" hspace " }

{ jreversion=" jreversion " }

{ name=" componentName " }

{ vspace=" vspace " }

{ width=" width " }

{ nspluginurl=" url " }

{ iepluginurl=" url " } >

{ <jsp:params>

{ <jsp:param name=" paramName"

value=" paramValue " /> }+

</jsp:params> }

{ <jsp:fallback> arbitrary_text

</jsp:fallback> } >

</jsp:plugin>

The elements in brackets ({} ) are optional.

jsp:useBean

Defines an instance of a Java bean.

<jsp:useBean id=" name"

scope="page|request|session|application"

typeSpec />

<jsp:useBean id=" name"

scope="page|request|session|application"

typeSpec >

body

</jsp:useBean>

typespec is any one of the following:

class=" className " |

class=" className " type=" typeName " |

beanName=" beanName" type=" typeName " |

type=" typeName "

Apêndice

B - JSP Quick Reference:

Page 306: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 306

jsp:setProperty

Sets the value of one or more properties in a bean.

<jsp:setProperty name=" beanName" prop_expr />

prop_expr has one of the following forms:

property="*" |

property=" propertyName "|

property =" propertyName " param =" parameterName "|

property =" propertyName " value =" propertyValue "

jsp:getProperty

Writes the value of a bean property as a string to the out

object.

<jsp:getProperty name=" name"

property=" propertyName " />

See the corresponding Java object type for the available

methods for these objects.

application

The servlet context obtained from the servlet

configuration object.

Java type: javax.servlet.ServletContext

config

The ServletConfig object for the JSP page.

Java type: javax.servlet.ServletConfig

exception

The uncaught exception that resulted in the error page

being invoked.

Java type: java.lang.Throwable

out

An object that writes into a JSP page’s output stream.

Java type: javax.servlet.jsp.JspWriter

JSP Objects

pageContext

The page context for the JSP.

Java type: javax.servlet.jsp.PageContext

request

The client request.

Java type: javax.servlet.HttpServletRequest

response

The response to the client.

Java type: javax.servlet.HttpServletResponse

session

The session object created for the requesting client.

Java type: javax.servlet.http.HttpSession

Apêndice

B - JSP Quick Reference:

Page 307: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 307

Compactação, Agrupamento e Distribuição

Sintaxe: jar opções [meta-arq] nome-arquivo-destino [nome-arquivo-entrada]

Argumento Descrição

meta-arquivo Arquivo que contém as informações sobre o arquivo destino gerado.

Este argumento é opcional, entretanto um arquivo meta-arquivo é

gerado, default, META-INF/MANIFEST.INF

arquivo-destino Nome do arquivo jar. A extensão .jar não é automatica, deve ser

especificada

arquivo-entrada Nome dos arquivos a serem agrupados e/ou compactados

Opções Descrição

c Cria um novo arquivo

t Mostra o conteúdo de um arquivo existente

x Extrai todos os arquivos

x <arquivo> Extrai o arquivo especificado

f Indica que a operação (c,t ou x) será executada sobre o arquivo e não

sobre a entrada/saída padrão.

v Mostra o status da operação (verbose)

m Suprime a geração do meta-arquivo

o Faz apenas o agrupamento, sem compactação. Deve ser utilizado

para arquivos jar na variável de ambiente Classpath

Exemplos:

jar cvf Classes.jar ClassA.class ClassB.class ClassC.class

Para ver o conteúdo do arquivo jar, gerado: jar tvf Classes.jar

Para extrair arquivo: Jar xvf Classes.jar

Obs: a opção f é sempre utilizada em operações com arquivos.

Jar (Java Archive Tool)

É uma ferramenta que faz agrupamento de arquivos transformando em único

arquivo, um arquivo .jar, geralmente com compressão. Localização JDK1.X/BIN/Jar.

Os arquivos Jar podem conter uma aplicação inteira, por isso, ele é usado para

fazer distribuição de aplicações. Também é bastante usado com componente

Javabeans e Applet.

Jar FileApêndice C

Page 308: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 308

Compactação, Agrupamento e Distribuição

Estrutura de um arquivo Jar:

Especificação JAR define a existência de uma arquivo conhecido

como “manifest.mf” em um diretório chamado “META-INF”.

Este diretório pode ainda conter outros arquivos de controle como

o índice index.lst que deve agilizar a busca dos arquivos, a

assinatura do arquivo e alguns outros.

O papel do arquivo manifest é conter informações sobre a local,

configuração e segurança do arquivo Jar.

Conteúdo do arquivo Manifest:

Exemplo: Versão, Classe que contém o método main,informações

sobre segurança (assinatura), class path e etc.

Exemplo de arquivo Manifest.MF:

Local:\META-INF\

Manifest-Version: 1.0

Created-By: 1.2 (Sun Microsystems Inc.)

Sealed: true

Jar FileApêndice C

Page 309: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 309

Compactação, Agrupamento e Distribuição:

Como criar

um arquivo

Jar ? Agenda

aplicacao

*.class

1 - Para criar o arquivo agenda.jar, devemos ir

para a pasta ..\agenda\aplicacao

2 - Criar o arquivo Manifest, devemos chamá-lo

de manifest.inf. E escrever seu conteúdo:

Manifest-Version: 1.0

Created-By: 1.4.2 (Sun Microsystems Inc.)

Main-Class: MenuPrincipal

Name: MenuPrincipal.class

icones*.gif

Nome do arquivo que

contém o método “main”

Jar FileApêndice C

Page 310: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 310

Compactação, Agrupamento e Distribuição:

Como criar

um arquivo

Jar ? Agenda

aplicacao

*.class

icones*.gif

3 - Para criar o arquivo agenda.jar, devemos

digitar a seguinte linha de comando:

jar cfm agenda.jar MANIFEST.INF .

opções

Nome do arquivo jar

Nome do arquivo manifest

Pasta (onde estão os arquivos)

Jar FileApêndice C

Page 311: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 311

Compactação, Agrupamento e Distribuição:

Como criar

um arquivo

Jar ? Agenda

aplicacao

*.class

icones*.gif

4 - Verifique o arquivo agenda.jar, para isto você

pode usar WinZip ou qualquer outra ferramenta

de compactação de arquivo ou até o mesmo a

ferramenta Jar:

jar tf agenda.jar

agenda.jar

5- Para executar o aplicação basta dar duplo

clique sob o arquivo, agenda.jar, ou chamá-lo

através de linha de comando:

Java jar- agenda.jar

Jar FileApêndice C

Page 312: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010

Gostou ? Venha participar da comunidade eTecnologia. Lá você

poderá participar dos eventos, treinamentos e cursos.

comunidade http://etecnologia.ning.com/

Para participar da comunidade basta se cadastrar:

http://bit.ly/czZlez

A missão da comunidade é compartilhar conhecimento, trocar

experiências e prover aprendizado.

312

Page 313: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 313

Notas:

Marcas Registradas:

Todos os termos mencionados que são reconhecidos como Marca

Registrada e/ou comercial são de responsabilidades de seus proprietários. O

autor informa não estar associada a nenhum produto e/ou fornecedor que é

apresentado neste material. No decorrer deste, imagens, nomes de produtos

e fabricantes podem ter sido utilizados, e desde já o autor informa que o uso

é apenas ilustrativo para fins educativo, não visando ao lucro, favorecimento

ou desmerecimento da marca ou produto.

Melhoria e Revisão:

Este material esta em processo constante de revisão e melhoria, se você

encontrou algum problema ou erro envie um e-mail para nós.

Criticas e Sugestões:

Nós estamos abertos para receber criticas e sugestões que possam

melhorar o material, por favor envie um e-mail para nós.

Rildo F dos Santos ([email protected])

Imagens:

Google, Flickr e Banco de Imagem.

Page 314: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010 314

Licença:

Page 315: Java Web, o Tutorial

Versão: 3.0

Ca

pa

cit

ão

de

De

se

nvo

lve

do

r J

ava

Java Web

[email protected] os direitos reservados e protegidos © 2006 e 2010

Java WebCapacitação

Desenvolver Java

Web Application

Rildo F [email protected]

twitter: @rildosan

skype: rildo.f.santos

http://rildosan.blogspot.com/

(11) 9123-5358

(11) 9962-4260

www.etcnologia.com.br