A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Tópicos Especiais J2EE Prof. Cristina Valadares Curso de Ciência da Computação."— Transcrição da apresentação:

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 solicitação resposta Servlets vivem para servir clientes, sua função é receber uma solicitação do cliente e devolver uma resposta solicitação A solicitação traz consigo dados cruciais e o código do Servlet tem que saber como encontrá- los e utilizá-los resposta 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 herda O Servlet herda os métodos do ciclo de vida

7 Figura da página 65 apenas explicações

8 CiclodeVida Os três grandes momentos do Ciclo de Vida init(): Quando é chamado? 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. 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? Para que Serve? Possibilita que o servlet seja inicializado antes de tratar qualquer solicitação do cliente Possibilita que o servlet seja inicializado antes de tratar qualquer solicitação do cliente Pode ser anulado? Pode ser anulado? Possivelmente Possivelmente 1

9 CiclodeVida Os três grandes momentos do Ciclo de Vida service(): Quando é chamado? Quando é chamado? Quando chega a primeira solicitação do cliente, o container inicia uma nova thread, fazendo com que o método seja ativado. 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? Para que Serve? Analisa a solicitação, determina o método HTTP (GET OU POST), e chama o respectivo: doGet(), ou o doPost(). Analisa a solicitação, determina o método HTTP (GET OU POST), e chama o respectivo: doGet(), ou o doPost(). Pode ser anulado? Pode ser anulado? Não! Não se pode anulá-lo manualmente. Não! Não se pode anulá-lo manualmente. 2

10 CiclodeVida Os três grandes momentos do Ciclo de Vida doGet() e/ou doPost(): Quando é chamado? Quando é chamado? O método service() faz a chamada baseado no método HTTP da solicitação. O método service() faz a chamada baseado no método HTTP da solicitação. Para que Serve? 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. 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? 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 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 doGet() doPost() Método doGet() & doPost() doGet() doPost() Cada vez que os métodos doGet() & doPost() executam, eles executam em threads separadas service() O método service() é sempre chamado em sua própria pilha.

12 thread Cada solicitação executa em uma thread separada Servlet Não existem várias instâncias de nenhuma classe Servlet threads 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 thread 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: 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 HttpServletRequest HttpServletResponse ServletRequest ServletResponse HttpServlet GenericServlet 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 Servlet Protocolos HTTP: mundo Servlet 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 Servlet 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 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. PUTHEADGET PUT, HEAD e GET são considerados idempotentes

25 O que determina a solicitação GET ou POST? Um hiperlink simples method = ‘POST’ Dentro da tag do form indicação da utilização de: method = ‘POST’ GET 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

Select beer characteristics Color: name = "color" light amber brown dark

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

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? plataforma A plataforma do cliente e a informação do browser: String cliente = request.getHeader(“User-Agent”); cookies Os cookies associados a este cliente: Cookie[] cookies = request.getCookies();

40 Além dos parâmetros, o que mais o objeto Request retorna? sessão A sessão associada a este cliente: HttpSession sessao = request.getSession(); método HTTP Os método HTTP da solicitação: String metodo = request.getMethod(); strea A strea de dados da solicitação: InputStream entrada = request.getInputStream();

41 Métodos getServerPort(): getServerPort(): para qual porta a solicitação foi enviada getLocalPort(): getLocalPort(): onde a solicitação foi parar getRemotePort(): 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() Writer stream Tipicamente utiliza-se o objeto de resposta para conseguir um stream de saída (Writer), e utiliza-se o stream para escrever o HTML I/O output, 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("text/html"); PrintWriter out = response.getWriter(); PrintWriter out = response.getWriter(); out.println("Beer Selection Advice "); String c = request.getParameter("color"); out.println(" Got beer color " + c); }

44 StreamXJSP 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"); 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 text/html application/pdf application/pdf video/quicktime video/quicktime application/java application/java image/jpeg image/jpeg application/jar application/jar aplication/octer-stream aplication/octer-stream aplication/x-zip aplication/x-zip

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

48 Stream Stream de saída PrintWriter PrintWriter: exemplo Usado para exibir dados de texto para um stream de caracteres. É utilizado para tratar dados em caractere. PrintWritergetWriter() PrintWriter writer = response.getWriter(); println writer.println(“algum texto e html”);

49 Stream Stream de saída OutPutStream OutPutStream: exemplo Usado para escrever qualquer coisa ServletOutPutStream ServletOutPutStream out = getOutPutStream() response.getOutPutStream(); out.writer(umArrayDeBytes); NOTA: 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”): setHeader(“nomeHeader”, “tipoHeader”): sobrescreve o valor do header existente. OBS: OBS: quando o método setContentType(“text/html”) é chamado, é a mesma coisa que:setHeader(“content-type”,”text/html”); addHeader(“nomeHeader”, “tipoHeader”): 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 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 sendRedirect() 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 else response.sendRedirect(“http://www.ufla.br”);

53 Request Dispatch X Redirecionamento Request Dispatch Request Dispatch acontece no lado servidor, pois outro componente no lado servidor executa o trabalho Redirecionamento Redirecionamento faz o cliente executar o trabalho Redirecionamento = cliente Dispatch = servidor


Carregar ppt "Tópicos Especiais J2EE Prof. Cristina Valadares Curso de Ciência da Computação."

Apresentações semelhantes


Anúncios Google