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

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

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

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

Tópicos Especiais J2EE

Prof. Cristina Valadares

Curso de Ciência da Computação

Page 2: 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

Page 3: Tópicos Especiais J2EE 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

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

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

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

Servlet

Figura da página 64

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

O Servlet herda os métodos do ciclo de vida

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

Figura da página 65 apenas explicações

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

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

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

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

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

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

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

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.

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

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

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

Cada solicitação executa em uma thread separada

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

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?

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

Inicialização do Servlet: Quando um objeto torna-se um Servlet

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

Solicitação & Resposta

A chave de tudo, e os argumentos para o service()

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

Figura da página 70

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

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.

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

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.

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

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

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

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

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

NENHUM corpo, apenas a informação

do header

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

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

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

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

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

Utilizando um único parâmetro

Formulário HTML

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

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

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

Utilizando um único parâmetro

Solicitação HTTP POST

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

Utilizando um único parâmetro

Classe Servlet

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

Classe Servlet: trecho de código

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException{

String colorParam = request.getParameter(“color”);

}

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

Utilizando dois parâmetros

Formulário HTML

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

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

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

Utilizando doisparâmetros

Solicitação HTTP POST

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

Utilizando doisparâmetros

Classe Servlet

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

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

}

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

Além dos parâmetros, o que mais o objeto Request retorna?

As interfaces ServletRequest e HttpServletRequest possui uma série de métodos

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

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

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

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

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

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.

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

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

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

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); }}

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

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

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

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(); }}

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

Tipos MIMES comuns

text/html application/pdf video/quicktime application/java image/jpeg application/jar aplication/octer-stream aplication/x-zip

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

Stream de saída Existem duas opções para saída:

caracteres ou bytes ServletOutPutStream para bytes PrinteWriter para dados em

caracteres

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

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

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

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.

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

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.

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

Redirecionamentoda 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)

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

Redirecionamentoda 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”);

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

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 = clienteDispatch = servidor