1 / 53

Tópicos Especiais J2EE

Tópicos Especiais J2EE. Curso de Ciência da Computação. Prof. Cristina Valadares . Servlets. Curso de Ciência da Computação. Prof. Cristina Valadares . Servlet. Servlets vivem para servir clientes, sua função é receber uma solicitação do cliente e devolver uma resposta

shelagh
Download Presentation

Tópicos Especiais J2EE

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tópicos EspeciaisJ2EE Curso de Ciência da Computação Prof. Cristina Valadares

  2. Servlets Curso de Ciência da Computação Prof. Cristina Valadares

  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. 1 Os três grandes momentos do CiclodeVida • 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

  9. 2 Os três grandes momentos do CiclodeVida • 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.

  10. 3 Os três grandes momentos do CiclodeVida • 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

  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. Método idempotente • O que é idempotente?  Quando pode-se efetuar uma ação repetidamente, sem efeitos colaterais. • POSTnã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

  24. 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().

  25. Utilizando um único parâmetro Formulário HTML

  26. <form method="POST" action="SelectBeer.do"> Select beer characteristics<p> Color: <select name = "color" size="1"> <option>light <option>amber <option>brown <option>dark </select> <br><br> <center> <input type="SUBMIT"> </center> </form>

  27. Utilizando um único parâmetro Solicitação HTTP POST

  28. Utilizando um único parâmetro Classe Servlet

  29. Classe Servlet: trecho de código public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ String colorParam = request.getParameter(“color”); }

  30. Utilizando dois parâmetros Formulário HTML

  31. <form ... <select name = "color" size="1"> <option>light <option>amber <option>brown <option>dark </select> <select name = “taste" size="1"> <option>medium <option>malty <option>heavy </select> <br><br> <center> <input type="SUBMIT"> </center> </form>

  32. Utilizando doisparâmetros Solicitação HTTP POST

  33. Utilizando doisparâmetros Classe Servlet

  34. 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”); }

  35. Além dos parâmetros, o que mais o objeto Request retorna? • As interfaces ServletRequest e HttpServletRequest possui uma série de métodos

  36. 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();

  37. 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();

  38. 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.

  39. 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

  40. 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("text/html"); PrintWriter out = response.getWriter(); out.println("Beer Selection Advice<br>"); String c = request.getParameter("color"); out.println("<br>Got beer color " + c); } }

  41. Stream de saída XJSP • 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

  42. public class CodeReturn extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType(“application/jar"); 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(); } }

  43. Tipos MIMES comuns • text/html • application/pdf • video/quicktime • application/java • image/jpeg • application/jar • aplication/octer-stream • aplication/x-zip

  44. Stream de saída • Existem duas opções para saída: caracteres ou bytes • ServletOutPutStream para bytes • PrinteWriter para dados em caracteres

  45. 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”);

  46. 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.

  47. Configuração e Adiçãode 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.

More Related