Java Servlets. Leonardo Gresta Paulino Murta leomurta@ic.uff.br



Documentos relacionados
Java Servlets. Leonardo Gresta Paulino Murta

Java para Desenvolvimento Web

Java II. Sérgio Luiz Ruivace Cerqueira

Programação II Programação para a Web. Christopher Burrows

Java na WEB Servlet. Sumário

Java para WEB. Servlets

Arquiteturas de Aplicações Web. Leonardo Gresta Paulino Murta

Prof. Roberto Desenvolvimento Web Avançado

Curso de Java. Geração de Páginas WEB. TodososdireitosreservadosKlais

Programação Na Web. Servlets: Como usar as Servlets. Agenda. Template genérico para criar Servlets Servlet 2.4 API

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M

Tecnologias Web. Java Servlets

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP

Desenvolvimento Web TCC Turma A-1

Introdução. Servlet. Ciclo Vida. Servlet. Exemplos. Prof. Enzo Seraphim

Autenticação e Autorização

Java II. Sérgio Luiz Ruivace Cerqueira

Arquitetura de uma Webapp

Programação Web Aula 12 - Java Web Software

Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas)

Fundamentos de Servlets. Conceitos e ciclo de vida Classes e Interfaces da API Exemplos de Servlets

Programação Na Web. Sessão II. Índice. Visão geral da API Sessão. Obter dados sobre uma sessão. Extrair informação sobre uma Sessão

Desenvolvimento WEB II. Professora: Kelly de Paula Cunha

Prof. Fellipe Aleixo

Web Browser como o processo cliente. Servidor web com páginas estáticas Vs. Aplicações dinâmicas para a Web:

20/08/14 JAVA SERVLETS CONCEITOS CONTEÚDO ARQUITETURA DE UMA APLICAÇÃO WEB ARQUITETURA DA APLICAÇÃO WEB

Desenvolvimento Web TCC Turma A-1

Aula 4. Objetivos. Conteúdo dinâmico na internet.

INTRODUÇÃO À TECNOLOGIA SERVLETS

Aula 03 - Projeto Java Web

Prática Sobre Servlets e JSP

J550. Helder da Rocha

Tencologia em Análise e Desenvolvimento de Sistemas Disciplina: WEB I Conteúdo: WEB Container Aula 04

Servlets. João Carlos Pinheiro. Julho / 2005

Programação Web. Professor: Diego Oliveira. Conteúdo 02: JSP e Servlets

Associação Carioca de Ensino Superior Centro Universitário Carioca

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC

Java Server Pages. Arquitectura de uma aplicação distribuída em Internet. Figura 1 Modelo 2

Criando e Entendendo o Primeiro Servlet Por: Raphaela Galhardo Fernandes

JavaServer Pages (JSP) Leonardo Gresta Paulino Murta

Fundamentos da Plataforma Java EE. Prof. Fellipe Aleixo

Java para Desenvolvimento Web

Leonardo Gresta Paulino Murta

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

UNIDADE II JAVA SERVLETS

Tecnologias para Web

Criação de uma aplicação usando Servlets

Servlets e Applets, funcionamento e comparativo.

Desenvolvendo Aplicações Web com Java

Prática em Laboratório N.02 Criando um serviço Web via NetBeans

Alfamídia Programação: Java Web

Scriptlets e Formulários

Servlets & JSP. Prof. Ramon Chiara

Aula 8: Servlets (III)

Objetos Implícitos. Conceito. Instanciados pelo próprio contêiner. Disponíveis em quaisquer páginas JSP.

JSP: JAVA SERVER PAGES

J2EE. Exemplo completo Utilização Servlet. Instrutor HEngholmJr

Tutorial. Começando a Criar Aplicativos SMS

Executando comandos do Sistema Operacional em uma aplicação WEB Java

Tutorial Jogo da Velha WEB

