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

Upload: internet

Post on 21-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

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