Java - CIC/UnBjhcf/MyBooks/itjava/slides/Servlets...Servlet Context Visão do Servlet Engine Passada...
Transcript of Java - CIC/UnBjhcf/MyBooks/itjava/slides/Servlets...Servlet Context Visão do Servlet Engine Passada...
JavaTM ServletsJava e Engenharia de Software Orientada a Objetos
por Jorge H. C. Fernandes([email protected])Julho de 1999
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Objetivos desta Aula
�Descrever o modelo computacional de Servlets�Comparar Servlets com CGI �Criar e executar pequenos servlets�Compreender a arquitetura de aplicações de
médio e grande porte usando servlets
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Referências
�Sun Microsystems�Servlet Tutorial �http://java.sun.com/products/servlet/index.html�JSDK 2.1�JSDK 2.0
�RFCs (Requests for Comments)�RFC 2616 (2068) Hypertext Transfer Protocol
(HTTP/1.1) �Repositório
⌧http://info.internet.isi.edu/7c/in-notes/rfc/.cache
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Conteúdo
�O que é e para quê [serve]2 lets?�CGI versus Servlets�O ciclo de vida de servlets�Características avançadas�Programação de servlets�Execução de servlets
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
O que é um Servlet?
�Módulo de software - Orientados a Objetos - que estende servidores Web
�Vantagens na substituição de CGI scripts�Orientados a objetos�Processos persistem após atendimento do
pedido�Tratamento de sessões�API Java
⌧Independente de plataforma
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Para que [Serve]2 lets?
�Substituição de CGI Scripts�Independente de plataforma
�Repassando pedidos�Arquiteturas multi-camadas
�Colaboração entre pessoas�Uso compartilhado de um mesmo módulo
por vários clientes
CGI versus Servlets
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
NomeAnoMod
FormulárioNomeAnoMod
Sepia1997999.999
FormulárioCGIscript
Web ServerWWW(HTTP)
Web Browser
CGI e Formulários HTML
CGIscript
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Um CGI Script em PERL#!/usr/local/bin/perl## hello world escrito por jhcf#print "Content-Type: text/html\n";print "\n";print "<HTML>\n";print "<HEAD><TITLE>Hello World</TITLE></HEAD>\n";print "<BODY>\n";print "<H1>Hello World</H1>\n";print "</BODY>\n";print "</HTML>\n";exit;
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
NomeAnoMod
FormulárioNomeAnoMod
Sepia1997999.999
Formulário
Web Server
WWW(HTTP)
Web Browser
Servlets e Formulários HTML
Servlet Engine
Um Servlet Simples
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
public class SimpleServlet extends HttpServlet { public void doGet (HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
PrintWriter out;String title = ”Hello World Servlet";
// set content type and other response header fields firstresponse.setContentType("text/html");
// then write the data of the responseout = response.getWriter();
out.println("<HTML>");out.println("<HEAD><TITLE>”+title+"</TITLE></HEAD>”);out.println("<BODY>");out.println("<H1>" + title + "</H1>");out.println("</BODY>");out.println("<HTML>");out.close();
}}
O Ciclo de Vida de Servlets
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Ciclo de Vida de Servlets
MeuServlet
1 - Instanciação
newnewnew
2 - Carga3 - Inicialização4 - Serviço5 - Remoção
Servlet Engine
destroy()
init(ServletConfig config)
service(Request, Response)
MeuServlet1MeuServlet2MeuServlet3
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Instanciação e Carga
�Feita durante o startup do servidor, ou sob demanda, quando o servidor necessita do servlet
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Inicializaçãopublic void init(ServletConfig config) {..}
�Durante a inicialização o servlet deve:�Ler dados persistentes�Estabeceler conexões JDBC ou com outros recursos
�ServletConfig�Implementado pelo servlet engine (servlet runner)�contém
⌧Conjunto de pares (nome, valor) que fazem parte da configuração do servidor
⌧ServletContext
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Tratamento de Pedidospublic void service(ServletRequest, ServletResponse) {..}
�ServletRequest - parâmetros enviados pelo cliente�Método do protocolo (GET, POST, HEAD, etc)�Cabecalho do pedido�Corpo do Pedido
⌧Dados de formulário
�ServletResponse�Cabecalho da resposta
⌧status code, etc
�Corpo da resposta⌧HTML, etc
Desenvolvimento de Servlets
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Multithreading e Mapping
�Por default, todos os servlets são multithreaded�SingleModelInterface - single threads servlets
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Servlets Mapping
� Um URL em um servlet/index.html -> HelloServlet
� Um servlet para atender todos URLs de um subdiretório/download/ -> DownloadServlet
� Um servlet para todos URLs com uma terminação*.thtml -> TextGeneratorServlet
� Um URL que é o nome do servlet/servlet/LocalTimeServlet
� Um URL com o nome da classe do servlet a ser carregado/servlet/br.com.cesar.TesteServlet
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Servlet Context
�Visão do Servlet Engine�Passada ao Servlet durante sua inicialização
�Acesso ao logger de eventos�Obtenção de outros recursos e objetos
�Outros servlets no mesmo host
�Cada servlet recebe um contexto , mas um mesmo servidor pode passar contextos diferentes para servlets diferentes (ex: hosts virtuais)
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Sessões HTTP
�HTTP 1.0/1.1 é um protocolo stateless�Servlets oferecem uma API simples que
permite fazer o trace de sessões
�HttpSession�Clientes podem criar novas sessões ou se
religar-se a uma sessão já existente�Ligação entre objetos e sessões
⌧Objetos ligados a sessões podem ser notificados através da interface HttpSessionBindingListener
Usando o JSDK 2.1
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Exemplos Contidos no JSDK2.1
�HelloWorld�RequestInfo�RequestHeaders�RequestParameters�Cookies�Sessions
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Exercício
�Instale o JSDK 2.1 e execute os exemplos�Veja o código dos servlets�Crie e instale o seu servlet HelloWorld
API Servlets 2.1
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Pacotes e Classes
�javax.servlet�RequestDispatcher�Servlet�ServletConfig�ServletContext�ServletRequest�ServletResponse�SingleThredModel�GenericServlet�ServletInputStream�ServletOutputStream�ServletException�UnavailableException
�javax.servlet.http�HttpServletRequest �HttpServletResponse �HttpSession �HttpSessionBindingListe
ner �HttpSessionContext �Cookie �HttpServlet �HttpSessionBindingEven
t �HttpUtils
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
HttpServlet
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Interface javax.servlet.Servlet
void destroy() Remove o servlet após todos os threads dentro deste serviço
terem acabados, ou após um período de timeoutServletConfig getServletConfig()
Retorna um objeto (ServletConfig) que contém parâmetros de inicialização
String getServletInfo()Retorna um string com informação sobre o servlet (autor, versão
e copyright)void init(ServletConfig config)
Inicializa o servlet o o coloca em serviçovoid service(ServletRequest req, ServletResponse res)
Solicita ao servlet o atendimento de um pedido
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
public abstract class GenericServletextends java.lang.Objectimplements Servlet, ServletConfig, java.io.Serializable
void destroy() {..}java.lang.String getInitParameter(java.lang.String name) {..}java.util.Enumeration getInitParameterNames() {..}ServletConfig getServletConfig() {..}ServletContext getServletContext() {..}java.lang.String getServletInfo() {..}void init() {..}void init(ServletConfig config) {..}void log(java.lang.String msg) {..}void log(java.lang.String message, java.lang.Throwable t) {..}abstract void service(ServletRequest req, ServletResponse res) {..}
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
HttpServlet
Atendimento aos métodos do HTTPprotected void doDelete(HttpServletRequest req, HttpServletResponse
resp)protected void doGet(HttpServletRequest req, HttpServletResponse resp)protected void doOptions(HttpServletRequest req, HttpServletResponse
resp) protected void doPost(HttpServletRequest req, HttpServletResponse resp)protected void doPut(HttpServletRequest req, HttpServletResponse resp)protected void doTrace(HttpServletRequest req, HttpServletResponse
resp)
protected long getLastModified(HttpServletRequest req)protected void service(HttpServletRequest req, HttpServletResponse
resp)void service(ServletRequest req, ServletResponse res)
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Exemplos Contidos no Java Tutorial (JDSK 2.0)
� CatalogServlet� Busca de livros postos a
venda� CatalogServlet
� Comprar um livro colocando-o em um carrinho de compras
� Sessão, Cookies� BookDetailServlet
� Ver mais informações sobre um livro específico
�GET� Chamando um servlet de
outro servlet� BookDBServlet
�Gerenciar a base da dados de livros
� Inicialização e Destruição
� ShowCartServlet� Ver a lista de livros
selecionados para compra� ShowCartServlet
� Remover um ou mais livros do carrinho
� Lendo Cookies� CashierServlet
� Efetivamente comprar os livros no caixa
� ReceiptServlet� Receber um obrigado pela
compra� POST� SingleThreaded� Invalidar Sessão
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Exercício
�Instale o JSDK 2.0�Execute e compreenda o exemplo
bookstore
Dicas do Tutorial Java
Inicializando e Destruindo Servlets
Inicialização de Servlets
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Servlet initialization
�Regras na construção do método init�Se um erro de inicialização ocorrer, de modo
que o servlet fique incapacitado, levante ums UnavailableException. ⌧Ex: incapacidade de abrir conexões de rede.
�Não chamar System.exit()�Salvar o parâmetro ServletConfig de modo
que o método getServletConfig possa retornar o valor.
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
public class BookDBServlet ... {
private BookstoreDB books;
public void init(ServletConfig config) throws ServletException {
// Store the ServletConfig object and log the initializationsuper.init(config);
// Load the database to prepare for requestsbooks = new BookstoreDB();
}...
}
Destruindo um Servlet
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
public class BookDBServlet extends GenericServlet {
private BookstoreDB books;
... // the init method
public void destroy() {// Allow the database to be garbage collectedbooks = null;
}}
Aspectos Avançados do Gerenciamento de Servlets
Clean Shutdown
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Técnicas para shutdown de Servlets
�Manter controle de quantos threads estão correntemente executando método service
�Notificar serviços que demoram e aguardar um tempo para que eles acabar de forma organizada
�Serviços demorados devem periodicamente verificar se o servidor pediu para que eles sejam destruídos, de modo que eles possam parar e o servidor possa encerrar.
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Controle de Threads Ativos
public ShutdownExample extends HttpServlet {private int serviceCounter = 0;...//Access methods for serviceCounterprotected synchronized void enteringServiceMethod() {serviceCounter++;}protected synchronized void leavingServiceMethod() {
serviceCounter--;}protected synchronized int numServices() {return serviceCounter;}
}
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Controle de Threads Ativos
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException{enteringServiceMethod();try {
super.service(req, resp);} finally {
leavingServiceMethod();}
}
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Clean Shutdown
public ShutdownExample extends HttpServlet {private boolean shuttingDown;...//Access methods for shuttingDownprotected setShuttingDown(boolean flag) {shuttingDown = flag;}protected boolean isShuttingDown() {return shuttingDown;}
}
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Verificando Clean Shutdownpublic void destroy() {
/* Check to see whether there are still service methods running,* and if there are, tell them to stop. */
if (numServices() > 0) {setShuttingDown(true);}
/* Wait for the service methods to stop. */while(numServices() > 0) {
try {Thread.sleep(interval);
} catch (InterruptedException e) {}
}}
Java e Engenharia de Software Orientada a Objetos. Copyright © 1999, Jorge H. C. Fernandes ([email protected])
Exercícios
�Crie o servlet ContaBancária e o integre com o formulário HTML de manipulação de contas bancárias
FIM