Java Server Pages. O código HTML pode indicar o método de arranque do servlet gerado por um JSP : doget ou dopost.

Laboratórios 5, 6, 7 - Servlets

Programação em Rede. Servlets. Manipulação de dados de input em Servlets

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

J550 Segurança e Controle de erros

Desenvolvimento Web com JSP/Servlets

Curso de Java. Geração de Páginas WEB através de JSP. Todos os direitos reservados Klais

Sessões. Cookies HTTP Sessões Atributos de sessão

JSP e Servlet Princípio de MVC

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

JSP: JAVA SERVER PAGES

Parte I. Demoiselle Mail

JSTL: Uma forma padrão de desenvolver página WEB dinâmica Plácido Antonio de Souza Neto

Desenvolvimento de aplicações Web. Java Server Pages

Programação WEB (JSP + Banco Dados) Eng. Computação Prof. Rodrigo Rocha

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

TUTORIAL JAVA AS - HTTP CLIENT COMPOSITION ENVIROMENT 7.1

Material de apoio a aulas de Desenvolvimento Web. Tutorial Java WEB JSP & HTML & CSS & CLASSE & OBJETOS. AAS -

Javascript Exemplos Objetos

Orientação a Objetos

18/04/2006 Micropagamento F2b Web Services Web rev 00

JSF - Controle de Acesso FERNANDO FREITAS COSTA

TUTORIAL JSP & SERVLET


J820. Testes de interface Web com. HttpUnit. argonavis.com.br. Helder da Rocha

ENTERPRISE JAVABEANS 3. Msc. Daniele Carvalho Oliveira

Aplicações de Linguagem de Programação Orientada a Objeto

Programação para a Internet. Prof. M.Sc. Sílvio Bacalá Jr sbacala@gmail.com

programação de páginas de conteúdo dinâmico

Introdução ao PHP. Prof. Késsia Marchi

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Servlets API. Aplicações web usando recursos da Servlets API no desenvolvimento de aplicações web. Professor J. c o l u n a

Transcrição:

Java Servlets Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Especificação/IDE/Implementação Esse curso foi preparado em 03/2015 usando a seguinte especificação, IDE e implementação Especificação Java Servlet 3.1 (05/2013, JEE 7) Java Servlet 3.0 (12/2009, JEE 6) IDE JDK 8u40 NetBeans 8.0.2 na distribuição Java EE Implementação GlassFish 4.1 (vem no NetBeans) Leo Murta Servlets 2

O que são Servlets? Arquitetura Hierarquia Ciclo de vida Empacotamento Passagem de Parâmetros Concorrência Armazenamento de dados Sessões Cookies Uso de recursos externos Agenda Leo Murta Servlets 3

O que são Servlets? Classes Java que estendem funcionalidades de servidores web para geração de conteúdo dinâmico Adotam o modelo de programação requisição- resposta Programação no lado do servidor Subshtuem scripts CGI, oferecendo Escalabilidade Portabilidade Facilidade de desenvolvimento Leo Murta Servlets 4

Arquitetura Baseado em arquitetura cliente- servidor Os clientes Requisitam uma página ao servidor, passando informações Recebem a resposta O servidor Trata as conexões (necessita- se de controle de concorrência) Processa as informações passadas Gera uma página de retorno. Leo Murta Servlets 5

Arquitetura Cliente 1... Cliente n Container Web Servidor Java EE (ex.: GlassFish) SGBDs Leo Murta Servlets 6

Hierarquia de Servlets Servlet GenericServlet HttpServlet Interface Servlet: Fornece um nível primihvo para tratamento de conexões, independentemente de protocolo Classe GenericServlet: Implementa a interface Servlet para facilitar futuras heranças Classe H,pServlet: Estende a classe GenericServlet para o tratamento de conexões HTTP Leo Murta Servlets 7

