Curso de JavaWeb Instrutores: Rodrigo Cardoso e Maria Carolina

Slides:



Advertisements
Apresentações semelhantes
Desenvolvimento de aplicações Web com J2EE Servlets
Advertisements

Objetos Implícitos Contextuais
Modelo Cliente-Servidor
Projeto de Sistemas de Software
Projeto de Sistemas de Software
Centro Integrado de Tecnologia da Informação
Curso de C/C++ Avançado
Cookies e Sessões Mauro César Lopes. Mecanismos para guardar estados entre requisições HTTP HTTP é um protocolo sem estado Uma requisição é independente.
Prof.: Carlos Hairon R. Gonçalves
Geração Dinâmica de Páginas com JSP Eduardo Martins Guerra Instituto Tecnológico de Aeronáutica Curso de Pós-Graduação em Engenharia de Software Programação.
Model-View-Controller (MVC) em Aplicações Web Eduardo Martins Guerra Desenvolvimento de Soluções WEB.
Desenvolvimento de Soluções WEB Escopos de uma Aplicação Web
Tecnologias para Internet
Desenvolvimento de Projeto e Aplicações Web
Desenvolvimento de Projetos e Aplicações Web
PROGRAMAÇÃO II Prof.: Bruno Rafael de Oliveira Rodrigues.
Aplicativos Web Com Orientação a Objetos
Desenvolvimento WEB I Camila Nunes
+ Java Web XIV Jornada de Cursos. Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra Sob as seguintes.
Capítulo 2 Java Servlets.
Curso básico de PHP 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Servlets: Redirecionamento, Atributos e Sessões
Filtros. O que são Filtros Um filtro é um componente Web que reside no servidor Intercepta as requisições e respostas no seu caminho até o servlet e de.
A autoria - II.
 Muitas aplicações se faz necessário o acompanhamento da navegação do usuário armazenando informações específicas de cada um.  É comum hoje em dia acessarmos.
Programação II Prof.: Bruno Rafael de Oliveira Rodrigues.
Curso de JavaWeb Módulo 1 e 2 Instrutores: Rodrigo Cardoso
+ Curso de C/C++ Aula 8 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Java Avançado Java Servlets Material cedido por: Daniel Arraes Pereira
Gente Autor: Sérgio Soares Servlets. zMódulos de programas em Java zRecebem pedidos, executam o serviço e geram respostas zResidem no servidor zAnálogo.
Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero
Jobson Ronan PEC – Filtros e Sessões Jobson Ronan
Conceitos de J2EE para a WEB
Aula 2 – Primeiros Passos com a arquitetura Web Servidor
Prof. Alexandre Monteiro Recife
Tópicos Especiais J2EE Prof. Cristina Valadares Curso de Ciência da Computação.
1 Servlet Prof. Alexandre Monteiro Recife. Contatos n Prof. Guilherme Alexandre Monteiro Reinaldo n Apelido: Alexandre Cordel n /gtalk:
JSP / Servlets Avançado
JSP e Servlets ISEP – LP2 Filipe Costa – /2004.
Aplicativos Web Com Orientação a Objetos
Aula 2 – Primeiros Passos com a arquitetura Web Servidor Instituto Metodista Izabela Hendrix Curso de Tecnologia em Análise e Desenvolvimento de Sistemas.
Arquitetura das JSP - Aula 2
Aplicações Web com Orientação a Objetos
Aplicativos Web Com Orientação a Objetos – Java Server Pages(JSP) Prof. Odair
JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF Dezembro/2005.
Interface HttpServletResquest
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Programação para Web Unidade 06 – Java Beans e BDs Prof.: Henrique Santos.
Aula 4 Prof. Naércio Filho Técnico em Informática
Unidade 1 – Introdução a J2EE Prof.: Henrique Santos
Tópicos Especiais J2EE Prof. Cristina Valadares Curso de Ciência da Computação.
PEC - JSP Jobson Ronan Objetivos Esta aula apresenta tudo o que é necessário para implementar servlets escrevendo JavaServer Pages.
Projeto Supervisionado no Desenvolvimento de Aplicações Profissionais na Web Introdução a Aplicações Web.
Unidade 5 – Integrando JSP e Servlets Prof.: Henrique Santos
Treinamento PHP Módulo 1 PHP Básico Waelson Negreiros waelson.com.br “Está conosco o Senhor dos Exércitos”
Daniel Garcez de Sousa 07/04/2015. Nesta apresentação abordaremos os conceitos básicos sobre o ciclo de vida de um Servlet e os HTTP servlets. No final.
OBJETIVO Nesta aula será apresentado o desenvolvimento básico sobre HTTP Servlets. Espera-se que, ao final da apresentação, o aluno tenha noções de como.
Programação Distribuída em Java Aula Na aula passada vimos: TomCat –Instalação e configuração –Criação de contexto JSP... uma introdução –Expressões.
Servlets Jobson Ronan Objetivos Aprender  Como escrever um servlet  Como compilar um servlet  Como implantar um servlet no servidor.
Java Server Pages Um estudo de caso para aprendizagem Renata França de Pontes.
Serviços de rede e internet Jackson Eduardo da Silva.
Aplicativos para Internet Prof. Wolley W. Silva
Desenvolvimento WEB II Aula 3 – Conexão com o Banco de Dados
UCSal – Tecnologia em Análise e Desenvolvimento de Sistemas Programação para Aplicações WEB Profa. Semíramis Assis
Desenvolvimento WEB II Continuação AJAX Professora: Kelly de Paula Cunha.
Desenvolvimento WEB II Professora: Kelly de Paula Cunha Apresentação baseada no material didático elaborado pelo Prof. Pasteur Ottoni de Miranda Junior.
Servlets Manoel Neto Objetivos Aprender  Como escrever um servlet  Como compilar um servlet  Como executar Também serão.
Redes de Computadores e Aplicações – Camada de aplicação IGOR ALVES.
Java TM Platform, Enterprise Edition (Java EE) Projeto de Sistemas de Software.
Desenvolvimento de Aplicações Web com Java - Servlets e JSP Autor: Juliano Marcos Martins.
Transcrição da apresentação:

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

