Buscar

3 - Java Servlets

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 94 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 94 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 94 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Introdução
• Desde meados da década de noventa, a
Internet tem evoluído e se popularizado
no mundo todo;
� O número de usuários é cada vez maior no
mundo inteiro;
� O número de páginas é cada vez maior;
Introdução
• Todos estes fatores tornaram a Web um
ambiente propício para a realização de
diversas atividades:
� Comércio eletrônico;
� Acesso a diversos tipos de informação;
� Oferecimento de diversos tipos de serviços;
Introdução
• Toda essa demanda faz surgir a
necessidade de se desenvolver
aplicações para o ambiente Web;
• É necessário uma tecnologia que dê
suporte ao desenvolvimento deste tipo
de aplicação;
Entendendo o HTTP
• O principal mecanismo para a
navegação na Internet é o protocolo
HTTP;
• Interação na forma de requisição-
resposta;
• O cliente faz a solicitação através de
um browser ao servidor Web no qual o
recurso desejado está armazenado;
Entendendo o HTTP
• Na maioria das vezes, esse recurso é
uma página HTML;
� Mas também pode ser um documento pdf, um
vídeo, uma imagem, um documento de texto, etc;
Entendendo o HTTP
• Visão geral de uma comunicação HTTP:
Entendendo o HTTP
• Uma interação HTTP é composta por
dois elementos principais:
� A requisição enviada pelo cliente;
� A resposta devolvida pelo servidor;
Entendendo o HTTP
• A requisição contém as seguintes
informações:
� A ação (método) que deve ser executada;
� A URL do recurso que deve ser recuperado;
� Os parâmetros que devem ser usados na ação;
Entendendo o HTTP
• A resposta contém as seguintes
informações:
� Um código de status;
� O tipo de recurso que foi retornado;
� O conteúdo que foi retornado pelo servidor;
Entendendo o HTTP
• A maior parte das requisições HTTP é
feita usando os métodos GET e POST;
� Mas o protocolo também define outras operações;
• Os dois métodos recuperam um recurso
armazenado no servidor;
� Embora de uma forma um pouco diferente;
Entendendo o HTTP
• O método GET:
� É o método de requisição mais simples;
� Quantidade limitada de caracteres;
�Varia de acordo com o servidor;
� Normalmente é usado quando clicamos em um
link para ir para outra página ou para abrir/baixar
um arquivo;
Entendendo o HTTP
• O método GET:
� Exemplos de URLs usadas com o método get;
�http://www.ifpb.edu.br
�http://www.ifpb.edu.br/artigos/artigo.doc
Entendendo o HTTP
• O método GET:
� O método também pode enviar parâmetros para o
servidor, mas estas informações são colocadas
como parte da URL;
�http://www.minhaplicacao.com.br/meuservlet?cu
rso=ads&disciplina=psd
Entendendo o HTTP
• O método POST:
� É um tipo de solicitação mais poderosa;
� As informações são passadas no corpo da
mensagem, e não na URL;
� Podemos passar uma grande quantidade de
informações;
�Como os dados de um formulário;
Entendendo o HTTP
• O servidores Web tradicionais só
entregam páginas HTML estáticas;
� Os documentos são estáticos e desenvolvidos em
tempo de design;
• Como gerar páginas cujo conteúdo
varia de acordo com os resultados de
uma aplicação?
Entendendo o HTTP
• Para a geração de páginas dinâmicas,
uma outra aplicação precisa ajudar o
servidor;
� Invocando a aplicação correta para a geração da
página;
� Devolvendo a página gerada para o cliente que
fez a solicitação;
As soluções existentes
• Algumas tecnologias foram propostas
para a geração de páginas dinâmicas:
� Applets;
� Servlets;
� Java Server Pages (JSP);
� Common Gateway Interface (CGI);
� Active Server Pages (ASP);
� Hypertext Preprocessor (PHP);
Applets
• Primeira solução proposta para a
linguagem java;
• As classes java são embutidas na
página HTML através de uma tag
especial;
• São executados na JVM da máquina
cliente;
Applets
• Algumas desvantagens:
� Requerem que o browser tenha uma JVM
instalada;
� A JVM tem que ser carregada antes de executar o
applet pela primeira vez;
� Applets são executados na máquina cliente, e, por
isso, podem sofrer restrições de segurança;
Servlets
• Servlets são classes java capazes de
manipular e responder requisições de clientes
Web;
• Eles são armazenados e executados na
máquina do servidor web;
• São independentes do protocolo de rede, mas,
normalmente atuam com o protocolo HTTP;
Java Server Pages
• Outra tecnologia Java para a geração
de páginas dinâmicas;
• Permite uma melhor abstração para
servlets;
• Permite que tags e códigos para a
chamada de comandos java sejam
inseridos dentro da página;
Common Gateway Interface
• Tecnologia que permite que páginas
sejam geradas a partir de programas
feitos em linguagem de scripting;
� Principalmente Perl;
• Os scripts CGI também rodam no lado
do servidor;
Active Server Pages
• Solução da Microsoft para a geração de
páginas dinâmicas;
• Também baseada em linguagens de
scripting, com os scripts sendo
executados no servidor;
• Foi substituída pela tecnologia ASP.NET;
Hypertext Preprocessor (PHP)
• Linguagem bastante popular
desenvolvida para o desenvolvimento
de páginas dinâmicas;
� Mas também pode ser usada como uma
linguagem de propósito geral;
• A linguagem é interpretada e os
programas rodam no lado do servidor;
O container Web
• O servidor web tradicional não é capaz
de tratar servlets;
• Quem faz isso é um programa chamado
de container Web;
� É ele quem gerencia e executa os servlets de
uma aplicação;
O container Web
• O container Web desempenha várias
tarefas:
� Gerenciamento do ciclo de vida;
�Carregando, instanciando, chamando métodos e
destruindo servlets;
� Suporte a multithread;
�Criando, destruindo e sincronizando threads;
O container Web
• O container Web desempenha várias
tarefas:
� Gerenciamento de segurança;
�Um descritor pode ser usado para configurar e
modificar a segurança da aplicação;
� Suporte a Java Server Pages;
�Traduzindo o código JSP em código java de
verdade;
O Apache Tomcat
• Container web oferecido pela Apache;
• Ferramenta Open Source;
• Implementa as tecnologias de servlets e
JSP;
O Apache Tomcat
• Pode ser integrado às principais IDEs
usadas para o desenvolvimento de
aplicações Java;
� Mas também pode ser usado de forma isolada;
Servlets
• Java Servlets é uma tecnologia
presente na plataforma J2EE;
� Presente no diretório lib do servidor de aplicações
ou do container web;
• O pacote javax.servlet contém as
classes e interfaces necessárias para a
criação de servlets;
Principais componentes da API de servlets
Servlets
• A interface Servlet:
� Interface padrão que descreve o comportamento
de um servlet;
� Descreve entre outras coisas, a implementação
dos métodos referentes ao ciclo de vida do
servlet;
� Ela é implementada pela classe GenericServlet;
Servlets
• A interface Servlet:
� A interface oferece alguns métodos relacionados
ao seu ciclo de vida;
� init(ServletConfig config);
– Chamado no momento em que o servlet é
inicializado;
�service(ServletRequest, ServletResponse);
– Chamado para que o servlet responda à
requisição do cliente;
Servlets
• A interface Servlet:
� A interface oferece alguns métodos relacionados
ao seu ciclo de vida;
�destroy();
– Chamado para finalizar o servlet;
Servlets
• A interface Servlet:
� Todos os métodos que controlam o ciclo de vida
do servlet são invocados pelo container;
� Uma versão default destes métodos já é oferecida
pelas classes que implementam a interface;
Servlets
• A interface ServletConfig:
� Interface que descreve o comportamento de um
objeto que encapsula informações de
configuração do servlet;
� Os objetos desta interface encapsulam
informações de inicializaçãodo servlet;
� Falaremos mais sobre isso nos próximos
assuntos;
Servlets
• A classe GenericServlet:
� Classe que implementa as interfaces Servlet e
ServletConfig;
� Representa um servlet genérico, independente do
protocolo de rede usado durante a requisição;
� Oferece uma implementação default para os
métodos do ciclo de vida do servlet;
Servlets
• A classe HttpServlet:
� Classe que representa um servlet que manipula
apenas requisições feitas com o protocolo HTTP;
� Estende a classe GenericServlet;
� Normalmente, novos servlets são criados através
da extensão esta classe;
Servlets
• A classe HttpServlet:
� Os seus principais métodos são:
�doGet(HttpServletRequest, HttpServletResponse);
– Método chamado quando a requisição usa o
método GET;
�doPost(HttpServletRequest,
HttpServletResponse);
– Chamado quando a requisição usa o método
POST;
Servlets
• A interface ServletRequest:
� Define o comportamento de uma requisição feita
para o servlet;
�Independente do protocolo utilizado;
� Encapsula informações como o nome do servidor
para o qual a requisição foi enviada e os
parâmetros de entrada com seus respectivos
valores;
Servlets
• A interface HttpServletRequest:
� Interface que estende a ServletRequest,
adicionando características específicas de
requisições HTTP;
� Uma característica importante é que através dela
podemos acessar um objeto que representa a
sessão do cliente;
Servlets
• A interface HttpSession:
� Interface que descreve o comportamento de um
objeto que representa uma sessão entre o cliente
a aplicação;
� Falaremos sobre o gerenciamento de sessão nos
próximos assuntos;
Servlets
• A interface ServletResponse:
� Define o comportamento da resposta gerada pelo
servlet;
�Independente do protocolo de rede utilizado na
solicitação;
� Ela é estendida pela interface
HttpServletResponse;
Servlets
• A interface HttpServletResponse:
� Interface que estende a interface
ServletResponse, adicionando características
específicas de requisições HTTP;
O ciclo de vida de um servlet
• Etapas na execução de um servlet:
� Solicitação HTTP do cliente;
� Geração da requisição e da resposta;
� Criação do servlet;
� Inicialização e execução do servlet;
� Geração da resposta;
� Resposta ao cliente;
O ciclo de vida de um servlet
• Solicitação HTTP:
� Corresponde à solicitação HTTP feita por um
cliente;
� Isto acontece quando o cliente clica em uma URL
que tem uma solicitação para um servlet;
� Esta solicitação pode ser feita através dos
métodos GET ou POST;
O ciclo de vida de um servlet
• Geração da requisição e da resposta:
� No momento em que o container percebe que a
requisição é para um servlet, ele cria dois objetos:
� Uma requisição, que encapsula as informações
recebidas através da solicitação do cliente;
� Uma resposta, que vai encapsular as informações
que serão enviadas de volta para o cliente;
O ciclo de vida de um servlet
• Criação do servlet:
� Depois de criar os objetos que representam a
requisição e a resposta, o container localiza o
servlet que deve ser executado;
� Feito isso, ele aloca uma nova thread para tratar a
solicitação;
� O container passa para a thread a referências
para os objetos da requisição e da resposta;
O ciclo de vida de um servlet
• Inicialização e execução do servlet:
� Uma vez criada, a thread que vai tratar a
solicitação do cliente é inicializada através do
método service;
� Após a sua execução, o método service invoca o
método doGet ou doPost do servlet;
�Dependendo do método HTTP usado na
requisição;
O ciclo de vida de um servlet
• Geração da resposta:
� Durante a execução dos métodos doGet ou
doPost, o servlet gera uma página dinâmica no
objeto que representa a resposta;
� O servlet faz isso “editando” o fluxo de saída do
objeto que encapsula a resposta;
O ciclo de vida de um servlet
• Resposta ao cliente:
� Depois que o servlet é executado, o container
converte o objeto da resposta em uma página
HTML e a retorna para o cliente;
� Feito isso, o container destrói a thread usada na
solicitação e os objetos da requisição e da
resposta;
Criando uma aplicação Web no 
Apache Tomcat
• Aplicações web no Tomcat devem ser
colocadas no seu diretório WebApps;
� Aplicações neste diretório são detectadas
automaticamente pelo container;
� Outros locais podem ser usados, mas isso precisa
ser configurado diretamente no servidor;
Estrutura de uma aplicação Web no Apache Tomcat
Criando uma aplicação Web no 
Apache Tomcat
• O arquivo Web.xml:
� É o arquivo de configuração da aplicação;
� Todos os servlets da aplicação precisam ser
descritos neste arquivo;
� Outros itens de configuração podem ser definidos
neste arquivo e serão estudados mais adiante;
O Primeiro Servlet
• Vamos ver um exemplo de um servlet
que, quando chamado, imprime uma
mensagem dizendo que a requisição foi
tratada com sucesso;
O Primeiro Servlet
O Primeiro Servlet
• Note que:
� O servlet estende a classe HttpServlet;
� O método que processa a requisição recebe como
parâmetro de entrada os objetos que representam
a requisição e a resposta;
O Primeiro Servlet
• Note que:
� Usamos o objeto retornado pelo método getWriter
para imprimir o código HTML da resposta que
deve ser enviada ao cliente;
� Antes de editar a resposta, usamos o método
getWriter para acessar o objeto que edita o fluxo
de saída da resposta;
O Primeiro Servlet
• Após criarmos o servlet, precisamos
adicioná-lo à aplicação Web;
• Isto pode ser feito de duas formas:
� Através do descritor da aplicação;
� Através de anotações;
Usando o Descritor da 
Aplicação
• No descritor da aplicação, precisamos
de dois elementos para adicionar o
servlet;
� servlet;
� servlet-mapping;
Usando o Descritor da Aplicação
• Configuração de um servlet no arquivo
Web.Xml: Identificação do 
servlet no descritor
Mapeamento para 
a classe Java
URL usada para a 
invocação
Usando Anotações
• Servlets também podem ser
adicionados à aplicação Web através de
anotações;
• Este recurso foi introduzido na versão
3.0 da API;
Usando Anotações
• Para adicionar um servlet à aplicação,
usamos a anotação WebServlet;
• O valor do atributo url-pattern usado
para invocar o servlet precisa ser
definido junto com a anotação;
Usando Anotações
Usando Anotações
• Ao definir uma anotação, também
podemos especificar explicitamente o
valor de cada atributo;
• Para isso, usamos os atributos name e
url-patterns;
Usando Anotações
Usando Anotações
• Importante: Caso o servlet tenha sido
declarado das duas formas, o descritor
da aplicação prevalece sobre a
anotação;
Invocando o servlet
• Uma vez declarado, o servlet está
pronto para receber requisições dos
clientes;
• Estas requisições devem ser realizadas
com base no valor do atributo url-
pattern;
Invocando o servlet
• Importante: Caso o servlet tenha sido
declarado como uma anotação, o
atributo metadata-complete do
descritor da aplicação deve ser definido
com o valor false;
Invocando o servlet
• Invocando um servlet a partir de uma
página;
Invocando o 
servlet 
Invocando o 
servlet 
Invocando o 
servlet 
Invocando o 
servlet 
Invocando o servlet
• Quando o servlet é executado,
encontramos a seguinte resposta:
Recuperando um parâmetro da 
requisição
• Vamos agora escrever um servlet que
recupera o valor de um parâmetro de
entrada;
• O servlet recupera o nome passado pelo
usuário e o imprime em outra página;
� O valor é passado através de uma caixa de texto
em um formulário;
Formulário de entrada
Recuperando um parâmetroda 
requisição
• A informação é passada como um
parâmetro da requisição;
• O nome do parâmetro corresponde ao
nome do campo no formulário;
• O valor do parâmetro é o valor digitado
pelo usuário no campo de texto;
Recuperando um parâmetro 
da requisição
Nome do 
parâmetro
Recuperando um parâmetro 
da requisição
• Para recuperar o valor de um
parâmetro de entrada, usamos o
método getParameter do objeto que
representa a requisição;
• Para isso, passamos para o método o
nome do parâmetro cujo valor deve ser
recuperado;
� Cuidado: Lembre-se que java é case sensitive;
Recuperando um parâmetro 
da requisição
• Importante: o servlet trata
o nome e o valor de um
parâmetro como strings;
• Caso o valor de um
parâmetro deva ser usado
como um outro tipo, um
casting precisa ser
realizado antes;
Código do servlet que recupera a informação
Resultado gerado pelo servlet que recupera a informação
Recuperando todos os 
parâmetros da requisição
• Vamos agora escrever um servlet que
imprime o nome e o valor de todos os
parâmetros da requisição;
• Para isso, vamos usar um formulário
que contém os seguintes campos:
� Nome, idade, cidade, curso;
Formulário de entrada
Recuperando todos os 
parâmetros da requisição
• O nome de cada parâmetro corresponde
ao nome do componente do formulário;
Nome do 
parâmetro
Recuperando todos os 
parâmetros da requisição
• No exemplo anterior, o servlet já sabia
o nome do parâmetro usado na
requisição;
• Quando isto não for possível, podemos
usar o método getParameterNames da
requisição;
Recuperando todos os 
parâmetros da requisição
• Este método retorna uma enumeração
com os nomes de todos os parâmetros
da requisição;
• Para cada parâmetro, podemos usar o
método getParameter para obter o seu
valor;
� Como no exemplo anterior;
Servlet que recupera os parâmetros de entrada
Exemplo de Saída
Imprimindo os dados do 
cabeçalho da requisição
• Vamos agora criar um servlet que
imprime os dados do cabeçalho da
requisição do cliente;
• Para isso, usaremos o método
getHeaderNames do objeto que
representa a requisição;
Imprimindo os dados do 
cabeçalho da requisição
• O método getHeaderNames retorna
uma enumeração com os nomes de
todos os headers enviados no cabeçalho
requisição;
• O método getHeader pode ser usado
para obter o valor para um determinado
header;
Servlet que imprime os cabeçalhos da requisição
Resultado da execução do servlet
Gerando outro tipo de 
conteúdo
• Vamos agora escrever um servlet que
gera outro tipo de conteúdo para o
cliente;
• Neste exemplo, os headers da
requisição, com os seus respectivos
valores, são retornados como um
arquivo XML;
Gerando outro tipo de 
conteúdo
• Neste exemplo, usamos o método
setContentType para alterar o tipo de
retorno para “application/xml”;
� O valor default é text/html;
� O browser do cliente usa esta informação para
saber como interpretar e apresentar o conteúdo
da resposta retornada pelo servidor;
Servlet que retorna um arquivo XML
Resultado gerado pelo servlet

Outros materiais