+ Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso...

35
+ Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso ([email protected] ) Maria Carolina ([email protected] )

Transcript of + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso...

Page 1: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+

Curso de JavaWeb

Instrutores: Rodrigo Cardoso e Maria Carolina

Material por: Rodrigo Cardoso ([email protected])

Maria Carolina ([email protected])

Page 2: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra

Sob as seguintes condições: Atribuição. Você deve dar crédito ao autor original, da forma

especificada pelo autor ou licenciante. Compartilhamento pela mesma Licença. Se você alterar, transformar, ou

criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta.

Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra.

Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor.

Veja aqui a licença completa

Page 3: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+

Servlets

Page 4: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Introdução a Servlets

Extensões do Servidor Web em Java

Componentes disponibilizados no servidor, responsáveis por aceitar pedidos, executar o serviço solicitado e gerar respostas.

Funcionam independente do browser

Uso: Processar e armazenar dados submetidos por um formulário

HTML; Acesso dinâmico (ex: consulta ao banco de dados)

Page 5: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Introdução a Servlets

São programas (leia-se classe) Java Segurança, robustez, multiplataforma.

Alta performance Máquina virtual no servidor. Carregados na memória apenas uma vez, no momento em que se

der a primeira requisição. Não são carregados pela rede, pois apenas parâmetros trafegam.

Podem: Acessar cookies e controlar sessão do usuário.

Page 6: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Funcionamento básico

Page 7: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Informações adicionais

Tecnologias semelhantes JSP CGI (PERL, shells, C) ASP (Tecnologia Microsoft) PHP

Acesso aos servlets Diretamente da URL (uso de GET) Através de formulários HTML (uso de POST)

Page 8: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Passos essenciais

Toda classe Java que seja um servlet deve: Estender de HttpServlet Redefinir métodos doGet e/ou doPost

Ler parâmetros, processá-los e fazer validações Instanciar classes auxiliares e básicas Gerar resposta ao cliente

Page 9: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Classes e interfaces importantes

HttpServlet

ServletRequest Contém o que é passado na requisição do cliente ao servidor Informa sobre o protocolo, IP do cliente, parâmetros e corpo

ServletResponse O que servidor retorna ao cliente

HttpServletRequest e HttpServletResponse Comunicação específica para HTTP

Page 10: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Exemplo de Servlet

Page 11: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Prática 1

1. Criar um Servlet seguindo os passos mostrados.

2. Adicionar ao projeto a classe DadosData.java

3. Codifiquem dentro do método doGet.

Page 12: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+

Funcionamento de um Servlet

Page 13: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Ciclo de vida de um Servlet

Carga de Classe

Instanciação

init( )

service( )

destroy( )

Finalização e Garbage Collector

Executado 0 ou mais vezes

init( ) pode ser chamado várias vezes, porém o destroy ( ) deve ser executado antes

InstanciaçãoInstanciação

(...) (...)

Page 14: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Fases

Inicialização Acontece na primeira vez em que a instância do servlet é chamada

Serviço Acontece entre as outras duas Atende a todas as requisições

Destruição O servlet é removido do container

Page 15: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+ Fase de inicialização

public void init(ServletConfig cfg)

Não há problema de concorrência

Útil para fazer inicializações simples ou demoradas. Ler arquivos Criar threads Alocar conexões com a base de dados

Page 16: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Fase de serviço

public void service (ServletRequest req, ServletResponse res)

Trata todas as solicitações do servlet

Método chamado várias vezes, porém apenas uma vez para cada requisição.

Pode ser chamado simultaneamente por várias threads. O desenvolvedor tem a responsabilidade de controlar acesso

simultâneos a recursos compartilhados

Page 17: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Fase de serviço

Os pedidos chegam através do parâmetro do tipo ServletRequest

As respostas são enviadas ao cliente através do parâmetro do tipo ServletResponse

No caso do uso de HTTP, usa-se extensões destes objetos: HttpServletRequest e HttpServletResponse. O método service encaminha para outros dois métodos: public void doGet(HttpServletRequest req, HttpServletResponse

resp) public void doPost (HttpServletRequest req, HttpServletResponse

resp)

Page 18: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Fase de serviço: ServletRequest

Traz informações úteis: Dados do cliente Dados da URL Dados do conteúdo Parâmetros fornecidos pelo usuário

Acessar parâmetros String getParameter(String) String[] getParameterValues(String) Enumeration getParameterNames()

Page 19: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Fase de serviço: ServletResponse

Encapsula a resposta do servlet

Como usar:

Métodos mais comuns: PrintWriter getWriter() ServletOutputStream getOutputStream() void setContentType(String) – chamado antes dos outros dois.

