SlideShare une entreprise Scribd logo
1  sur  315
Télécharger pour lire hors ligne
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010
Java Web
Capacitação
Desenvolver Java
Web Application
Rildo F Santos
rildo.santos@etecnologia.com.br
twitter: @rildosan
skype: rildo.f.santos
http://rildosan.blogspot.com/
(11) 9123-5358
(11) 9962-4260
www.etcnologia.com.br
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 5
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CGI
ASP 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 8
Arquitetura da Web
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
Browser
HTTP / 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 22
Arquitetura da Web
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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ção
Acesso a
Disco
Execução
Emissão de
resposta
Liberação
do recurso
Arquitetura da Web
CGI
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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ção
Acesso a
Disco
Execução
Emissão de
resposta
Liberação
do recurso
Requisição
Acesso a
Disco
Execução
Emissão de
resposta
Liberação
do recurso
Requisição
Acesso a
Disco
Execução
Emissão de
resposta
Liberação
do recurso
Requisição
Acesso a
Disco
Execução
Emissão de
resposta
Liberação
do recurso
Requisição
Acesso a
Disco
Execução
Emissão de
resposta
Liberação
do recurso
Requisições
Servidor
Arquitetura da Web
Componentes Web: CGI
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 26
Perl
Perl (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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 27
Integração CGI e Perl
Quando 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 32
Arquitetura da Web
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 34
Arquitetura da Web
Páginas Clientes
Browser
Scripts
Plug ins
Sockwave
(Flash)
Real Video
PDF
Applet Java
JavaScript
VBScript
JScript
Linguagens
HTML
XML
Internet Explorer
Netscape
Opera
Mozilla
Tecnologias no lado cliente:
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 35
Arquitetura da Web
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 41
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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.1a
versões
Isto significa que vamos precisar do arquivo servlet.jar
(tomcat_homecommomlib) para compilar as aplicações. Você
pode colocar a referência deste arquivo na Classspath.
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
bin
Os 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
logs
Nesta 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 45
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 46
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 49
JavaServlets
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 58
JavaServlets
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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 GenericServlet
O 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
seuServlet
service | 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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 GenericServlet
O 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 70
JavaServlets
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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:
....webappsROOTWEB-INFclasses
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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 75
JavaServlets
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 78
JavaServlets
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 89
JavaServlets
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 103
JavaServlets
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 116
JavaServlets
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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: servletTesteA
TesteB
Resposta HTTP
include
TesteC
Requisição HTTP: servletTesteC
TesteD
Resposta HTTP
Despachar & Redirecionar
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos os direitos reservados e protegidos © 2006 e 2010 120
JavaServlets
Versão: 3.0
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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 Examplen");
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
CapacitaçãodeDesenvolvedorJava Java Web
rildo.santos@etecnologia.com.br
Todos 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”);
}
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial
Java Web, o Tutorial

Contenu connexe

Tendances

Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
Rodrigo Rodrigues
 
Manual execucao fiplan
Manual execucao fiplanManual execucao fiplan
Manual execucao fiplan
leogondim26
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
munosai
 

Tendances (20)

Spring Boot in Action
Spring Boot in Action Spring Boot in Action
Spring Boot in Action
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Spring boot
Spring bootSpring boot
Spring boot
 
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScriptCurso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
 
06 - Servidor Apache
06 - Servidor Apache06 - Servidor Apache
06 - Servidor Apache
 
Soa Fundamentos
Soa FundamentosSoa Fundamentos
Soa Fundamentos
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Express js
Express jsExpress js
Express js
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScript
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
Aula de Introdução - JAVA
Aula de Introdução  - JAVAAula de Introdução  - JAVA
Aula de Introdução - JAVA
 