Ciclo de vida (métodos básicos) A interface Servlet define três métodos fundamentais init Será chamado na primeira requisição ao servlet Deve executar a inicialização do servlet service Será chamado em todas as requisições ao servlet Deve executar o serviço para o qual o servlet foi projetado destroy Será chamado quando o servlet for destruído (pelo administrador ou por um shutdown do servidor web) Deve liberar os recursos alocados pelo servlet Leo Murta Servlets 8

Ciclo de vida (métodos de tratamento de serviços) A classe H2pServlet implementa o método service Verifica qual serviço HTTP está sendo requisitado Repassa a chamada para o método específico, que deve ser implementado pelo desenvolvedor doget Trata as conexões HTTP GET Passagem de parâmetros pela URL (visível ao usuário) dopost Trata as conexões HTTP POST Passagem de parâmetros pelo cabeçalho HTTP (invisível ao usuário) doput Trata as conexões HTTP PUT dodelete Trata as conexões HTTP DELETE Leo Murta Servlets 9

Ciclo de vida (argumentos) Todos os métodos de tratamento de serviços recebem como argumento objetos que representam a requisição e a resposta HTTPServletRequest: Encapsula a comunicação de chamada, do cliente para o servidor HTTPServletResponse Encapsula a comunicação de retorno, do servidor para o cliente. Leo Murta Servlets 10

Ciclo de vida (HrpServletRequest) Métodos de suporte à coleta de parâmetros do formulário getparameternames getparameter getparametervalues Método de acesso direto à stream de entrada getinputstream Leo Murta Servlets 11

Ciclo de vida (HrpServletResponse) Método de suporte à escrita da página getwriter Método de acesso direto à stream de saúda getoutputstream Leo Murta Servlets 12

Ciclo de Vida 1. Container instancia o Servlet 2. Container chama o método init() do Servlet 3. Container coloca o Servlet disponível na URL indicada 4. Para cada requisição da URL: Container chama o método do...() do Servlet 5. Container chama o método destroy() do Servlet Fonte: Livro Java EE 7: The Big Picture Leo Murta Servlets 13

Ciclo de Vida Fonte: livro Java EE 7: The Big Picture Leo Murta Servlets 14

Implementando doget e dopost Passos 1. Ler os dados da requisição 2. Escrever o header da resposta 3. Obter o PrintWriter para escrita da resposta 4. Escrever a resposta Importante Incluir sempre o hpo de conteúdo no header da resposta Sempre definir o hpo de conteúdo antes de começar a escrever a saída Leo Murta Servlets 15

