Your SlideShare is downloading. ×

Te servelts

751
views

Published on

Published in: Technology, Education

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
751
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Tópicos Especiais J2EE Prof. Cristina Valadares Curso de Ciência da Computação
  • 2. Servlets Prof. Cristina Valadares Curso de Ciência da Computação
  • 3. 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
  • 4. 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() )
  • 5. Servlet
    • Figura da página 64
  • 6. O Servlet herda os métodos do ciclo de vida
  • 7.
    • Figura da página 65 apenas explicações
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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.
  • 12. 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
  • 13. Cada solicitação executa em uma thread separada
  • 14. 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?
  • 15. Inicialização do Servlet:
    • Quando um objeto torna-se um Servlet
  • 16. Solicitação & Resposta A chave de tudo, e os argumentos para o service()
  • 17.
    • Figura da página 70
  • 18. 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 .
  • 19. 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.
  • 20. 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
  • 21. 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
  • 22. NENHUM corpo, apenas a informação do header
  • 23.  
  • 24. 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
  • 25. 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().
  • 26. Utilizando um único parâmetro Formulário HTML
  • 27.
    • <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>
  • 28. Utilizando um único parâmetro Solicitação HTTP POST
  • 29.  
  • 30. Utilizando um único parâmetro Classe Servlet
  • 31. Classe Servlet: trecho de código
    • public void doPost(HttpServletRequest request, HttpServletResponse response)
    • throws IOException, ServletException{
    • String colorParam = request.getParameter(“color”);
    • }
  • 32. Utilizando dois parâmetros Formulário HTML
  • 33.
    • <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>
  • 34. Utilizando dois parâmetros Solicitação HTTP POST
  • 35.  
  • 36. Utilizando dois parâmetros Classe Servlet
  • 37. 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”);
    • }
  • 38. Além dos parâmetros, o que mais o objeto Request retorna?
    • As interfaces ServletRequest e HttpServletRequest possui uma série de métodos
  • 39. 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();
  • 40. 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();
  • 41. 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.
  • 42. 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
  • 43.
    • 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);
    • }
    • }
  • 44. 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
  • 45.
    • 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();
    • }
    • }
  • 46. Tipos MIMES comuns
    • text/html
    • application/pdf
    • video/quicktime
    • application/java
    • image/jpeg
    • application/jar
    • aplication/octer-stream
    • aplication/x-zip
  • 47. Stream de saída
    • Existem duas opções para saída: caracteres ou bytes
      • ServletOutPutStream para bytes
      • PrinteWriter para dados em caracteres
  • 48. 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”);
  • 49. 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.
  • 50. 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.
  • 51. 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)
  • 52. 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”);
  • 53. 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