Manual execucao fiplan
Manual execucao fiplanManual execucao fiplan
Manual execucao fiplan
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Web Application Frameworks - Web Technologies (1019888BNR)
Web Application Frameworks - Web Technologies (1019888BNR)Web Application Frameworks - Web Technologies (1019888BNR)
Web Application Frameworks - Web Technologies (1019888BNR)
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
Manual power point
Manual power pointManual power point
Manual power point
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
What You Should Know About WebLogic Server 12c (12.2.1.2) #oow2015 #otntour2...
What You Should Know About WebLogic Server 12c (12.2.1.2)  #oow2015 #otntour2...What You Should Know About WebLogic Server 12c (12.2.1.2)  #oow2015 #otntour2...
What You Should Know About WebLogic Server 12c (12.2.1.2) #oow2015 #otntour2...
 
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados RelacionaisBanco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 

Similaire à Java Web, o Tutorial

Dalton Sergio Leonardo Pt Currículo 20160803
Dalton Sergio Leonardo Pt  Currículo 20160803Dalton Sergio Leonardo Pt  Currículo 20160803
Dalton Sergio Leonardo Pt Currículo 20160803
Dalton Sergio Leonardo
 
CurriculumVitae_VictorXavier
CurriculumVitae_VictorXavierCurriculumVitae_VictorXavier
CurriculumVitae_VictorXavier
Victor Xavier
 
6381463 hhhghfdhdgfh
6381463 hhhghfdhdgfh6381463 hhhghfdhdgfh
6381463 hhhghfdhdgfh
Cleber Almeida
 
Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4
Rodrigo Kono
 
Curriculum - Andre Bovo
Curriculum - Andre BovoCurriculum - Andre Bovo
Curriculum - Andre Bovo
Andre Bovo
 

Similaire à Java Web, o Tutorial (20)

Dalton Sergio Leonardo Pt Currículo 20160803
Dalton Sergio Leonardo Pt  Currículo 20160803Dalton Sergio Leonardo Pt  Currículo 20160803
Dalton Sergio Leonardo Pt Currículo 20160803
 
Minha Vida Fiap - Desenvolvimento
Minha Vida Fiap - DesenvolvimentoMinha Vida Fiap - Desenvolvimento
Minha Vida Fiap - Desenvolvimento
 
SYSFACTOR Soluções em Tecnologia da Informação
SYSFACTOR Soluções em Tecnologia da InformaçãoSYSFACTOR Soluções em Tecnologia da Informação
SYSFACTOR Soluções em Tecnologia da Informação
 
CurriculumVitae_VictorXavier
CurriculumVitae_VictorXavierCurriculumVitae_VictorXavier
CurriculumVitae_VictorXavier
 
AAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcambAAB301 - Rich Internet Application - wcamb
AAB301 - Rich Internet Application - wcamb
 
Novidades no Windows Mobile Line of Business Solution Accelerator 2008
Novidades no Windows Mobile Line of Business Solution Accelerator 2008Novidades no Windows Mobile Line of Business Solution Accelerator 2008
Novidades no Windows Mobile Line of Business Solution Accelerator 2008
 
Pense Aberto, Pense Linux
Pense Aberto, Pense LinuxPense Aberto, Pense Linux
Pense Aberto, Pense Linux
 
Mobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para NegociosMobile Ria Para Aplicacoes Para Negocios
Mobile Ria Para Aplicacoes Para Negocios
 
Desenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageriaDesenvolvimento de sistemas com mensageria
Desenvolvimento de sistemas com mensageria
 
Skalena - Overview de Soluções
Skalena - Overview de Soluções Skalena - Overview de Soluções
Skalena - Overview de Soluções
 
6381463 hhhghfdhdgfh
6381463 hhhghfdhdgfh6381463 hhhghfdhdgfh
6381463 hhhghfdhdgfh
 
Teoria de Sistemas de Informação - Atividade: Tecnologia e SI
Teoria de Sistemas de Informação - Atividade: Tecnologia e SITeoria de Sistemas de Informação - Atividade: Tecnologia e SI
Teoria de Sistemas de Informação - Atividade: Tecnologia e SI
 
Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4Desenvolvimento RIA com Silverlight 4
Desenvolvimento RIA com Silverlight 4
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
 
20141128-Carlos-Eduardo-Capparelli
20141128-Carlos-Eduardo-Capparelli20141128-Carlos-Eduardo-Capparelli
20141128-Carlos-Eduardo-Capparelli
 