copiar, distribuir, exibir e executar a obra criar obras derivadas 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) Executar o serviço solicitado consiste em a partir das informações recebidas e da ação que se deseja realizar, prover a resposta desejada através de ações como por exemplo: acesso a arquivos ou a outras classes Java.

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 Os servlets se localizam entre o browser e o resto da aplicação, funcionando como portas de entrada para a aplicação, pois podem receber requisições externas ao servidor e acessar recursos e BD da aplicação. O que retorna ao browser também é de sua responsabilidade. A comunicação é feita via HTTP. O programa WEB precisa estar disponível em um servidor, chamado Container Web para Java.

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) O modelo dos servlets é muito parecido com os dessas tecnologias citadas, ou seja, obter dados da requisição e utilizá-los para gerar uma resposta ao cliente solicitador da requisição.

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 Criar um Servlet seguindo os passos mostrados. Adicionar ao projeto a classe DadosData.java Codifiquem dentro do método doGet.

Funcionamento de um Servlet

Ciclo de vida de um Servlet Carga de Classe Instanciação Instanciação Instanciação init( ) (...) (...) init( ) pode ser chamado várias vezes, porém o destroy ( ) deve ser executado antes Executado 0 ou mais vezes service( ) destroy( ) Finalização e Garbage Collector

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 Cada fase será detalhada nos slides posteriores

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 O método init funciona como um pseudo-construtor do servlet. A concorrência não existe, pois o método só é executado uma vez, durante a primeira chamada ao servlet.

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 Se inicia quando o servlet fica pronto para receber requisições. Todas as chamadas são direcionadas ao método service, que é responsável por identificar o método da requisição HTTP e chamar o método apropriado do servlet (doGet ou doPost)

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) Os métodos doGet e doPost recebem os mesmo parâmetros do método service. Quando há identificação do uso do protocolo HTTP, esse objetos já são transformados em implementações específicas para esse protocolo, HttpServletRequest e HttpServletResponse.

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() A interface ServletRequest define métodos que dão acesso às informações do cliente e da requisição. Os métodos mais utilizados para acessar parâmetros são: O getParameter é o mais utilizado e serve para obter o valor de um parâmetro da requisição, cujo nome deve ser informado como parâmetro ao método. Retorna null caso não exista um parâmetro na requisição com o nome especificado. O getParameterValues é similar ao anterior, porém é capaz de obter os valores de campos multi-valorados, como check boxes e listas de seleção múltipla. O getParameterNames é um método auxiliar. Serve para obter os nomes dos parâmetros informados na requisição, logo é útil quando não se sabe o nomes do parâmetros.

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>"); O getWriter é utilizado para escrever informações textuais, os quais serão retornados ao cliente O getOutputStream é usado para escrever dados binários ao cliente Já o setContentType escolhe o tipo do que será renderizado ao cliente. Os valores permitidos como parâmetro representam formatos MIME. O padrão é ‘text/plain’, mas alguns deles são os seguintes: text/plain – textos simples text/html – textos html image/gif – imagens no formato gif image/jpg – imagens no formato jpeg application/pdf – documento pdf

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) A extensão de ServletRequest que responde ao protocolo HTTP possui métodos para leitura do cabeçalho, de cookies e para gerenciamento de sessões.

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 A extensão de ServletResponse que responde ao protocolo HTTP possui métodos para escrever cookies, redirecionar chamadas, avisar o cliente que aconteceu um erro, etc.

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. O método destroy é chamado quando o contêiner de servlets decide tirá-lo de execução (por exemplo, para liberar memória).

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 Problemas temporários em servlets podem ser oriundos de disco cheio ou falha no servidor, como má configuração, arquivos corrompidos, memória insuficiente.

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) Alguns serviços WEB necessitam de dados do cliente, os quais não devem ser solicitados a cada requisição, como exemplo login e senha. Porém protocolo HTTP é stateless, ou seja, não mantém estado. Para solucionar tal problema algumas soluções podem ser apontadas.

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. O tempo para que uma sessão se torne inativa pode ser configurável de acordo com a necessidade e restrições da aplicaçã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); O boolean recebido como parâmetro na criação da Session indica a ação caso a sessão ainda não tenha sido criada anteriormente. Se for true, ela é criada nesse momento, caso seja false, não ocorre criação, retornando nulo caso não tenha sido criada anteriormente. O uso do método getSession sem parâmetros é realizado com a chama ao método com parâmetro true. Os objetos que são inseridos na sessão são identificados por um nome, o qual deve ser único. Caso haja inserção de objetos distintos utilizando o mesmo identificador, o que foi inserido depois sobrescreve o que havia sido inserido anteriormente. TipoObjeto objeto = (TipoObjeto) session.getAttribute(“alias”); session.removeAttribute(“alias”);