response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<HTML><BODY>Bom Dia!</BODY></HTML>");

Page 20: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Fase de serviço: HttpServletRequest

Métodos para leitura do cabeçalho HTTP getServletPath(), getPathInfo(), getMethod(), getQueryString(),

getRemoteUser(), getAuthType(), getHeader(String name)

Método para leitura de cookies Cookie[] getCookies()

Método para gerenciamento de sessões HttpSession getSession(boolean create)

Page 21: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Fase de serviço: HttpServletResponse

Envia código de status ou de erros ao cliente Contém constantes para identificar códigos de status

(ex: int HttpServletResponse .SC_NOT_FOUND = 404)

Usado para: Escrever cookies Manipular cabeçalhos HTTP Redirecionar o cliente

Page 22: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Fase de destruição

public void destroy()

Método chamado quando todas as chamadas a service() forem completadas ou após um tempo ocioso.

Usado para fechar os recursos abertos na fase de inicialização

Após a execução desse método, o servlet pode sofrer garbage collection a qualquer momento.

Page 23: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Exceções levantadas

Exceções mais relevantes para servlets: ServletException

Falha geral no servlet

UnavailableException Permanentemente: só solucionada pelo administrador Temporariamente: problemas podem ser corrigidos com o tempo

IOException

O container é capaz de tratar e apresentar páginas de erro específicas para as exceções acima e RuntimeException. Qualquer outra exceção causa a queda do container

Page 24: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+

Mantendo estado entre requisições

Uso de session e cookies

Page 25: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Manter estado

Necessidade Guardar informações entre requisições de um mesmo cliente

Problema HTTP não mantém estado

Soluções Campos ocultos em formulários (hidden) Cookies Sessões (HttpSession)

Page 26: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Sessions

Utilizados no lado do servidor

Pode-se armazenar objetos Java

Um por cliente (não por servlet)

Expira após algum tempo inativo

Implementados pela classe HttpSession ou através de Cookies ou reescrita de URLs. Pode ser acessada via request quando usada a primeira opção.

Page 27: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Sessions

Operações básicas: Criação da session

Inserção de um objeto na session

Acesso a um objeto na session

Remoção de um objeto da session

HttpSession session = req.getSession(true);

session.setAttibute(“alias”, objeto);

TipoObjeto objeto = (TipoObjeto) session.getAttribute(“alias”);

session.removeAttribute(“alias”);

Page 28: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Sessions: propriedades

Enumeration getAttributeNames()

boolean isNew()

void invalidate()

void setMaxInactiveInterval(int segundos)

int getMaxInactiveInterval()

Page 29: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Cookies

Dados permanentes mantidos num browser do cliente entre múltiplas sessões.

Diferentemente da session, cada cookie representa um par e não uma coleção de pares nome-valor.

Por padrão, existem enquanto a sessão do browser existir. Mas pode-se usar o médodo setMaxAge(int)

Cookie cookie = new Cookie(“alias”, “valor”);response.addCookie(cookie);

Page 30: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+

Colaboração entre Servlets

Page 31: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Colaboração entre Servlets

Divisão de tarefas entre Servlets Um servlet inicia o processamento de uma requisição e repassa a

outro servlet

Mecanismo utilizado: “Request Dispatching” forward(...): passa para outro servlet, JSP ou página HTML. O

receptor da chamada é responsável por produzir a resposta ao cliente

include(...): passa os dados para processamento ou produção de conteúdo, mas o controle é mantido no próprio servlet.

Page 32: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Colaboração entre Servlets

forward

include

ServletContext sc = this.getServletContext();RequestDispatcher rd = sc.getRequestDispatcher(“/OutroServlet”);try {

rd.forward(request,response);} catch (Exception ex) {

// Tratar aqui qualquer possível exceção}

ServletContext sc = this.getServletContext();RequestDispatcher rd = sc.getRequestDispatcher(“/OutroServlet”);try {

rd.include (request,response);} catch (Exception ex) {

// Tratar aqui qualquer possível exceção}

Page 33: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Prática 2

Utilizando os conceitos vistos até agora, criar uma aplicação que realize:1. Login, validando os dados fornecidos com alguns dos logins

válidos.2. Uma tela de boas vindas ao usuário logado3. Mostre uma tela com os dados do usuário que acabou de logar.4. Logout do usuário.5. Além de tudo isso, valida a existência de uma sessão iniciada.

Dicas: utilize HttpSession.

Page 34: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Prática 2

Page 35: + Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina Material por: Rodrigo Cardoso (rcaa2@cin.ufpe.br)rcaa2@cin.ufpe.br Maria Carolina (mcts@cin.ufpe.br)mcts@cin.ufpe.br.

+Pratica 2