Computação em nuvem e Windows Azure
Computação em nuvem e Windows AzureComputação em nuvem e Windows Azure
Computação em nuvem e Windows Azure
 
Plataforma OpenSuite
Plataforma OpenSuitePlataforma OpenSuite
Plataforma OpenSuite
 
WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)WebSphere 8 Intro (pt-BR)
WebSphere 8 Intro (pt-BR)
 
Curriculum - Andre Bovo
Curriculum - Andre BovoCurriculum - Andre Bovo
Curriculum - Andre Bovo
 
Introdução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureIntrodução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows Azure
 

Plus de Rildo (@rildosan) Santos

Plus de Rildo (@rildosan) Santos (20)

Feedback. Arte de dar e receber feedback
Feedback. Arte de dar e receber feedbackFeedback. Arte de dar e receber feedback
Feedback. Arte de dar e receber feedback
 
Minicurso Meça o que importa com OKR
Minicurso Meça o que importa com OKRMinicurso Meça o que importa com OKR
Minicurso Meça o que importa com OKR
 
Minicurso Fundamentos da Análise de Negócio 3.0
Minicurso Fundamentos da Análise de Negócio 3.0Minicurso Fundamentos da Análise de Negócio 3.0
Minicurso Fundamentos da Análise de Negócio 3.0
 
Meça o que importa com OKR
Meça o que importa com OKRMeça o que importa com OKR
Meça o que importa com OKR
 
Scrum Experience
Scrum ExperienceScrum Experience
Scrum Experience
 
Minicurso Gestão Ágil de Projetos com Abordagem Híbrida
Minicurso Gestão Ágil de Projetos com Abordagem HíbridaMinicurso Gestão Ágil de Projetos com Abordagem Híbrida
Minicurso Gestão Ágil de Projetos com Abordagem Híbrida
 
Digital Business Design (Design de Negócios Digitais)
Digital Business Design (Design de Negócios Digitais)Digital Business Design (Design de Negócios Digitais)
Digital Business Design (Design de Negócios Digitais)
 
Novidades da Sétima Edição do Guia PMBOK
Novidades da Sétima Edição do Guia PMBOKNovidades da Sétima Edição do Guia PMBOK
Novidades da Sétima Edição do Guia PMBOK
 
Jornada de Aprendizado Lean BPM
Jornada de Aprendizado Lean BPM Jornada de Aprendizado Lean BPM
Jornada de Aprendizado Lean BPM
 
Mapa Mental Scrum
Mapa Mental ScrumMapa Mental Scrum
Mapa Mental Scrum
 
Tutorial Scrum Experience
Tutorial Scrum Experience Tutorial Scrum Experience
Tutorial Scrum Experience
 
Guia BPM CBOK(R)
Guia BPM CBOK(R)Guia BPM CBOK(R)
Guia BPM CBOK(R)
 
Gestão Ágil de Projetos
Gestão Ágil de ProjetosGestão Ágil de Projetos
Gestão Ágil de Projetos
 
Scrum Master em ação
Scrum Master em açãoScrum Master em ação
Scrum Master em ação
 
Transformação Ágil
Transformação ÁgilTransformação Ágil
Transformação Ágil
 
Service Design Thinking
Service Design Thinking Service Design Thinking
Service Design Thinking
 
Gestão de Projetos Ágeis
Gestão de Projetos ÁgeisGestão de Projetos Ágeis
Gestão de Projetos Ágeis
 
Scrum, o tutorial definitivo
Scrum, o tutorial definitivo Scrum, o tutorial definitivo
Scrum, o tutorial definitivo
 
Feedback Canvas
Feedback CanvasFeedback Canvas
Feedback Canvas
 
Business Design Thinking
Business Design ThinkingBusiness Design Thinking
Business Design Thinking
 

