• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Te servelts
 

Te servelts

on

  • 979 views

 

Statistics

Views

Total Views
979
Views on SlideShare
979
Embed Views
0

Actions

Likes
0
Downloads
19
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Te servelts Te servelts Presentation Transcript

    • Tópicos Especiais J2EE Prof. Cristina Valadares Curso de Ciência da Computação
    • Servlets Prof. Cristina Valadares Curso de Ciência da Computação
    • Servlet
      • Servlets vivem para servir clientes, sua função é receber uma solicitação do cliente e devolver uma resposta
        • A solicitação traz consigo dados cruciais e o código do Servlet tem que saber como encontrá-los e utilizá-los
        • A resposta , leva a informação que o browser precisa para montar uma página, e o código do Servlet tem que saber como enviá-los
    • Servlet
      • Servlets são controlados pelo container, porém, a vida do Servlet não é só isso
      • O ciclo de vida do Servlet é simples:
        • Existe apenas um estado principal: Inicializado
        • Se o Servlet não está inicializado (executando o construtor ou método init() ), ou está sendo inicializado ou sendo destruído (executando destroy() )
    • Servlet
      • Figura da página 64
    • O Servlet herda os métodos do ciclo de vida
      • Figura da página 65 apenas explicações
    • Os três grandes momentos do Ciclo de Vida
      • init():
        • Quando é chamado?
          • O container chama o init() na instância servlet depois que a instância servlet foi criada, porém, antes que sirva a qualquer solicitação do cliente.
        • Para que Serve?
          • Possibilita que o servlet seja inicializado antes de tratar qualquer solicitação do cliente
        • Pode ser anulado?
          • Possivelmente
      1
    • Os três grandes momentos do Ciclo de Vida
      • service():
        • Quando é chamado?
          • Quando chega a primeira solicitação do cliente, o container inicia uma nova thread , fazendo com que o método seja ativado.
        • Para que Serve?
          • Analisa a solicitação, determina o método HTTP (GET OU POST), e chama o respectivo: doGet(), ou o doPost().
        • Pode ser anulado?
          • Não! Não se pode anulá-lo manualmente.
      2
    • Os três grandes momentos do Ciclo de Vida
      • doGet() e/ou doPost():
        • Quando é chamado?
          • O método service() faz a chamada baseado no método HTTP da solicitação.
        • Para que Serve?
          • A implementação do código começa aqui! Este método é responsável por tudo que esperamos que a aplicação faça.
        • Pode ser anulado?
          • Sempre, pelo menos um deles! Aquele que anular irá informar ao container que o servlet não dá suporte a determinadas solicitações
      3
    • Método doGet() & doPost()
      • Cada vez que os métodos doGet() & doPost() executam, eles executam em threads separadas
      • O método service() é sempre chamado em sua própria pilha.
    • Cada solicitação executa em uma thread separada
      • Não existem várias instâncias de nenhuma classe Servlet
      • O container executa várias threads para processar as várias solicitações para um único Servlet
        • Cada solicitação do cliente gera um novo par de objetos de solicitação e resposta
    • Cada solicitação executa em uma thread separada
    • Perguntar não ofende!
      • Pergunta:
        • O que acontece se o mesmo cliente fizer várias solicitações?
        • E se o container usar cluster e distribuir a aplicação em mais de uma JVM?
    • Inicialização do Servlet:
      • Quando um objeto torna-se um Servlet
    • Solicitação & Resposta A chave de tudo, e os argumentos para o service()
      • Figura da página 70
    • Solicitação & Resposta
      • O HttpServletRequest e o HttpServletResponse são extensões do ServletRequest e do ServletResponse , e que a maior parte da implementação de um HttpServlet vem, de fato, do GenericServlet .
    • Protocolos HTTP: mundo Servlet
      • No mundo Servlet , só interessam o GET e o POST , porém, é interessante saber os outros métodos HTTP.
      • GET: pede para obter alguma coisa (recurso/arquivo) na URL requisitada;
      • POST: pede para o servidor aceitar a informação do corpo anexada na solicitação, e a entrega para aquilo que consta na URL.
    • Protocolos HTTP: mundo Servlet
      • HEAD: pede apenas a parte do header daquilo que o GET vai retornar. É como o GET, mas sem corpo na resposta. Informa a URL requisitada sem de fato retornar a coisa;
      • TRACE: solicita um loopback da mensagem de solicitação, para que o cliente veja o que está sendo recebido do outro lado;
      • PUT: diz para colocar a informação anexada (o corpo) na URL requisitada;
      • DELETE: diz para apagar alguma coisa (recurso/arquivo) na URL requisitada;
      • OPTIONS: solicita uma lista de métodos HTTP para os quais a solicitação na URL requisitada pode responder
      • CONNECT: diz para conectar
    • A diferença entre o GET & o POST Diferença: tamanho, segurança e bookmark, GET: obtém coisas e não altera nada no servidor, POST: envia dados para serem processados
    • NENHUM corpo, apenas a informação do header
    •  
    • Método idempotente
      • O que é idempotente?  Quando pode-se efetuar uma ação repetidamente, sem efeitos colaterais.
        • POST não é idempotente: os dados submetidos em seu corpo podem ser destinados a uma transação que não pode ser desfeita.
          • Cabe ao programador ter certeza que a lógica de programação da aplicação esteja correta.
        • PUT , HEAD e GET são considerados idempotentes
    • O que determina a solicitação GET ou POST?
      • Um hiperlink simples
      • Dentro da tag do form indicação da utilização de: method = ‘POST’
      • GET é o padrão
      • Exemplo: formulário html onde se esquece da chamada a POST, e no Servlet, existe a implementação do método doPost().
    • Utilizando um único parâmetro Formulário HTML
      • <form method=&quot;POST&quot;
      • action=&quot;SelectBeer.do&quot;>
      • Select beer characteristics<p>
      • Color:
      • <select name = &quot;color&quot; size=&quot;1&quot;>
      • <option>light
      • <option>amber
      • <option>brown
      • <option>dark
      • </select>
      • <br><br>
      • <center>
      • <input type=&quot;SUBMIT&quot;>
      • </center>
      • </form>
    • Utilizando um único parâmetro Solicitação HTTP POST
    •  
    • Utilizando um único parâmetro Classe Servlet
    • Classe Servlet: trecho de código
      • public void doPost(HttpServletRequest request, HttpServletResponse response)
      • throws IOException, ServletException{
      • String colorParam = request.getParameter(“color”);
      • }
    • Utilizando dois parâmetros Formulário HTML
      • <form ...
      • <select name = &quot;color&quot; size=&quot;1&quot;>
      • <option>light
      • <option>amber
      • <option>brown
      • <option>dark
      • </select>
      • <select name = “taste&quot; size=&quot;1&quot;>
      • <option>medium
      • <option>malty
      • <option>heavy
      • </select>
      • <br><br>
      • <center>
      • <input type=&quot;SUBMIT&quot;>
      • </center>
      • </form>
    • Utilizando dois parâmetros Solicitação HTTP POST
    •  
    • Utilizando dois parâmetros Classe Servlet
    • Classe Servlet: trecho de código
      • public void doPost(HttpServletRequest request, HttpServletResponse response)
      • throws IOException, ServletException{
      • String colorParam = request.getParameter(“color”);
      • String tasteParam = request.getParameter(“taste”);
      • }
    • Além dos parâmetros, o que mais o objeto Request retorna?
      • As interfaces ServletRequest e HttpServletRequest possui uma série de métodos
    • Além dos parâmetros, o que mais o objeto Request retorna?
      • A plataforma do cliente e a informação do browser:
      • String cliente = request.getHeader(“User-Agent”);
      • Os cookies associados a este cliente:
      • Cookie[] cookies = request.getCookies();
    • Além dos parâmetros, o que mais o objeto Request retorna?
      • A sessão associada a este cliente:
      • HttpSession sessao = request.getSession();
      • Os método HTTP da solicitação:
      • String metodo = request.getMethod();
      • A strea de dados da solicitação:
      • InputStream entrada = request.getInputStream();
    • Métodos
      • getServerPort(): para qual porta a solicitação foi enviada
      • getLocalPort(): onde a solicitação foi parar
      • getRemotePort(): o cliente é remoto em relação ao servidor, obtém a porta do cliente.
    • Resposta
      • São chamados dois métodos na resposta: setContentType() e getWriter()
      • Tipicamente utiliza-se o objeto de resposta para conseguir um stream de saída ( Writer ), e utiliza-se o stream para escrever o HTML
      • O objeto de resposta possui outros métodos além do I/O output , podendo também configurar o header, enviar erros e adicionar cookies
      • import javax.servlet.*;
      • import javax.servlet.http.*;
      • import java.io.*;
      • public class BeerSelect extends HttpServlet {
      • public void doPost(HttpServletRequest request, HttpServletResponse response)
      • throws IOException, ServletException{
      • response.setContentType(&quot;text/html&quot;);
      • PrintWriter out = response.getWriter();
      • out.println(&quot;Beer Selection Advice<br>&quot;);
      • String c = request.getParameter(&quot;color&quot;);
      • out.println(&quot;<br>Got beer color &quot; + c);
      • }
      • }
    • Stream de saída X JSP
      • O correto é utilizar páginas JSP para retornar ao usuário a resposta
      • Porém pode acontecer de ter que trabalhar a stream de saída:
        • 1º) Provedor pode não suportar JSP
        • 2º) Não é só HTML que uma resposta deve retornar, pode-se retornar outras coisas! Utilização do stream de saída
      • public class CodeReturn extends HttpServlet {
      • public void doPost(HttpServletRequest request, HttpServletResponse response)
      • throws IOException, ServletException{
      • response.setContentType(“application/jar&quot;);
      • ServletContext ctx = getServletContext();
      • InputStream is = ctx.getResourceAsStream(“/bookCode.jar”);
      • int read = 0;
      • byte[] bytes = new byte[1024];
      • OutPutStream os = response.getOutPutStream();
      • while((read = is.read(bytes)) != -1)
      • os.write(bytes, 0, read);
      • os.flush();
      • os.close();
      • }
      • }
    • Tipos MIMES comuns
      • text/html
      • application/pdf
      • video/quicktime
      • application/java
      • image/jpeg
      • application/jar
      • aplication/octer-stream
      • aplication/x-zip
    • Stream de saída
      • Existem duas opções para saída: caracteres ou bytes
        • ServletOutPutStream para bytes
        • PrinteWriter para dados em caracteres
    • Stream de saída
      • PrintWriter : exemplo
      • Usado para exibir dados de texto para um stream de caracteres. É utilizado para tratar dados em caractere.
      PrintWriter writer = response. getWriter() ; writer. println (“algum texto e html”);
    • Stream de saída
      • OutPutStream : exemplo
      • Usado para escrever qualquer coisa
      ServletOutPutStream out = response. getOutPutStream() ; out.writer(umArrayDeBytes); NOTA: o PrintWriter empacota o ServletOutPutStream, ele possui uma referência para o ServletOutPutStream, adicionando métodos de alto nível para tratar caracteres.
    • Configuração e Adição de Headers de resposta
      • setHeader(“nomeHeader”, “tipoHeader”):
      • sobrescreve o valor do header existente.
      • OBS: quando o método setContentType(“text/html”)
      • é chamado, é a mesma coisa que:
      • setHeader(“content-type”,”text/html”);
      • addHeader(“nomeHeader”, “tipoHeader”):
      • adiciona um novo valor de header.
    • Redirecionamento da Resposta
      • Pode-se decidir que algo diferente trate a resposta para a sua solicitação.
        • Redirecionando a solicitação para uma URL completamente diferente, ou despachá-la para algum outro componente da sua aplicação (geralmente um JSP)
    • Redirecionamento da Resposta
        • O redirecionamento deixa o Servlet “aliviado” . Após perceber que ele não poderá desempenhar o trabalho o Servlet chama o método sendRedirect()
      if (Se o trabalho for para o Servlet){ // O Servlet trata a solicitação } else response.sendRedirect(“http://www.ufla.br”);
    • Request Dispatch X Redirecionamento
      • Request Dispatch acontece no lado servidor, pois outro componente no lado servidor executa o trabalho
      • Redirecionamento faz o cliente executar o trabalho
      • Redirecionamento = cliente
      • Dispatch = servidor