You are on page 1of 41

Prof.

Andr Luis Schwerz


andreluis@utfpr.edu.br
andreschwerz@gmail.com
AULA 03 AULA 03
O interior de um Servlet
O interior de um Servlet
Objetivos da Aula
Objetivos da Aula Objetivos da Aula
Aprenderemos:
O pacote javax.servlet;
O ciclo de vida do servlet;
Como obter informaes de configurao;
Como compartilhar informaes entre servlets;
A interface ServletRequest;
A interface ServletResponse;
A classe GenericServlet.
O pacote
O pacote O pacote javax
javax javax.servlet
.servlet .servlet
void service(ServletRequest req, ServletResponse res)
Mtodo chamado pelo servlet container para permitir ao servlet responder uma requisio.
void init(ServletConfig config)
Mtodo chamado pelo servlet container para indicar que o servlet esta sendo colocado em servio.
String getServletInfo()
Retorna informaes sobre o servlet, tal como autor, verso e copyright.
ServletConfig getServletConfig()
Retorna um objeto ServletConfig que contem parmetros de inicializao para este servlet.
void destroy()
Mtodo chamado pelo servlet container para indicar que o servlet esta sendo desalocado.
O ciclo de vida do servlet
O ciclo de vida do servlet O ciclo de vida do servlet
O ciclo de vida do servlet
O ciclo de vida do servlet O ciclo de vida do servlet
O construtor padro da sua classe
Servlet roda (voc NO deve escrever
um construtor. Use o padro fornecido
com o seu compilador.
Chamado apenas uma vez durante a
vida do servlet, deve completar antes
que o container chame o service().
Aqui onde o servlet passa a
maior parte de sua vida.
Trata as solicitaes do
cliente doGet(), doPost(),
etc. (Cada solicitao roda
em uma thread separada).
O container chama para dar ao servlet
uma chance de limpar antes de
morrer(quer dizer, estar preparado
para virar lixo). Como o init(), ele
chamado apenas uma vez.
Instanciar o servlet (o construtor roda)
Carregar a classe
Solicita o
manuseio
do cliente
Implemente
Implemente Implemente PrimitiveServlet
PrimitiveServlet PrimitiveServlet
PrimitiveServlet
PrimitiveServlet PrimitiveServlet
ServletConfig
ServletConfig ServletConfig
String getServletName()
Retorna o nome da instncia do servlet.
ServletContext getServletContext()
Retorna uma referncia ao ServletContext em que o chamador esta executando.
Enumeration getInitParameterNames()
Retorna os nomes dos parmetros de inicializao do servlet como uma Enumeration de objetos
String, ou uma Enumeration vazia se o servlet no apresentar parmetros de inicializao.
String getInitParameter(String name)
Retorna uma String contendo o valor do parmetro de inicializao name, ou null se o parmetro
no existe.
Por que o uso de parmetros de
inicializao uma estratgia interessante?
web.
web. web.xml
xml xml
<servlet>
<description></description>
<display-name>ConfigDemoServlet</display-name>
<servlet-name>ConfigDemoServlet</servlet-name>
<servlet-class>ConfigDemoServlet</servlet-class>
<init-param>
<param-name>adminEmail</param-name>
<param-value>andreluis@utfpr.edu.br</param-value>
</init-param>
<init-param>
<param-name>adminContactNumber</param-name>
<param-value>9982-4317</param-value>
</init-param>
</servlet>
ServletConfig
ServletConfig ServletConfig
O container l o Deployment Descriptor
para este servlet, incluindo os
parmetros init (<init-param>)
O Container cria uma nova instncia
ServletConfig para este servlet.
ServletConfig
ServletConfig ServletConfig
O container cria um par de strings
nome/valor para cada parmetro init do
servlet. Considere que temos apenas um.
O Container d ao ServletConfig as
referncias para os parmetros
init nome/valor.
P
a
r

m
e
t
r
o

i
n
i
t
d
o

D
D
ServletConfig
ServletConfig ServletConfig
O container cria uma nova instncia
da classe servlet.
O container chama o mtodo init() do
Servlet, passando a referncia para o
ServletConfig.
Instncia de
MyServlet.class
Instncia de
MyServlet.class
Exerc
Exerc Exerc
cio
cio cio
Criar uma classe chamada ConfigDemoServlet que
implementa a interface Servlet.
ConfigDemoServlet deve exibir no console os
parmetros de inicializao configurados no web.xml.
ConfigDemoServlet
ConfigDemoServlet ConfigDemoServlet
Exerc
Exerc Exerc
cio
cio cio
Problema: Preciso exibir/utilizar os parmetros de
inicializao no mtodo service().
Soluo: Crie um objeto ServletConfig para armazenar
uma cpia do objeto ServletConfig recebido no mtodo
init().
Crie uma classe chamada ReserveConfigServlet que
implementa a soluo acima.
ReserveConfigServlet
ReserveConfigServlet ReserveConfigServlet
O contexto de um
O contexto de um O contexto de um servlet
servlet servlet
O contexto de um servlet o ambiente onde o servlet
executa.
A interface ServletContext define um conjunto de
mtodos que um servlet usa para se comunicar com o
servlet container.
Voc consegue uma referncia ao objeto
ServletContext pelo mtodo getServletContext() da
interface ServletConfig.
A interface
A interface A interface ServletContext
ServletContext ServletContext
Os parmetros
Os parmetros Os parmetros init
init init do contexto
do contexto do contexto
(...)
<context-param>
<param-name> adminEmail </param-name>
<param-value>andreluis@utfpr.edu.br</param-value>
</context-param>
(...)
Exerccio:
Exiba os parmetros iniciais do contexto.
Exerc
Exerc Exerc
cio
cio cio
Parmetros
init para o
Servlet A
inseridos
Parmetros
init para o
Servlet C
inseridos
Sim, os JSP so
transformados em
Servlets de primeira
classe e tambm
recebem seus
prprios
ServletConfig
Contexto da aplicao
com os parmetros
init inseridos.
Parmetros
init para o
Servlet B
inseridos
A interface
A interface A interface ServletContext
ServletContext ServletContext
int getMinorVersion()
Retorna a menor verso da API Java Servlet que
este servlet container suporta.
String getMimeType(String file)
Retorna o tipo MIME do arquivo especificado, ou
null se o tipo MIME no for conhecido.
int getMajorVersion()
Retorna a maior verso da API Java Servlet que
este servlet container suporta.
ServletContext getContext(String urpath)
Retorna um objeto ServletContext que
corresponde a uma especfica URL do servidor.
Enumeration getAttributeNames()
Retorna uma Enumeration contendo os nomes
dos atributos disponveis dentro o contexto.
Object getAttribute(String name)
Retorna o atributo relacionado ao name dado em
um objeto, ou null se no existir nenhum
atributo para o name.
void setAttribute(String name, Object obj)
Este mtodo armazena um objeto no
ServletContext e liga o objeto ao nome dado. Se
o nome j existir no contexto, o antigo objeto
ligado da lugar ao objeto passado por este mtodo.
void removeAttribute(String name)
Remove o atributo expresso em name para este
contexto.
void log(String msg)
Escreve uma mensagem ao arquivo de log do
servlet log file.
String getServletContextName()
Retorna o nome desta aplicao web
correspondente a este ServletContext como
especificado no descritor web.xml pelo elemento
display-name.
String getServerInfo()
Retorna o nome e a verso do servlet container que
o servlet esta rodando.
String getRealPath(String path)
Retorna uma string contendo o caminho real para
um dado caminho virtual.
Exemplos
Exemplos Exemplos
Exerc
Exerc Exerc
cio
cio cio
Criar uma classe chamada ContextDemoServlet que
implementa a interface Servlet.
ContextDemoServlet deve exibir no console os atributos
os atributos definidos pelo servlet container.
Alm disso exiba as informaes da API Java Servlet e do
servidor.
ContextDemoServlet
ContextDemoServlet ContextDemoServlet
Compartilhar informa
Compartilhar informa Compartilhar informa
es entre servlets
es entre servlets es entre servlets
Crie duas classes que implementam servlet:
AttributeSetterServlet;
DisplayAttributeServlet.
AttributeSetterServlet em seu mtodo init deve
criar o atributo "password" com valor "dingdong";
Em seu mtodo service deve exibir no console o valor
do atributo.
AttributeSetterServlet
AttributeSetterServlet AttributeSetterServlet
DisplayAttributeServlet
DisplayAttributeServlet DisplayAttributeServlet
A interface
A interface A interface ServletRequest
ServletRequest ServletRequest
A interface
A interface A interface ServletRequest
ServletRequest ServletRequest
String[] getParameterValues(String name)
Retorna um array de objetos String contendo todos os valores do parmetro name, ou null se o
parmetro no existir.
Enumeration getParameterNames()
Retorna uma Enumeration de objetos String contendo os nomes dos parmetros da requisio.
Map getParameterMap()
Retorna a Map de parmetros desta requisio.
String getParameter(String name)
Retorna o valor de um parmetro da requisio como uma String, ou null se o parmetro no existir.
ServletInputStream getInputStream()
Fornece o corpo da requisio em dados binrios usando um ServletInputStream.
String getContentType()
Retorna o tipo MIME do corpo da requisio, ou null se o tipo for desconhecido.
int getContentLength()
Retorna o tamanho, em bytes, do corpo da requisio.
String getCharacterEncoding()
Retorna os nomes dos character encoding usados no corpo da requisio.
Enumeration getAttributeNames()
Retorna uma Enumeration contendo os nome dos atributos disponveis na requisio.
Object getAttribute(String name)
Retorna o valor do atributo name como um Object, ou null se o atributo name no existir.'
A interface
A interface A interface ServletRequest
ServletRequest ServletRequest
void setAttribute(String name, Object o)
Armazena um atributo nesta requisio.
void removeAttribute(String name)
Remove um atributo desta requisio.
boolean isSecure()
Retorna um boolean indicando se esta requisio foi feita usando um canal seguro, tal como HTTPS.
int getServerPort()
Retorna o numero da porta em que esta requisio foi recebida.
String getServerName()
Retorna o nome do servidor que recebe a requisio.
String getScheme()
Retorna o nome do esquema usado nesta requisio, por exemplo, http, https, or ftp.
String getRemoteHost()
Retorna nome do cliente que enviou a requisio.
String getRemoteAddr()
Retorna o endereo de IP do cliente que enviou a requisio.
BufferedReader getReader()
Fornece o corpo da requisio em caracteres usando um BufferedReader.
String getProtocol()
Retorna o nome e a verso do protocolo que a requisio usa formulrio, por exemplo
(protocol/majorVersion.minorVersion) HTTP/1.1.
Exerc
Exerc Exerc
cio
cio cio
Crie um formulrio a seguir:
Criar uma classe chamada RequestDemoServlet que implementa a interface
Servlet.
RequestDemoServlet deve exibir no console o parmetro definido no
formulrio. Alm disso, explore os mtodos da interface ServletRequest
A interface
A interface A interface ServletResponse
ServletResponse ServletResponse
A interface
A interface A interface ServletResponse
ServletResponse ServletResponse
boolean isCommitted()
Retorna um boolean indicando se a resposta foi
committed.
PrintWriter getWriter()
Retorna um objeto PrintWriter que pode enviar
caracteres para o cliente.
ServletOutputStream getOutputStream()
Retorna o ServletOutputStream adequado para a
escrita de dados binrios na resposta.
Locale getLocale()
Retorna o locale especificado para esta resposta
usando o mtodo setLocale.
String getContentType()
Retorna o tipo de contedo usado para o envio do
corpo nesta resposta.
String getCharacterEncoding()
Retorna o nome do character encoding usado para o
envio do corpo nesta resposta.
int getBufferSize()
Retorna o tamanho do buffer usado para resposta
void flushBuffer()
Fora qualquer contedo do buffer ser escrito para o
cliente.
void setLocale(Locale loc)
Configura o locale da resposta, se a resposta no
foi committed ainda.
void setContentType(String type)
Configura o tipo de contedo a ser enviado ao
cliente, se a resposta ainda no foi committed.
void setContentLength(int len)
Configura o tamanho do contedo do corpo na
resposta.
void setCharacterEncoding(String charset)
Configura o character encoding da resposta que
ser enviada ao cliente, por exemplo, UTF-8.
void setBufferSize(int size)
Configura o tamanho do buffer para o corpo da
resposta.
void resetBuffer()
Limpa o contedo do buffer sem limpar o cdigo
de status e cabealhos.
void reset()
Limpa qualquer dado que existe em um buffer
bem como o cdigo de status e cabealhos.
A interface
A interface A interface ServletResponse
ServletResponse ServletResponse
Crie um formulrio a seguir:
Criar uma classe chamada ResponseDemoServlet que implementa a
interface Servlet.
ResponseDemoServlet deve exibir no console o parmetro definido
no formulrio.
GenericServlet
GenericServlet GenericServlet
Problemas:
Voc precisa oferecer implementao para todos os cinco
mtodos da interface Servlet.
O objeto ServletConfig passado ao init. Voc precisa
preservar este objeto para us-lo a partir de outros mtodos.
Criar uma classe que implemente estas interfaces e
nossos servlets herdaro esta classe.
GenericServlet
GenericServlet GenericServlet
GenericServlet
GenericServlet GenericServlet
Acesso concorrente ao servlet
Acesso concorrente ao servlet Acesso concorrente ao servlet
Vamos criar um servlet que:
Abre um arquivo;
L um inteiro.
Fecha o arquivo.
Incrementa.
Abre o arquivo.
Escreve o inteiro.
Fecha o arquivo.
SingleThreadedServlet
SingleThreadedServlet SingleThreadedServlet

You might also like