Académique Documents
Professionnel Documents
Culture Documents
Carlos Bazilio
Depto de Cincia e Tecnologia
Plo Universitrio de Rio das Ostras
Universidade Federal Fluminense
Servlets
So o bloco bsico do desenvolvimento
web em Java
Servlets so classes hospedadas num
servidor que respondem a requisies
HTTP
De maneira informal e resumida, servlets
so classes java que geram pginas html
Um servlet uma especializao da
classe javax.servlet.http.HttpServlet
2
Servlets
package br.com.siriusnet.cursojava;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.IOException;
public class PrimeiroServlet extends HttpServlet {
public void doGet ( HttpServletRequest req,
HttpServletResponse res )
throws IOException {
ServletOutputStream out = res.getOutputStream();
res.setContentType("text/html");
out.println("<html><head><title>Bsico</title></head>")
;
out.println("<body>Voc est no endereo: " +
req.getRemoteAddr() + "!!</body></html>");
3
}
Servlets Implantao
Para a compilao do exemplo, devemos
incluir a API de servlets:
<tomcat6-path>/lib/servlet-api.jar ou
<tomcat5-path>/common/lib/servlet-api.jar
Descritor de Implantao
web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>primeiro</servlet-name>
<servlet-class>
br.com.siriusnet.cursojava.PrimeiroServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>primeiro</servlet-name>
<url-pattern>/alou</url-pattern>
</servlet-mapping>
</web-app>
5
Diretrios do Tomcat
Executveis
Configurao do Tomcat
Bibliotecas compartilhadas
entre aplicaes
Diretrio de implantao de
aplicaes
Contexto de uma aplicao
especfica; pode conter
arquivos html, jsp, etc
Diretrio que contm o descritor
de implantao web.xml
Diretrio que contm as
compilaes dos servlets
(.class) de uma aplicao
Bibliotecas de uma aplicao
Temporrio das aplicaes
Servlets Distribuio
de Aplicaes
Podemos colocar toda aplicao Web
dentro de um arquivo .war
WAR anlogo ao JAR para programas
Java; deve conter toda a rvore de
diretrios da aplicao, exceto a raiz
No Tomcat, para implantarmos um WAR
basta que copiemos o arquivo para o
diretrio <tomcat>/webapps
Na implantao no necessrio que o
Tomcat seja reiniciado
import
import
import
public
//
//
Mtodos herdados de
HTTPServlet
javax.servlet.http.*;
javax.servlet.*;
java.io.IOException;
class CicloDeVida extends HttpServlet {
Metodo chamado para inicializar o servlet
O metodo da superclasse precisa ser chamado quando este
metodo eh sobrescrito
public void init(ServletConfig arg0) throws ServletException { }
// Este metodo eh invocado quando solicitacoes chegam
// Este metodo nao precisa ser obrigatoriamente sobrescrito
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException { }
// Chamado por service() quando solicitacoes GET sao recebidas
public void doGet(HttpServletRequest arg0, HttpServletResponse
arg1) throws ServletException, IOException { }
// Chamado por service() quando solicitacoes POST sao recebidas
public void doPost(HttpServletRequest arg0, HttpServletResponse
arg1) throws ServletException, IOException { }
// Chamado quando o servlet eh destruido pelo conteiner
public void destroy() { }
8
Tratamento de Mensagens
GET e POST
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.IOException;
public class CicloDeVida extends HttpServlet {
public void doGet(HttpServletRequest arg0, HttpServletResponse
arg1) throws ServletException, IOException {
this.processa(arg0, arg1);
}
public void doPost(HttpServletRequest arg0, HttpServletResponse
arg1) throws ServletException, IOException {
this.processa(arg0, arg1);
}
public void processa(HttpServletRequest arg0,
HttpServletResponse arg1) throws ServletException, IOException
{
// Processamento da requisio
}
}
HTTPServletRequest e
HTTPServletResponse
Estas 2 classes so cruciais para o tratamento
de requisies atravs de servlets
A classe HTTPServletRequest representa uma
requisio e contm todas as informaes do
cliente solicitante
IP do cliente, cookies, header do HTTP, etc
Servlets Alguns
Mtodos
HttpServletRequest
String getParameter(String name) Retorna
parmetros de solicitao de campos de um
formulrio;
String getRemoteAddress() Retorna o endereo
IP da mquina cliente;
Cookie [] getCookies() Retorna um array de
todos os cookies;
String getHeader(String name) Retorna o valor
da entrada name no cabealho HTTP como uma
string.
12
Servlets Alguns
Mtodos
HttpServletRequest
RequestDispatcher getRequestDispatcher
(String url) Cria um dispatcher para o
recurso url; assim podemos encaminhar a
requisio utilizando o mtodo forward() da
classe RequestDispatcher
HttpSession getSession() Retorna uma
referncia para a sesso associada
requisio, ou cria uma nova caso a sesso
no exista
13
Servlets Alguns
Mtodos
HttpServletResponse
java.io.ServletOutputStream getOutStream()
Retorna o outputstream de forma que
possamos gravar dados no cliente;
void setContentType(String mime)
Configura o tipo de contedo de sada; Lista
completa dos tipos MIME em
http://www.iana.org/assignments/mediatypes/i
ndex.html
14
Servlets Alguns
Mtodos
HttpServletResponse
void addCookie(Cookie cookie) Adiciona um
cookie ao cabealho da resposta;
void addHeader(String name, String value)
Adiciona o cabealho especificado
resposta;
void sendRedirect(String url) Redireciona
uma solicitao para outro recurso (servlet ou
pgina www).
15
Processando Formulrios
<html>
<head>Um Form Bsico</head>
<body>
<h1>Entre com seus dados:</h1>
<form action="processaForm" method="POST">
Tratamento: <select size="1" name="titulo">
<option>Sr.</option>
<option>Sra.</option>
</select>
Nome: <input type="text" name="nome" size="20"><br>
Cidade: <input type="text" name="cidade" size="20"><br>
<p>Selecione seus interesses:</p>
<input type="checkbox" name="interesses"
value="esportes">Esportes<br>
<input type="checkbox" name="interesses"
value="musica">Musica<br>
<input type="checkbox" name="interesses"
value="leitura">Leitura<br>
<p><input type="submit" value="Envie"></p>
</form>
</body>
16
</html>
Processando Formulrios
Processando Formulrios
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>segundo</servlet-name>
<servlet-class>
br.com.siriusnet.cursojava.ProcessaFormulario</servletclass>
</servlet>
<servlet-mapping>
<servlet-name>segundo</servlet-name>
<url-pattern>/processaForm</url-pattern>
</servlet-mapping>
</web-app>
18
Redirecionamentos
Ao receber uma requisio, um servlet pode:
Respond-la diretamente, produzindo algum
contedo html a ser enviado ao cliente (navegador)
Encaminh-la para algum outro recurso responsvel
por responder a esse tipo de requisio
Redirecionamentos
A chamada do mtodo sendRedirect(String url)
faz com que o servidor envie ao cliente uma
mensagem para que este envie a solicitao a
uma nova url
Na verdade, o servidor envia ao cliente uma
mensagem HTTP com cdigo 302, o qual indica
que o recurso foi movido para outra url
O redirecionamento atravs da classe
RequestDispatcher interno ao servidor; ou
seja, no h comunicao com o cliente
20
Redirecionamentos
Em termos de prticos, para o cliente
(navegador), a primeira opo modifica o
endereo url no navegador, enquanto que
a segunda no
Em temos de projeto de aplicaes web,
redirecionamentos so utilizados entre
Servlets/JSPs como um mecanismo de
delegao de tarefas entre recursos
21
Exerccio
22
Exerccio
23
Escopo
O escopo de um objeto indica quanto
tempo o objeto existe depois de ter sido
criado;
Os nveis de escopo variam desde o tempo
de vida do continer at o tempo de vida
de uma pgina individual;
Em aplicaes Web, podemos definir 4
nveis de escopos diferentes: Aplicao,
Sesso, Solicitao/Requisio e Pgina
24
Escopo
25
Escopo Aplicao
Objetos compartilhados por todos os
servlets em uma dada aplicao
Exemplo: conexo com banco de dados,
lista de produtos numa aplicao de
controle de estoque, etc.
26
Escopo Sesso
Objetos compartilhados numa sesso
vinculada a um usurio
Exemplo: carrinho num site de compras
28
29
Escopo Pgina
Objetos compartilhados entre JSPs e
servlets na pgina de execuo atual
Exemplo: variveis locais declaradas em
pginas JSPs
30
Escopo Requisio
Objetos compartilhados disponveis para
JSPs/Servlets numa solicitao
Difere do escopo de pgina por permitir o
compartilhamento tambm para
JSPs/Servlets includas ou redirecionadas
Exemplo: parmetros de campo de
formulrio
Pode ser acessado atravs da classe
HTTPServletRequest
31
Listeners e Filters
Permitem que tenhamos maior controle do uso das
nossas aplicaes web
Listeners sero usualmente utilizados para observar o
ciclo de vida de atributos (criao, atualizao e
remoo) para os escopos disponveis
Filters, por sua vez, permitem que as requisies
possam ser interceptadas antes ou depois de alcanar o
recurso desejado (um servlet, por exemplo)
Ambos funcionam como funes de callback, ou seja,
aps a criao, o continer quem faz chamadas a
estes mtodos
32
Listeners de Aplicaes
Web
Usando a API de servlets (javax.servlet),
podemos criar listeners de eventos para
aplicaes web
Estes listeners esto definidos como interfaces
nesta API
Esto disponveis para os escopos:
Escopo de aplicao: ServletContextListener,
ServletContextAttributeListener
Escopo de sesso: HTTPSessionListener,
HTTPSessionAttributeListener
Escopo de requisio: ServletRequestListener,
ServletRequestAttributeListener
33
Listener de Aplicao
public class EscutadorAplicacao implements ServletContextListener
{
public void contextDestroyed(ServletContextEvent arg0) {}
public void contextInitialized(ServletContextEvent arg0) {}
}
Listener de Aplicao
public class EscutadorAplicacao implements ServletContextListener,
ServletContextAttributeListener {
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("Aplicao encerrada");
}
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("Aplicao inicializada");
Calendar cal = new GregorianCalendar();
arg0.getServletContext().setAttribute("iniciou", cal);
}
public void attributeAdded(ServletContextAttributeEvent arg0) {
System.out.println(arg0.getName() + ": ");
System.out.println(arg0.getValue().toString());
}
public void attributeRemoved(ServletContextAttributeEvent arg0) {
}
public void attributeReplaced(ServletContextAttributeEvent arg0)
{ }
35
}
Listener de Aplicao
web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
...
<listener>
<listener-class>
br.com.siriusnet.cursojava.EscutadorAplicacao
</listener-class>
</listener>
...
</web-app>
36
Listener de Aplicao
A execuo da aplicao fornecida no
Tomcat far com que os comandos
System.out.println() sejam enviados para
um arquivo de log: <Tomcat>/logs
Testes anlogos podem ser feitos para os
listeners de sesso e requisio
37
Exerccio
Criar 2 tipos de contadores:
Um contador de acessos, o qual contar a
quantidade de acessos servlets
Um outro que contar a quantidade de
sesses abertas para a aplicao num dado
momento
38
Servlets Container
Multithreaded
39
Filtros de Servlets
Filtros permitem a interceptao de uma
solicitao antes/aps que esta atinja o recurso
solicitado
Em outras palavras, um filtro d acesso aos
objetos HTTPServletRequest e
HTTPServletResponse antes destes serem
passados a um servlet
Um filtro pode ser um ponto ideal para: log de
requisies, criptografia, autenticao,
compresso de dados, validao do usurio, etc
40
Filtros de Servlets
Filtros podem ser organizados em
cadeias, de forma que mais de 1 filtro
possa ser acionado para uma mesma
solicitao
Para criao de um filtro, basta criar uma
classe que implemente a interface
javax.servlet.Filter
41
Filtros de Servlets
public class FiltraRequisicao implements Filter {
@Override
public void init(FilterConfig arg0)
throws ServletException {
}
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0,
ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
}
}
42
Filtros de Servlets
public class FiltraRequisicao implements Filter {
@Override
public void init(FilterConfig arg0) throws ServletException {
}
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2)
throws IOException, ServletException {
Calendar cal = Calendar.getInstance();
System.out.println("Endereo: " + arg0.getRemoteAddr());
System.out.println("Recurso: " +
((HttpServletRequest)arg0).getRequestURL().toString());
System.out.println("Hora: " + cal.getTime().toString());
arg2.doFilter(arg0, arg1);
}
43
}
Filtros de Servlets
<web-app>
<servlet>
<servlet-name>primeiro</servlet-name>
<servlet-class>br.com.siriusnet.cursojava.PrimeiroServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>primeiro</servlet-name>
<url-pattern>/alou</url-pattern>
</servlet-mapping>
<filter>
<filter-name>filtro</filter-name>
<filter-class>br.com.siriusnet.cursojava.FiltraRequisicao
</filter-class>
</filter>
<filter-mapping> // Filtro para um servlet especfico !!
<filter-name>filtro</filter-name>
<url-pattern>/alou</url-pattern> <!--OU !!!
<servlet-name>primeiro</servlet-name -->
</filter-mapping>
</web-app>
44
Filtros de Servlets
<web-app>
<filter>
<filter-name>filtro</filter-name>
<filter-class>
br.com.siriusnet.cursojava.FiltraRequisicao
</filter-class>
</filter>
<filter-mapping>
<filter-name>filtro</filter-name>
<url-pattern>/*</url-pattern> // Qualquer recurso!
</filter-mapping>
</web-app>
45
Filtros de Servlets
A chamada ao mtodo doFilter() dentro do
prprio mtodo encaminha a solicitao para
outros filtros na cadeia, ou para o recurso
solicitado
Quando desejamos tratar a resposta de uma
solicitao, esta chamada deve ser localizada
antes do tratamento desejado
Pode ser utilizado, por exemplo, para calcular o
tempo necessrio para o processamento de
uma requisio pelo servidor
46