+ curso de javaweb instrutores: rodrigo cardoso e maria carolina material por: rodrigo cardoso...
TRANSCRIPT
+
Curso de JavaWeb
Instrutores: Rodrigo Cardoso e Maria Carolina
Material por: Rodrigo Cardoso ([email protected])
Maria Carolina ([email protected])
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
+
Servlets
+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)
+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.
+Funcionamento básico
+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)
+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
+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
+Exemplo de Servlet
+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.
+
Funcionamento de um Servlet
+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
(...) (...)
+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
+ 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
+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
+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)
+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()
+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>");
+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)
+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
+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.
+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
+
Mantendo estado entre requisições
Uso de session e cookies
+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)
+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.
+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”);
+Sessions: propriedades
Enumeration getAttributeNames()
boolean isNew()
void invalidate()
void setMaxInactiveInterval(int segundos)
int getMaxInactiveInterval()
+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);
+
Colaboração entre Servlets
+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.
+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}
+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.
+Prática 2
+Pratica 2