Upload
rildo-rildosan-santos
View
6.764
Download
12
Embed Size (px)
DESCRIPTION
Este tutorial apresenta como desenvolver aplicações para o ambiente Web utilizando a tecnologia Java.
Citation preview
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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..
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 5
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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...?
Versão: 3.0
Ca
pa
cit
aç
ã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”
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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 ?
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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)
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Applet Java
JavaScript
VBScript
JScript
Linguagens
HTML
XML
Internet Explorer
Netscape
Opera
Mozilla
Tecnologias no lado cliente:
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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;
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 41
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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)
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 45
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 46
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 49
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 58
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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()...
Versão: 3.0
Ca
pa
cit
aç
ã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()
Versão: 3.0
Ca
pa
cit
aç
ã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){
...
}
}
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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){
...
}
}
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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:
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 70
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 75
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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)
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 78
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 89
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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:
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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>
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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">
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 103
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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;
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 116
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 120
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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)
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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)
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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”);
}
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 130
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 145
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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>");
}
}
Versão: 3.0
Ca
pa
cit
aç
ã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>");
}
}
Versão: 3.0
Ca
pa
cit
aç
ã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 {
//…
}
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 149
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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>
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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 />
Versão: 3.0
Ca
pa
cit
aç
ã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:
Versão: 3.0
Ca
pa
cit
aç
ã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>
Versão: 3.0
Ca
pa
cit
aç
ã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:
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 158
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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>
Versão: 3.0
Ca
pa
cit
aç
ã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;
}
}
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 167
JavaServlets
Versão: 3.0
Ca
pa
cit
aç
ã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().
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 169
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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:
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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:)
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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”.
Versão: 3.0
Ca
pa
cit
aç
ã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;
}
}
Versão: 3.0
Ca
pa
cit
aç
ã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"/>
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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" />
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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:
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 242
Versão: 3.0
Ca
pa
cit
aç
ã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>
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 244
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 250
Versão: 3.0
Ca
pa
cit
aç
ã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 ;
}
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 254
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 255
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 273
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 274
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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)
Versão: 3.0
Ca
pa
cit
aç
ã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 ?
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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)
Versão: 3.0
Ca
pa
cit
aç
ã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)
Versão: 3.0
Ca
pa
cit
aç
ã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)
Versão: 3.0
Ca
pa
cit
aç
ã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:
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 292
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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 ?
Versão: 3.0
Ca
pa
cit
aç
ã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 ?
Versão: 3.0
Ca
pa
cit
aç
ã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 ?
Versão: 3.0
Ca
pa
cit
aç
ã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)
Versão: 3.0
Ca
pa
cit
aç
ã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 ?
Versão: 3.0
Ca
pa
cit
aç
ã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 ?
Versão: 3.0
Ca
pa
cit
aç
ã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 ?
Versão: 3.0
Ca
pa
cit
aç
ão
de
De
se
nvo
lve
do
r J
ava
Java Web
[email protected] os direitos reservados e protegidos © 2006 e 2010 301
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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/
Versão: 3.0
Ca
pa
cit
aç
ã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:
Versão: 3.0
Ca
pa
cit
aç
ã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:
Versão: 3.0
Ca
pa
cit
aç
ã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:
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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
Versão: 3.0
Ca
pa
cit
aç
ã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.
Versão: 3.0
Ca
pa
cit
aç
ã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:
Versão: 3.0
Ca
pa
cit
aç
ã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