O documento discute os fundamentos de servlets em Java, cobrindo tópicos como:
1) A estrutura básica de servlets com os métodos doGet, doPost e init que definem o ciclo de vida;
2) Como gerar respostas HTML e texto simples a partir de um servlet;
3) Que o código principal fica nos métodos doGet e doPost, enquanto o init é chamado uma única vez.
2. Agenda
A estrutura básica de servlets
Um servlet simples que gera um texto
de resposta
Um servlet que gera HTML
Servlets e pacotes
Utilitários para criação de HTML
Estratégias para debugar servlets
www.jetsoftware.com.br
3. A finalidade de um Servlet
Ler dados explícitos enviados pelo cliente ( formulário
de dados )
Ler dados implícitos enviados pelos clientes (headers
de request)
Gerar os resultados
Enviar os dados explícitos de volta para o cliente
Enviar os dados implícitos de volta para o cliente (
códigos de status e headers de response )
O Servlet mora aqui !
Request
Respo nse
Browser
www.jetsoftware.com.br
4. Um Servlet que gera um texto
simples
package br.com.jetsoftware.controller;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TextoPlano extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println(quot;Hello Worldquot;);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
}
}
www.jetsoftware.com.br
5. Um Servlet que gera HTML
Informe ao browser que enviaremos uma
resposta em HTML
response.setContentType(“text/html”);
Modifique a declaração println para construir
uma página HTML bem formada
A declaração print deve ter como saída tags HTML
Cheque o HTML gerado com um validador
formal.
http://validator.w3.org
http://www.htmlhelp.com/tools/validator
www.jetsoftware.com.br
6. Um Servlet que gera HTML,
código
package br.com.jetsoftware.controller;
public class TextoHtml extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType(quot;text/htmlquot;);
PrintWriter out = response.getWriter();
String docType =
quot;<!DOCTYPE HTML PUBLIC quot;-//W3C//DTD HTML 4.0 quot;+
quot;Transitional//ENquot;>nquot;;
out.println(docType +
quot;<HTML>nquot; +
quot;<HEAD><TITLE>Alou</TITLE></HEAD>nquot;+
quot;<BODY BGCOLOR=quot;#FDF5E6quot;>nquot; +
quot;<H1>Alou</H1>nquot; +
quot;</BODY></HTML>quot;);
}
} www.jetsoftware.com.br
7. Utilitário para geração de
HTML
public class ServletUtilities {
public static final String DOCTYPE =
quot;<!DOCTYPE HTML PUBLIC quot;-//W3C//DTD HTML 4.0 quot; + quot;Transitional//ENquot;>quot;;
public static String headWithTitle(String title) {
return(DOCTYPE + quot;nquot; + quot;<HTML>nquot; +
quot;<HEAD><TITLE>quot; + title +
quot;</TITLE></HEAD>nquot;);
}
}
Não vá nesse barco pois é furado !!!!
Geração dinâmica de HTML é péssimo
O framework JSP é uma solução muito melhor
www.jetsoftware.com.br
8. Ciclo de vida do Servlet
init
Executado uma única vez quando o servlet é carregado.
service
Invocado em uma nova thread pelo servidor para cada requisição.
Despacha para doGet, doPost, etc.
NÃO faça override deste método !
doGet, doPost, doXXX
Trata GET, POST, etc. para requests
Faça override destes métodos para ter o comportamento desejado.
destroy
Invocado quando o servidor deleta a instãncia do servlet
Não é invocado depois de cada requisição.
www.jetsoftware.com.br
9. Por que não devemos fazer
override no método service
O método service faz outras coisas além de
invocar o doGet
Podemos adicionar suporte a outros serviços mais
tarde, adicionando doPut, doTrace, etc.
Pode-se adicionar suporte para modificações de
data adicionando o método getLastModified
O método service nos dá suporte automático a :
HEAD requests
OPTIONS requests
TRACE requests
Alternativa
doPost chamando doGet
www.jetsoftware.com.br
10. Debugando Servlets
Podemos usar declarações println
Apache Log4J
O debugger integrado da IDE
Use debug ao invés de start no servidor
www.jetsoftware.com.br
11. Sumário
O código principal do servlet vai para os métodos
doGet e doPost:
O objeto HttpServletRequest contém as informações de
entrada.
O objeto httpServletReponse permite-nos enviar
informações de saída
Invoque setContentType para especificar o MIME type.
Invoque getWriter para obter um objeto Writer apontando para
o cliente (browser)
Código de setup vai para o init
O Servlet é inicializado e carregado uma única vez
O Servlet é invocado várias vezes
Parâmetros de internacionalização vai no web.xml
www.jetsoftware.com.br