t picos especiais j2ee n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Tópicos Especiais J2EE PowerPoint Presentation
Download Presentation
Tópicos Especiais J2EE

Loading in 2 Seconds...

play fullscreen
1 / 53
shelagh

Tópicos Especiais J2EE - PowerPoint PPT Presentation

0 Views
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. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

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