Java Web, o Tutorial

  • 1. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 Java Web Capacitação Desenvolver Java Web Application Rildo F Santos rildo.santos@etecnologia.com.br twitter: @rildosan skype: rildo.f.santos http://rildosan.blogspot.com/ (11) 9123-5358 (11) 9962-4260 www.etcnologia.com.br
  • 2. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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..
  • 3. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 4. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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.
  • 5. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 5
  • 6. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 7. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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 CGI ASP Java Business Object Services Business Object Engine Camadas Apresentação, Lógica de Negócios e Integração Camada de Cliente
  • 8. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 8 Arquitetura da Web
  • 9. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 10. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 11. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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.
  • 12. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 13. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 14. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 15. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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 Browser HTTP / 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
  • 16. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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...?
  • 17. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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”
  • 18. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 19. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 20. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 21. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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 ?
  • 22. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 22 Arquitetura da Web
  • 23. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 24. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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ção Acesso a Disco Execução Emissão de resposta Liberação do recurso Arquitetura da Web CGI
  • 25. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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ção Acesso a Disco Execução Emissão de resposta Liberação do recurso Requisição Acesso a Disco Execução Emissão de resposta Liberação do recurso Requisição Acesso a Disco Execução Emissão de resposta Liberação do recurso Requisição Acesso a Disco Execução Emissão de resposta Liberação do recurso Requisição Acesso a Disco Execução Emissão de resposta Liberação do recurso Requisições Servidor Arquitetura da Web Componentes Web: CGI
  • 26. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 26 Perl Perl (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
  • 27. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 27 Integração CGI e Perl Quando 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
  • 28. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 29. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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.
  • 30. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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)
  • 31. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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.
  • 32. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 32 Arquitetura da Web
  • 33. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 34. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 34 Arquitetura da Web Páginas Clientes Browser Scripts Plug ins Sockwave (Flash) Real Video PDF Applet Java JavaScript VBScript JScript Linguagens HTML XML Internet Explorer Netscape Opera Mozilla Tecnologias no lado cliente:
  • 35. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 35 Arquitetura da Web
  • 36. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 37. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 38. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 39. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 40. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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;
  • 41. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 41
  • 42. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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.1a versões Isto significa que vamos precisar do arquivo servlet.jar (tomcat_homecommomlib) para compilar as aplicações. Você pode colocar a referência deste arquivo na Classspath.
  • 43. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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 bin Os 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 logs Nesta 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
  • 44. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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)
  • 45. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 45
  • 46. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 46
  • 47. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 48. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 49. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 49 JavaServlets
  • 50. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 51. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 52. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 53. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 54. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 55. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 56. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 57. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 58. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 58 JavaServlets
  • 59. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 60. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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()...
  • 61. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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()
  • 62. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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){ ... } }
  • 63. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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 GenericServlet O 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.
  • 64. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 65. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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 seuServlet service | 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){ ... } }
  • 66. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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 GenericServlet O 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
  • 67. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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.
  • 68. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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:
  • 69. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 70. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 70 JavaServlets
  • 71. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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: ....webappsROOTWEB-INFclasses 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
  • 72. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 73. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 74. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 75. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 75 JavaServlets
  • 76. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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)
  • 77. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 78. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 78 JavaServlets
  • 79. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 80. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 81. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 82. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 83. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 84. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 85. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 86. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 87. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 88. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 89. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 89 JavaServlets
  • 90. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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:
  • 91. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 92. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 93. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 94. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 95. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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>
  • 96. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 97. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 98. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 99. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 100. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 101. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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.
  • 102. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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">
  • 103. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 103 JavaServlets
  • 104. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 105. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 106. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 107. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 108. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 109. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 110. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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;
  • 111. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 112. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 113. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 114. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 115. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 116. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 116 JavaServlets
  • 117. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 118. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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: servletTesteA TesteB Resposta HTTP include TesteC Requisição HTTP: servletTesteC TesteD Resposta HTTP Despachar & Redirecionar
  • 119. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 120. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos os direitos reservados e protegidos © 2006 e 2010 120 JavaServlets
  • 121. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 122. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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.
  • 123. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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)
  • 124. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 125. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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)
  • 126. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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
  • 127. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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 Examplen"); 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
  • 128. Versão: 3.0 CapacitaçãodeDesenvolvedorJava Java Web rildo.santos@etecnologia.com.br Todos 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”); }