Sessions: propriedades Enumeration getAttributeNames() boolean isNew() void invalidate() void setMaxInactiveInterval(int segundos) int getMaxInactiveInterval() O método getAttributeNames() retorna os nomes identificadores de todos os objetos inseridos naquela sessão. O método isNew() indica se a sessão é nova para o cliente. Já o invalidate() invalida a sessão e remove todos os objetos associados a ela O método setMaxInactiveInterval define o tempo de expiração das sessões daquele servlet. Caso esse método não seja chamado nunca, o tempo padrão depende do servidor. Para conhecer o tempo de expiração das sessões de um servlet, basta chamar o método getMaxInactiveInterval. Caso retorne -1, as sessões nunca expiram.

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); Caso o parametro passado ao método setMaxAge seja: >0: tempo de vida em segundos =0: apaga o cookie nesse exato momento <0: remove o cookie ao fim da sessão

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. Um Request Dispatching ocorre através da chamada de alguns dos dois métodos citados, os quais recebem os mesmos parâmetros que o método service do 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 } A forma de chamar ambos os métodos é semelhante, porém a diferença está no controle das ações. Quando se realiza um forward, o controle é enviado ao recurso chamado, o que não ocorre quando se realiza um include, quando o controle permanece no servlet chamado inicialmente. 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: Login, validando os dados fornecidos com alguns dos logins válidos. Uma tela de boas vindas ao usuário logado Mostre uma tela com os dados do usuário que acabou de logar. Logout do usuário. Além de tudo isso, valida a existência de uma sessão iniciada. Dicas: utilize HttpSession.

Prática 2

Pratica 2