java servlets$leomurta/courses/2015.1/dw/aula10.pdfespecificação/ide/implementação$ •...
TRANSCRIPT
![Page 2: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/2.jpg)
Especificação/IDE/Implementação • Esse curso foi preparado em 03/2015 usando a seguinte especificação, IDE e implementação
• Especificação – Java Servlet 3.1 (05/2013, JEE 7) – Java Servlet 3.0 (12/2009, JEE 6)
• IDE – JDK 8u40 – NetBeans 8.0.2 na distribuição Java EE
• Implementação – GlassFish 4.1 (vem no NetBeans)
Leo Murta Servlets 2
![Page 3: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/3.jpg)
Agenda • O que são Servlets? • Arquitetura • Hierarquia • Ciclo de vida • Empacotamento • Passagem de Parâmetros • Concorrência • Armazenamento de dados
– Sessões – Cookies
• Uso de recursos externos
Leo Murta Servlets 3
![Page 4: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/4.jpg)
O que são Servlets ? • Classes Java que estendem funcionalidades de servidores web para geração de conteúdo dinâmico
• Adotam o modelo de programação requisição-‐resposta
• Programação “no lado” do servidor • “Subshtuem” scripts CGI, oferecendo
– Escalabilidade – Portabilidade – Facilidade de desenvolvimento
Leo Murta Servlets 4
![Page 5: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/5.jpg)
Arquitetura • Baseado em arquitetura cliente-‐servidor • Os clientes
– Requisitam uma página ao servidor, passando informações – Recebem a resposta
• O servidor – Trata as conexões (necessita-‐se de controle de concorrência)
– Processa as informações passadas – Gera uma página de retorno
Leo Murta Servlets 5
![Page 6: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/6.jpg)
Arquitetura
Leo Murta Servlets 6
Cliente 1 Container Web ...
Servidor Java EE (ex.: GlassFish)
Cliente n
SGBDs
![Page 7: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/7.jpg)
Hierarquia de Servlets
• Interface Servlet: Fornece um nível primihvo para tratamento de conexões, independentemente de protocolo
• Classe GenericServlet: Implementa a interface Servlet para facilitar futuras heranças
• Classe H,pServlet: Estende a classe GenericServlet para o tratamento de conexões HTTP
Servlet
HttpServlet
GenericServlet
Leo Murta Servlets 7
![Page 8: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/8.jpg)
Ciclo de vida (métodos básicos)
• A interface Servlet define três métodos fundamentais • init
– Será chamado na primeira requisição ao servlet – Deve executar a inicialização do servlet
• service – Será chamado em todas as requisições ao servlet – Deve executar o serviço para o qual o servlet foi projetado
• destroy – Será chamado quando o servlet for destruído (pelo administrador ou por um shutdown do servidor web)
– Deve liberar os recursos alocados pelo servlet
Leo Murta Servlets 8
![Page 9: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/9.jpg)
Ciclo de vida (métodos de tratamento de serviços)
• A classe H2pServlet implementa o método service – Verifica qual serviço HTTP está sendo requisitado – Repassa a chamada para o método específico, que deve ser implementado
pelo desenvolvedor • doGet
– Trata as conexões HTTP GET – Passagem de parâmetros pela URL (visível ao usuário)
• doPost – Trata as conexões HTTP POST – Passagem de parâmetros pelo cabeçalho HTTP (invisível ao usuário)
• doPut – Trata as conexões HTTP PUT
• doDelete – Trata as conexões HTTP DELETE
Leo Murta Servlets 9
![Page 10: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/10.jpg)
Ciclo de vida (argumentos)
• Todos os métodos de tratamento de serviços recebem como argumento objetos que representam a requisição e a resposta
• HTTPServletRequest: – Encapsula a comunicação de chamada, do cliente para o servidor
• HTTPServletResponse – Encapsula a comunicação de retorno, do servidor para o cliente.
Leo Murta Servlets 10
![Page 11: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/11.jpg)
Ciclo de vida (HrpServletRequest)
• Métodos de suporte à coleta de parâmetros do formulário – getParameterNames – getParameter – getParameterValues
• Método de acesso direto à stream de entrada – getInputStream
Leo Murta Servlets 11
![Page 12: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/12.jpg)
Ciclo de vida (HrpServletResponse)
• Método de suporte à escrita da página – getWriter
• Método de acesso direto à stream de saída – getOutputStream
Leo Murta Servlets 12
![Page 13: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/13.jpg)
Ciclo de Vida 1. Container instancia o Servlet 2. Container chama o método init()
do Servlet 3. Container coloca o Servlet
disponível na URL indicada 4. Para cada requisição da URL:
– Container chama o método do...() do Servlet
5. Container chama o método destroy() do Servlet Fonte: Livro Java EE 7:
The Big Picture
Leo Murta Servlets 13
![Page 14: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/14.jpg)
Ciclo de Vida
Fonte: livro Java EE 7: The Big Picture
Leo Murta Servlets 14
![Page 15: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/15.jpg)
Implementando doGet e doPost • Passos
1. Ler os dados da requisição 2. Escrever o header da resposta 3. Obter o PrintWriter para escrita da resposta 4. Escrever a resposta
• Importante – Incluir sempre o hpo de conteúdo no header da resposta
– Sempre definir o hpo de conteúdo antes de começar a escrever a saída
Leo Murta Servlets 15
![Page 16: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/16.jpg)
Exemplo: Alo Mundo import java.io.IOException; import java.io.PrintWriter; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class AloMundoServlet extends HttpServlet { public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<HTML><BODY>"); out.println("<P>Alo Mundo!</P>"); out.println("</BODY></HTML>"); out.close(); } }
Leo Murta Servlets 16
![Page 17: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/17.jpg)
Descritor de Implantação • Via XML
– Arquivo /WEB-‐INF/web.xml – Vantagem de separação de responsabilidades
• Via anotação – Marcações no próprio código fonte – Vantagem de facilidade de manutenção
Leo Murta Servlets 17
![Page 18: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/18.jpg)
Descritor de Implantação (via XML)
• Dois elementos mais usados neste descritor : <servlet> e <servlet-mapping> :
• <servlet> : associa um nome de servlet a seu nome “completo” (fully-‐qualified name)
<servlet> <servlet-name>AloMundo</servlet-name> <servlet-class>AloMundoServlet</servlet-class> </servlet>
• <servlet-mapping> : associa um caminho a um determinado servlet
<servlet-mapping> <servlet-name>AloMundo</servlet-name> <url-pattern>/alomundo</url-pattern> </servlet-mapping>
Leo Murta Servlets 18
![Page 19: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/19.jpg)
Descritor de Implantação (via Anotação)
• Usando a anotação @WebServlet na declaração da classe do Servlet – Caminho relahvo completo (ex: “/MeuServlet”) – Caminho relahvo com wildcard (ex: “/MeuServlet/*”) – Extensão (ex.: “*.jpg”)
• Resolução de conflitos se dá nessa ordem
Leo Murta Servlets 19
![Page 20: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/20.jpg)
Descritor de Implantação (via Anotação)
Leo Murta Servlets 20
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/alomundo") public class AloMundoServlet extends HttpServlet { public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<HTML><BODY>"); out.println("<P>Alo Mundo!</P>"); out.println("</BODY></HTML>"); out.close(); } }
![Page 21: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/21.jpg)
Empacotamento • Arquivo WAR
– WAR = Web Archive – Contém a aplicação web
– Zip com extensão .war
– Deve seguir uma estrutura de diretórios predefinida
Leo Murta Servlets 21
Fonte: livro Java EE 7 Tutorial
![Page 22: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/22.jpg)
Empacotamento • <APLICACAO>/
– Contém páginas HTML estáhcas, jsp, etc • <APLICACAO>/WEB-‐INF/web.xml:
– Descritor de implantação da aplicação – Descreve servlets e outros componentes que conshtuem a aplicação
• <APLICACAO>/WEB-‐INF/classes/: – Contém as classes compiladas JAVA da aplicação (servlets e as demais)
– Se a aplicação está organizada em pacotes, a estrutura de diretórios abaixo deste deve ser respeitada
• <APLICACAO>/WEB-‐INF/lib/: – Contém as bibliotecas (.jar) uhlizadas na aplicação
Leo Murta Servlets 22
![Page 23: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/23.jpg)
Empacotamento
Leo Murta Servlets 23
\exemplo \WEB-INF \classes \meupacote1 TesteServlet.class \meupacote2 \subpacote1 ClasseApoio.class Teste2Servlet.class \lib biblioteca.jar web.xml index.html teste.jsp
![Page 24: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/24.jpg)
Empacotamento (ciclo de trabalho)
Desenvolve (NetBeans)
Empacota Implanta (GlassFish)
Leo Murta Servlets 24
![Page 25: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/25.jpg)
Criando um projeto Web
![Page 26: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/26.jpg)
Criando um projeto Web
![Page 27: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/27.jpg)
Criando um projeto Web
![Page 28: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/28.jpg)
Criando um projeto Web
![Page 29: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/29.jpg)
Criando um projeto Web
Leo Murta Servlets 29
![Page 30: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/30.jpg)
Criando um projeto Web
Leo Murta Servlets 30
![Page 31: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/31.jpg)
Adicionando um Servlet ao projeto
Leo Murta Servlets 31
![Page 32: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/32.jpg)
Adicionando um Servlet ao projeto
Leo Murta Servlets 32
![Page 33: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/33.jpg)
Adicionando um Servlet ao projeto
Leo Murta Servlets 33
![Page 34: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/34.jpg)
Adicionando um Servlet ao projeto
Leo Murta Servlets 34
![Page 35: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/35.jpg)
Exercício • Criar servlet Alo mundo, listando números de 0 a 99 – Criar web.xml em WEB-‐INF, associando o servlet ao endereço hrp://localhost:8080/exercicio/alomundo
– Depois de testar, remover o web.xml e usar a anotação @WebServlet para gerar o mesmo efeito
Leo Murta Servlets 35
![Page 36: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/36.jpg)
Exercício • Fazer um Servlet que informa todas as informações conhdas no header – Usar request.getHeaderNames() para pegar todos os nomes
– Usar request.getHeader(String) para pegar o valor associado a um nome específico
• Atenção: getHeaderNames() retorna um Enumerahon: – hasMoreElements(): retorna true enquanto hver elementos
– nextElement(): retorna o próximo elemento Leo Murta Servlets 36
![Page 37: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/37.jpg)
Passagem de parâmetros • Para acessar os parâmetros em HrpServletRequest
– Enumerahon getParameterNames() • Fornece o nome de todos os parâmetros
– String getParameter(String name)* • Fornece o valor de um dado parâmetro • Caso existam mais de um valor, o primeiro é retornado
– String[] getParameterValues(String name)* • Fornece todos os valores de um dado parâmetro
• * null é retornado caso o parâmetro não exista
Leo Murta Servlets 37
![Page 38: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/38.jpg)
Exercício • Evolua o exercício anterior permihndo que o usuário informe o valor inicial e o valor final da contagem – Via GET, sem formulário hrp://localhost:8080/exemplo/alomundo?inicio=10&fim=30
• Em seguida, faça o mesmo uhlizando POST – Nesse caso, criar formulário e usar o método doPost(...)
• Dica: para transformar String em int, use – int Integer.parseInt(String);
Leo Murta Servlets 38
![Page 39: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/39.jpg)
Concorrência • O Container decide quando instanciar um Servlet
– Pool: múlhplas instâncias ahvas ao mesmo tempo (pool)
– Economia de recursos: nenhuma instância ahva, com instanciação por demanda
• O desenvolvedor deve se preocupar – Com acesso concorrente nos métodos do...() – Em nunca guardar dados em atributos do Servlet
Leo Murta Servlets 39
![Page 40: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/40.jpg)
Concorrência • Java possibilita o uso de threads
– Múlhplas linhas de execução de um mesmo trecho de código
– Para cada chamada a um determinado servlet, é criado uma thread
• É necessário garanhr que regiões críhcas do código serão respeitadas – Somente uma thread deve estar em uma região críhca a cada momento
– A região críhca deve ser demarcada para ser sincronizada Leo Murta Servlets 40
![Page 41: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/41.jpg)
Concorrência Exemplo: Deposito em uma conta bancária:
Deposito 1
Deposito 2
Pega Saldo
Soma 50
Pega Saldo
Soma 30
100 assíncrono:
síncrono:
100 100 150 130
150 150 180
100 100 150 ...
...
Leo Murta Servlets 41
![Page 42: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/42.jpg)
Concorrência • Para garanhr o acesso síncrono a uma região críhca:
– Definia que um determinado método é uma região críhca, através do uso do modificador synchronized no cabeçalho deste método
– Esse método deve conter o mínimo possível de código, para evitar gargalos
– assíncrono: public int deposita(Conta conta, Valor valor); – síncrono: public synchronized int deposita(Conta conta, Valor valor);
Leo Murta Servlets 42
![Page 43: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/43.jpg)
Armazenamento de Dados • É comum precisar armazenar dados para processamento futuro • Campo escondido
– Dado presente na página de retorno do usuário • Sessão
– Entre diferentes interações do usuário – Mesma execução do browser
• Cookie – Entre diferentes sessões do usuário – Diferentes execuções do browser
• Aplicação – Entre diferentes usuários – Mesma execução do servidor de aplicação
• Banco de dados – Entre diferentes execuções do servidor de aplicação
Leo Murta Servlets 43
![Page 44: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/44.jpg)
Campos escondidos • Mecanismo alternahvo de gerenciamento de sessão
– Cada formulário contém campos hidden para transferir as informações de sessão em conjunto com seus controles:
<input type=hidden name=total value=“15”>
– O gerenciamento de sessão funciona mesmo sem cookies!
• Problemas: – O usuário pode alterar o conteúdo dos campos hidden alterando o código HTML das páginas
– Uso não recomendado
Leo Murta Servlets 44
![Page 45: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/45.jpg)
Exercício • Fazer um somatório com monitor de acessos
– Transformar a aplicação anterior em somatório – Mostrar o resultado do somatório – Ao final, listar quantas vezes o usuário uhlizou o serviço
Leo Murta Servlets 45
![Page 46: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/46.jpg)
Exercício • Chamada Formulário com os campos Início (ex.: 1) e Fim (ex.: 4), além do campo hidden.
• Resultado Formulário com os campos Início e Fim, além do campo hidden. O somatório de 1 a 4 é 10. Você usou o serviço 3 vezes.
Leo Murta Servlets 46
![Page 47: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/47.jpg)
Controle de Sessões • Exemplo
– Em um site de comercio eletrônico é necessário permihr que o cliente escolha quais produtos deseja comprar
– Ao termino, tem que ser possível determinar quais produtos foram escolhidos
• O controle de sessões pode ser efetuado através de três mecanismos – Cookie – Parâmetro (URL) – Protocolo SSL
• Decisão do container, transparente para o desenvolvedor
Leo Murta Servlets 47
![Page 48: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/48.jpg)
Controle de Sessões • Método getSession existente no objeto (recebido como parâmetro) da
classe H2pServletRequest. • A chamada ao método getSession deve ser efetuada antes de qualquer
chamada ao método getWriter da classe HrpServletResponse • O método getSession retorna um objeto da classe HrpSession, onde é
possível – Ler todos os atributos armazenados com o método getA2ributeNames() – Armazenar valores, através do método setA2ribute(nome, valor) – Recuperar valores, através do método getA2ribute(nome)
• O método setMaxInacGveInterval da classe HrpSession permite a configuração do tempo máximo de ahvidade de uma seção
• O método invalidate da classe HrpSession permite a finalização da seção
Leo Murta Servlets 48
![Page 49: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/49.jpg)
Controle de Sessões • Exemplo de concatenador
...
HttpSession session = request.getSession();
String textoAntigo = (String)session.getAttribute("texto");
String texto = request.getParameter("texto"); String textoNovo = textoAntigo + texto;
session.setAttribute(“texto”, textoNovo); ...
Leo Murta Servlets 49
![Page 50: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/50.jpg)
Exercício • Repita o exercício anterior usando sessão no lugar de campo escondido
Leo Murta Servlets 50
![Page 51: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/51.jpg)
Cookies • Cookies servem para armazenar por tempo determinado
alguma informação no browser do cliente • Usos mais comuns são para
– Deixar o cliente acessar o sistema sem pedir senha – Memorizar quantas vezes aquele browser já acessou o site – Personalizar propagandas
• Os cookies existentes são acessados através do método getCookies existente no objeto da classe H2pServletRequest
• O método getCookies retorna um array de objetos da classe Cookie – Se nenhum cookie hver sido adicionado até então, retorna null
• Para cada objeto da classe Cookie, é possível recuperar seu valor através do método getValue()
Leo Murta Servlets 51
![Page 52: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/52.jpg)
Cookies • Adição de Cookie no browser do usuário
– Chamar o método addCookie da classe H2pServletResponse, passando como parâmetro o novo cookie (mesmo para cookies já existentes)
– A chamada ao método addCookie deve ser efetuada antes de qualquer chamada ao método getWriter da classe HrpServletResponse
– O método setMaxAge determina por quanto tempo, em segundos, o cookie é válido
– O cookie irá persishr após o encerramento da sessão somente se o setMaxAge hver sido usado
Leo Murta Servlets 52
![Page 53: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/53.jpg)
Cookies • Exemplo de Cookies (concatenador): ... String textoAntigo = ""; Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if ("texto".equals(cookie.getName())) { textoAntigo = cookie.getValue(); } } } String texto = request.getParameter("texto"); String textoNovo = textoAntigo + texto; Cookie cookie = new Cookie("texto", textoNovo); cookie.setMaxAge(3600); response.addCookie(cookie); ...
Leo Murta Servlets 53
![Page 54: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/54.jpg)
Exercício • Repita o exercício anterior informando também o número total de vezes que o usuário uhlizou o serviço
• Resultado O somatório de 1 a 4 é 10. Você usou o serviço 3 vezes nessa sessão. Você usou o serviço 5 vezes nesse browser.
Leo Murta Servlets 54
![Page 55: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/55.jpg)
Sessões x Cookies • Sessões podem fazer uso de cookies
– API de alto nível • Sessões “morrem” quando o browser é fechado • Cookies persistem nas máquinas cliente
Leo Murta Servlets 55
![Page 56: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/56.jpg)
Aplicação • Permite armazenar informações de forma que qualquer thread
de qualquer servlet possa acessar • Objeto do hpo ServletContext Pode ser obhdo de
getServletContext() – Representa o container – Único para todos os Servlets da aplicação
• Guarda um Map de “atributos” onde podem ser escritos/lidos dados temporários dos Servlets – Ler todos os atributos armazenados com o método getA2ributeNames()
– Armazenar valores, através do método setA2ribute(nome, valor) – Recuperar valores, através do método getA2ribute(nome)
• Mesma API do objeto que representa a sessão
Leo Murta Servlets 56
![Page 57: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/57.jpg)
Exercício • Repita o exercício anterior informando também o número total de vezes que qualquer usuário usou o serviço desde que o servidor foi iniciado
• Resultado O somatório de 1 a 4 é 10. Você usou o serviço 3 vezes nessa sessão. Você usou o serviço 5 vezes nesse browser. Esse serviço foi usado 14 vezes desde que o servidor foi iniciado.
Leo Murta Servlets 57
![Page 58: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/58.jpg)
ServletContext vs. HrpSession
Fonte: Livro Java EE 7: The Big Picture Leo Murta Servlets 58
![Page 59: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/59.jpg)
Exercício • Discuhr no grupo quando dados serão armazenados em cookies, sessões, aplicação ou banco de dados no contexto do trabalho final
Leo Murta Servlets 59
![Page 60: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/60.jpg)
Redirecionamento • É possível, em um servlet, acessar paginas HTML, outros servlets, JSP, etc.
• Via método sendRedirect(String) do objeto H2pServletResponse – Passa nova URL ao browser, que acessa novamente o servidor
– A URL muda • Via RequestDispatcher do objeto ServletContext.
– forward(): Encaminha a solicitação internamente, sem que o cliente saiba
– include(): Inclui a saída de outro Servlet e conhnua o processamento do Servlet atual
Leo Murta Servlets 60
![Page 61: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/61.jpg)
Redirecionamento (inclusão)
public class AloMundoRodapeServlet extends HttpServlet { public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML><BODY>"); out.print("<P>Alo Mundo! </P>"); RequestDispatcher dispatcher = getServletContext()
.getRequestDispatcher("/rodape.html"); if (dispatcher != null) dispatcher.include(request, response);
out.println("</BODY></HTML>"); out.close(); } }
Leo Murta Servlets 61
![Page 62: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/62.jpg)
Redirecionamento (encaminhamento)
public class EncaminhadorServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response){ RequestDispatcher dispatcher = getServletContext() .getRequestDispatcher("/encaminhado.htm"); if (dispatcher!=null) dispatcher.forward(request, response); } }
Leo Murta Servlets 62
![Page 63: Java Servlets$leomurta/courses/2015.1/dw/aula10.pdfEspecificação/IDE/Implementação$ • Esse$curso$foi$preparado$em$03/2015$usando$a seguinte$especificação,$IDE$e$implementação$](https://reader033.vdocuments.co/reader033/viewer/2022050119/5f4ff5530901d3156d11d063/html5/thumbnails/63.jpg)
Exercício • Incluir as páginas cabecalho.html e rodape.html no servlet de
somatório • Encaminhar para uma página padrão de erro (erro.html) caso
os parâmetros não tenha sido preenchidos
Leo Murta Servlets 63