Exemplo: Alo Mundo import java.io.ioexception; import java.io.printwriter; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; public class AloMundoServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException { response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<html><body>"); out.println("<p>alo Mundo!</P>"); out.println("</body></html>"); out.close(); } } Leo Murta Servlets 16

Via XML Descritor de Implantação Arquivo /WEB- INF/web.xml Vantagem de separação de responsabilidades Via anotação Marcações no próprio código fonte Vantagem de facilidade de manutenção Leo Murta Servlets 17

Descritor de Implantação (via XML) Dois elementos mais usados neste descritor : <servlet> e <servlet-mapping> : <servlet> : associa um nome de servlet a seu nome completo (fully- qualified name) <servlet> <servlet-name>alomundo</servlet-name> <servlet-class>alomundoservlet</servlet-class> </servlet> <servlet-mapping> : associa um caminho a um determinado servlet <servlet-mapping> <servlet-name>alomundo</servlet-name> <url-pattern>/alomundo</url-pattern> </servlet-mapping> Leo Murta Servlets 18

Descritor de Implantação (via Anotação) Usando a anotação @WebServlet na declaração da classe do Servlet Caminho relahvo completo (ex: /MeuServlet ) Caminho relahvo com wildcard (ex: /MeuServlet/* ) Extensão (ex.: *.jpg ) Resolução de conflitos se dá nessa ordem Leo Murta Servlets 19

Descritor de Implantação (via Anotação) import java.io.ioexception; import java.io.printwriter; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; @WebServlet("/alomundo") public class AloMundoServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException { response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<html><body>"); out.println("<p>alo Mundo!</P>"); out.println("</body></html>"); out.close(); } } Leo Murta Servlets 20

Arquivo WAR WAR = Web Archive Contém a aplicação web Zip com extensão.war Deve seguir uma estrutura de diretórios predefinida Empacotamento Fonte: livro Java EE 7 Tutorial Leo Murta Servlets 21

Empacotamento <APLICACAO>/ Contém páginas HTML estáhcas, jsp, etc <APLICACAO>/WEB- INF/web.xml: Descritor de implantação da aplicação Descreve servlets e outros componentes que conshtuem a aplicação <APLICACAO>/WEB- INF/classes/: Contém as classes compiladas JAVA da aplicação (servlets e as demais) Se a aplicação está organizada em pacotes, a estrutura de diretórios abaixo deste deve ser respeitada <APLICACAO>/WEB- INF/lib/: Contém as bibliotecas (.jar) uhlizadas na aplicação Leo Murta Servlets 22

Empacotamento \exemplo \WEB-INF \classes \meupacote1 TesteServlet.class \meupacote2 \subpacote1 ClasseApoio.class Teste2Servlet.class \lib biblioteca.jar web.xml index.html teste.jsp Leo Murta Servlets 23

Empacotamento (ciclo de trabalho) Desenvolve (NetBeans) Empacota (Maven) Implanta (GlassFish) Leo Murta Servlets 24

Exercício Criar servlet Alo mundo, listando números de 0 a 99 Criar web.xml em WEB- INF, associando o servlet ao endereço hrp://localhost:8080/exercicio/alomundo Depois de testar, remover o web.xml e usar a anotação @WebServlet para gerar o mesmo efeito Leo Murta Servlets 25

Exercício Fazer um Servlet que informa todas as informações conhdas no header Usar request.getheadernames() para pegar todos os nomes Usar request.getheader(string) para pegar o valor associado a um nome específico Leo Murta Servlets 26

Passagem de parâmetros Para acessar os parâmetros em HrpServletRequest Enumerahon getparameternames() Fornece o nome de todos os parâmetros String getparameter(string name)* Fornece o valor de um dado parâmetro Caso existam mais de um valor, o primeiro é retornado String[] getparametervalues(string name)* Fornece todos os valores de um dado parâmetro * null é retornado caso o parâmetro não exista. Leo Murta Servlets 27

Exercício Evolua o exercício anterior permihndo que o usuário informe o valor inicial e o valor final da contagem Via GET, sem formulário hrp://localhost:8080/exemplo/ alomundo?inicio=10&fim=30 Em seguida, faça o mesmo uhlizando POST Nesse caso, criar formulário e usar o método dopost(...) Dica: para transformar String em int, use int Integer.parseInt(String); Leo Murta Servlets 28

Concorrência O Container decide quando instanciar um Servlet Pool: múlhplas instâncias ahvas ao mesmo tempo (pool) Economia de recursos: nenhuma instância ahva, com instanciação por demanda O desenvolvedor deve se preocupar Com acesso concorrente nos métodos do...() Em nunca guardar dados em atributos do Servlet Leo Murta Servlets 29

Concorrência Java possibilita o uso de threads Múlhplas linhas de execução de um mesmo trecho de código Para cada chamada a um determinado servlet, é criado uma thread É necessário garanhr que regiões críhcas do código serão respeitadas Somente uma thread deve estar em uma região críhca a cada momento A região críhca deve ser demarcada para ser sincronizada Leo Murta Servlets 30

Concorrência Exemplo: Deposito em uma conta bancária: Deposito 1 Pega Saldo Soma 50 Deposito 2 Pega Saldo Soma 30 assíncrono: 100 100 100 150 130 síncrono: 100 100 150...... 150 150 180 Leo Murta Servlets 31

Concorrência Para garanhr o acesso síncrono a uma região críhca: Definia que um determinado método é uma região críhca, através do uso do modificador synchronized no cabeçalho deste método Esse método deve conter o mínimo possível de código, para evitar gargalos assíncrono: public int deposita(conta conta, Valor valor); síncrono: public synchronized int deposita(conta conta, Valor valor); Leo Murta Servlets 32

Armazenamento de Dados É comum precisar armazenar dados para processamento futuro Campo escondido Dado presente na página de retorno do usuário Sessão Entre diferentes interações do usuário Mesma execução do browser Cookie Entre diferentes sessões do usuário Diferentes execuções do browser Aplicação Entre diferentes usuários Mesma execução do servidor de aplicação Banco de dados Entre diferentes execuções do servidor de aplicação Leo Murta Servlets 33

Campos escondidos Mecanismo alternahvo de gerenciamento de sessão Cada formulário contém campos hidden para transferir as informações de sessão em conjunto com seus controles: <input type=hidden name=total value= 15 > O gerenciamento de sessão funciona mesmo sem cookies! Problemas: O usuário pode alterar o conteúdo dos campos hidden alterando o código HTML das páginas Uso não recomendado Leo Murta Servlets 34

Exercício Fazer um somatório com monitor de acessos Transformar a aplicação anterior em somatório Mostrar o resultado do somatório Ao final, listar quantas vezes o usuário uhlizou o serviço Leo Murta Servlets 35

Exercício Chamada hrp://localhost:8080/exemplo/somatorio?inicio=1&fim=4 Resultado O somatório de 1 a 4 é 10. Você usou o serviço 3 vezes. Leo Murta Servlets 36

Controle de Sessões Exemplo Em um site de comercio eletrônico é necessário permihr que o cliente escolha quais produtos deseja comprar Ao termino, tem que ser possível determinar quais produtos foram escolhidos O controle de sessões pode ser efetuado através de três mecanismos Cookie Parâmetro (URL) Protocolo SSL Decisão do container, transparente para o desenvolvedor Leo Murta Servlets 37

Controle de Sessões Método getsession existente no objeto (recebido como parâmetro) da classe H2pServletRequest. A chamada ao método getsession deve ser efetuada antes de qualquer chamada ao método getwriter da classe HrpServletResponse O método getsession retorna um objeto da classe HrpSession, onde é possível Ler todos os atributos armazenados com o método geta2ributenames() Armazenar valores, através do método seta2ribute(nome, valor) Recuperar valores, através do método geta2ribute(nome) O método setmaxinacgveinterval da classe HrpSession permite a configuração do tempo máximo de ahvidade de uma seção O método invalidate da classe HrpSession permite a finalização da seção Leo Murta Servlets 38

Controle de Sessões Exemplo de concatenador... HttpSession session = request.getsession(); String texto = request.getparameter( texto"); if (texto!= null) { String textoantigo = (String)session.getAttribute( texto ); }... String textonovo = textoantigo + texto; session.setattribute( texto, textonovo); Leo Murta Servlets 39

Exercício Repita o exercício anterior usando sessão no lugar de campo escondido Leo Murta Servlets 40

Cookies Cookies servem para armazenar por tempo determinado alguma informação no browser do cliente Usos mais comuns são para Deixar o cliente acessar o sistema sem pedir senha Memorizar quantas vezes aquele browser já acessou o site Personalizar propagandas Os cookies existentes são acessados através do método getcookies existente no objeto da classe H2pServletRequest O método getcookies retorna um array de objetos da classe Cookie Para cada opjeto da classe Cookie, é possível Armazenar valores, através do método setvalue(string) Recuperar valores, através do método getvalue() Leo Murta Servlets 41

Cookies Adição de Cookie no browser do usuário Chamar o método addcookie da classe H2pServletResponse, passando como parâmetro o novo cookie A chamada ao método addcookie deve ser efetuada antes de qualquer chamada ao método getwriter da classe HrpServletResponse O método setmaxage determina por quanto tempo, em segundos, o cookie é válido Leo Murta Servlets 42

Cookies Exemplo de Cookies (concatenador):... Cookie[] cookies = request.getcookies(); String textoantigo = ; for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookie.getname().equals( texto )) textoantigo = cookie.getvalue(); } String texto = request.getparameter( texto"); String textonovo = textoantigo + texto; Cookie cookie = new Cookie( texto, textonovo); response.addcookie(cookie);... Leo Murta Servlets 43

Exercício Repita o exercício anterior informando também o número total de vezes que o usuário uhlizou o serviço Resultado O somatório de 1 a 4 é 10. Você usou o serviço 3 vezes nessa sessão. Você usou o serviço 5 vezes nesse browser. Leo Murta Servlets 44

Sessões x Cookies Sessões podem fazer uso de cookies API de alto nível Sessões morrem quando o browser é fechado Cookies persistem nas máquinas cliente Leo Murta Servlets 45

Aplicação Permite armazenar informações de forma que qualquer thread de qualquer servlet possa acessar Objeto do hpo ServletContext Pode ser obhdo de request.getservletcontext() Representa o container Único para todos os Servlets da aplicação Guarda um Map de atributos onde podem ser escritos/lidos dados temporários dos Servlets Ler todos os atributos armazenados com o método geta2ributenames() Armazenar valores, através do método seta2ribute(nome, valor) Recuperar valores, através do método geta2ribute(nome) Mesma API do objeto que representa a sessão Leo Murta Servlets 46

Exercício Repita o exercício anterior informando também o número total de vezes que qualquer usuário usou o serviço desde que o servidor foi iniciado Resultado O somatório de 1 a 4 é 10. Você usou o serviço 3 vezes nessa sessão. Você usou o serviço 5 vezes nesse browser. Esse serviço foi usado 14 vezes desde que o servidor foi iniciado. Leo Murta Servlets 47

ServletContext vs. HrpSession Fonte: Livro Java EE 7: The Big Picture Leo Murta Servlets 48

Exercício Discuhr inicialmente no grupo quando dados serão armazenados em cookies, sessões, aplicação ou banco de dados no contexto do trabalho final Apresentar para os outros grupos as situações que esse elementos serão uhlizados Leo Murta Servlets 49

Redirecionamento É possível, em um servlet, acessar paginas HTML, outros servlets, JSP, etc. Via método sendredirect(string) do objeto H2pServletResponse Passa nova URL ao browser, que acessa novamente o servidor A URL muda Via RequestDispatcher do objeto ServletContext. forward(): Encaminha a solicitação internamente, sem que o cliente saiba include(): Inclui a saída de outro Servlet e conhnua o processamento do Servlet atual Leo Murta Servlets 50

Redirecionamento (inclusão) public class AloMundoRodapeServlet extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<html><body>"); out.print("<p>alo Mundo! </P>"); RequestDispatcher dispatcher = getservletcontext().getrequestdispatcher("/rodape.html"); if (dispatcher!= null) dispatcher.include(request, response); out.println("</body></html>"); out.close(); } } Leo Murta Servlets 51

Redirecionamento (encaminhamento) public class EncaminhadorServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response){ RequestDispatcher encaminhador = request.getrequestdispatcher("/encaminhado.htm"); if(encaminhador!=null) encaminhador.forward(request, response); } } Leo Murta Servlets 52

Exercício Incluir as páginas cabecalho.html e rodape.html no servlet de somatório Encaminhar para uma página padrão de erro (erro.html) caso os parâmetros não tenha sido preenchidos Leo Murta Servlets 53

Java Servlets Leonardo Gresta Paulino Murta leomurta@ic.uff.br