Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – [email protected]@gmail.com.

50
Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – [email protected]

Transcript of Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – [email protected]@gmail.com.

Page 1: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

Desenvolvimento de Projeto e Aplicações

WebCeça Moraes – [email protected]

Page 2: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 2

Conteúdo

Servlets

Page 3: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 3

Servlets

Módulos de programas em Java Pacote javax.servlets incluídos na especificação da J2EE

Recebem pedidos, executam o serviço e geram respostas paradigma request-response

Residem no servidor Grande uso na geração de

conteúdo dinâmico na web Baseados em CGI

Page 4: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 4

CGI – Common Gateway Interface

Especificação de transferência de informações entre um servidor Web e um programa

Um programa CGI pode ser escrito em linguagens de programação: C, Perl, Java, or Visual Basic.

Maneira usual de fazer o servidor Web interagir dinamicamente com o cliente

Page 5: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 5

CGI – Common Gateway Interface

Exemplo: Formulário HTML usando um

programa CGI no servidor para processar os dados digitados

Métodos HTTP GET: linha de comando. POST: entrada/saída padrão e

sem limite de caracteres.

Page 6: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 6

Formulários

Interface HTML para a entrada de dados pelo usuário (cliente)

<FORM> define um bloco de formulário. ACTION: a URL do programa CGI METHOD, o método do protocolo HTTP

Objetos do formulário: INPUT, SELECT, TEXTAREA NAME identifica uma variável VALUE identifica valor armazenado.

Page 7: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 7

Gateways CGI para SGBDs

Converte comandos de formulário HTML para a linguagem sistema de banco de dados.

Converte respostas do SGBD p/ HTML

Cliente

Page 8: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 8

Servlets Cria threads para cada requisição

Web.

Page 9: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 9

Arquitetura

Servidor Web

Container Servlet

Context

Page 10: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 10

Características

Servlets não têm GUI Rodam no servidor e não no

cliente Não são carregados pela

rede Máquina virtual está no

servidor (e não no Browser)Mais eficiente, mais completa

e mais confiável

Page 11: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 11

Ciclo de vida de servlets

• service(): Recebe e processa as requisições

• pedidos GET são repassados para o método doGet()

•pedidos POST são repassados para o método doPost()

Page 12: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 12

Implementação Simples

Herdar da classe HttpServlet

Redefinir métodos doGet() e doPost() para implementar os serviços

Page 13: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 13

Implementação Simples

Dentro dos métodos doGet()/doPost(), ler parâmetros vindos do formulário HTML ou da URL

Processar os parâmetros, fazer validações, executar lógica de negócio e montar a reposta para o usuário

Page 14: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 14

Acesso aos servlets

Diretamente através da URLhttp://www.faculdademarista.com.br/servlet/ServletPgto? matr=“2312"&valor=1000

Page 15: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

15

Acesso aos servlets

Através de formulários HTML Pode escolher métodos GET ou POST Passagem de parâmetros automática Exemplo:<form method=“POST” action=“http://www.faculdademarista.com.br/servlet/ServletPgto”>

<input type=“text” name=“matr” value=“2312”>

<input type=“text” name=“valor” size=“1000”>

<input type=“submit” ></form>

Page 16: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 16

Acesso aos servlets

Page 17: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 17

Classes e Interfaces básicas

Interface Servlet Métodos para gerenciar servlets

Classe GenericServlet Implementa interface Servlet

HttpServlet Estende GenericServlet Acrescenta funcionalidade

específica para o protocolo HTTP

Servlet<<Interface>>

GenericServlet

HttpServlet<<interface>>

Page 18: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 18

Classes e Interfaces básicas

ServletRequest Conteúdo que é passado do

cliente para o servidor ServletResponse

O que o servidor retorna para o cliente

HttpServletRequest, HttpServletResponse Estendem ServletRequest e ServletResponse

Comunicação específica para o protocolo HTTP

Page 19: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 19

HttpServlet

Fornece um framework para lidar com o protocolo HTTP

Introduz suas próprias subclasses de request e response para lidar com o protocolo HTTP HTTPServletRequest e HTTPServletResponse

Page 20: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 20

HttpServlet: recebendo dados

getQueryString Retorna um String url-encoded:

nome=Fernando&credibilidade=0

Obtenção dos parâmetros getParameter getParameterValues getParameterNames

Page 21: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 21

HttpServlet: Exemploimport javax.servlet.*;import java.io.*;

public class ServletHelloWorld extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

PrintWriter out = res.getWriter(); out.println("<HEAD><TITLE>Primeiro”); out.println(“Servlet</TITLE></HEAD>"); out.println("<BODY>"); out.println("<center><h1>Hello World!</h1><center>"); out.println("</BODY>"); out.close(); }}

Page 22: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 22

HttpServlet: Exemplo

Page 23: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 23

Fase de serviço: service()

Os dados da requisição chegam ao servlet através de um objeto do tipo ServletRequest

A requisição pode ser respondidada através de um objeto do tipo ServletResponse

Protocolo HTTP, os objetos usados são instâncias de HttpServletRequest e HttpServletResponse

Page 24: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

24

ServletRequest

Métodos para obter: Informações do

cliente Informações da URL Parâmetros

fornecidos pelo usuário

ServletRequest

+ getAttribute(s : String) : Object+ getAttributeNames() : Enumeration+ getCharacterEncoding() : String+ getContentLength() : int+ getContentType() : String+ getInputStream() : ServletInputStream+ getLocale() : Locale+ getLocales() : Enumeration+ getParameter(s : String) : String+ getParameterNames() : Enumeration+ getParameterValues(s : String) : String[]+ getProtocol() : String+ getReader() : BufferedReader+ getRealPath(s : String) : String+ getRemoteAddr() : String+ getRemoteHost() : String+ getRequestDispatcher(s : String) : RequestDispatcher+ getScheme() : String+ getServerName() : String+ getServerPort() : int+ isSecure() : boolean+ removeAttribute(s : String) : void+ setAttribute(s : String, obj : Object) : void

<<Interface>>ServletRequest

+ getAttribute(s : String) : Object+ getAttributeNames() : Enumeration+ getCharacterEncoding() : String+ getContentLength() : int+ getContentType() : String+ getInputStream() : ServletInputStream+ getLocale() : Locale+ getLocales() : Enumeration+ getParameter(s : String) : String+ getParameterNames() : Enumeration+ getParameterValues(s : String) : String[]+ getProtocol() : String+ getReader() : BufferedReader+ getRealPath(s : String) : String+ getRemoteAddr() : String+ getRemoteHost() : String+ getRequestDispatcher(s : String) : RequestDispatcher+ getScheme() : String+ getServerName() : String+ getServerPort() : int+ isSecure() : boolean+ removeAttribute(s : String) : void+ setAttribute(s : String, obj : Object) : void

<<Interface>>

Page 25: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 25

ServletRequestParâmetros

String getParameter(String nomeParametro) Retorna um string com o

valor do parâmetro especificado na variável nomeParametro ou null se o parâmetro não existir

Page 26: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 26

ServletRequestParâmetros

String[] getParameterValues(String nomeParametro) Retorna os valores do parâmetro

especificado na variável nomeParametro, como um array de strings, ou null se o parâmetro não existir

Parâmetros com múltiplos valores, como listas

Page 27: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 27

ServletRequestParâmetros

Enumeration getParameterNames() Retorna o nome dos parâmetros

do request como uma enumeração de strings, ou uma enumeração vazia, se não houver parâmetros

Page 28: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

28

ServletRequest - Parâmetros ServletRequest representa o pedido

getParameter(String nomeParametro)

// ...public class HelloPersonServlet extends HttpServlet {

public void doGet(HttpServletRequest request, // ... { // ... String nome = request.getParameter(“nome”); out.println("<h1> Hello " + nome + " </h1>"); // ... }}

http://localhost:8080/servlet/HelloPersonServlet?nome=Eduardo

Page 29: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 29

HttpServletRequest

Métodos para leitura de cookiesCookie[] getCookies()

Métodos para gerenciamento de sessõesHttpSession getSession(boolean create)

Page 30: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 30

ServletResponse

Encapsula a reposta do servlet

ServletResponse

+ flushBuffer() : void+ getBufferSize() : int+ getCharacterEncoding() : String+ getLocale() : Locale+ getOutputStream() : ServletOutputStream+ getWriter() : PrintWriter+ isCommitted() : boolean+ reset() : void+ setBufferSize(i : int) : void+ setContentLength(i : int) : void+ setContentType(s : String) : void+ setLocale(locale : Locale) : void

<<Interface>>ServletResponse

+ flushBuffer() : void+ getBufferSize() : int+ getCharacterEncoding() : String+ getLocale() : Locale+ getOutputStream() : ServletOutputStream+ getWriter() : PrintWriter+ isCommitted() : boolean+ reset() : void+ setBufferSize(i : int) : void+ setContentLength(i : int) : void+ setContentType(s : String) : void+ setLocale(locale : Locale) : void

<<Interface>>

Page 31: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 31

ServletResponse - Saída

getWriter() para escrever dados textuais

getOutputStream() para escrever dados binários

Pode-se chamar o método setContentType() antes de chamar getWriter() ou getOutputStream() o tipo padrão é “text/plain”

Page 32: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 32

ServletResponse - Saída

Exemplo

...

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("<HTML><BODY>Bom Dia!</BODY></HTML>");

...

Page 33: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 33

HttpServletResponse

Métodos para enviar códigos de status ou de

erros para o cliente redirecionar o cliente para outra

URL adicionar cookies à resposta ....

Page 34: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

Mantendo o Estado entre Requisições

Page 35: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 35

Mantendo o Estado entre Requisições

Objetivomanter um estado

conversacional entre o cliente e o servidor persistindo algum tipo de informação entre as requisições do cliente

Cookies e Sessões

Page 36: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 36

Cookies

Concebidos pela Netscape (versão 0)

Informações ficam armazenadas no browser, em memória ou em disco

Suportado na API de Servletsclasse Cookie

Page 37: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 37

Cookies

Características Tamanho máximo de 4KB por

cookie Um navegador armazena no

máximo 20 cookies por servidor Informações do cookie são

enviadas e recebidas em toda transação HTTP

São enviados apenas para o servidor de origem

Page 38: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 38

Cookies: manipulação

Recuperação dos cookies getCookies() da classe HttpServletRequest

retorna uma matriz de cookies acessíveis da página

Adição de cookies addCookie(Cookie) da classe HttpServletResponse

envia um cookie para o navegador

Page 39: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 39

Sessões

O protocolo HTTP não mantém estado de sessão As aplicações Web devem mantê-lo

quando necessário São criadas no lado do servidor

podem armazenar variáveis e objetos de programas Java

Uma sessão por cliente Expiram depois de um intervalo de

tempo definido no servidor

Page 40: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 40

Sessões

A sessão é única para cada cliente e persiste através de várias requisições

Page 41: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 41

Sessões Implementadas pela

interface HttpSession<<Interface>>HttpSession

+ getAttribute(s : String) : Object+ getAttributeNames() : Enumeration+ getCreationTime() : long+ getId() : String+ getLastAccessedTime() : long+ getMaxInactiveInterval() : int+ getSessionContext() : HttpSessionContext+ getValue(s : String) : Object+ getValueNames() : String[]+ invalidate() : void+ isNew() : boolean+ putValue(s : String, obj : Object) : void+ removeAttribute(s : String) : void+ removeValue(s : String) : void+ setAttribute(s : String, obj : Object) : void+ setMaxInactiveInterval(i : int) : void

(from http)

<<Interface>>HttpSession

+ getAttribute(s : String) : Object+ getAttributeNames() : Enumeration+ getCreationTime() : long+ getId() : String+ getLastAccessedTime() : long+ getMaxInactiveInterval() : int+ getSessionContext() : HttpSessionContext+ getValue(s : String) : Object+ getValueNames() : String[]+ invalidate() : void+ isNew() : boolean+ putValue(s : String, obj : Object) : void+ removeAttribute(s : String) : void+ removeValue(s : String) : void+ setAttribute(s : String, obj : Object) : void+ setMaxInactiveInterval(i : int) : void

(from http)

Page 42: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 42

Sessões Operações básicas

Criação da sessãoHttpSession session = req.getSession(boolean create)

Retorna a sessão corrente associada com o request req

Se não existe uma sessão, e create=true, retorna uma nova sessão

Se create=false e o request não possui uma sessão, este método retorna null

Page 43: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 43

Sessões

Operações básicas

Inserção de um objetoPoupanca p = new Poupanca(“34560”,513.00);

session.setAttribute(“poupanca”,p);

Page 44: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 44

Sessões

Operações básicas Consulta a um objeto

Poupanca objeto = (Poupanca) session.getAttribute(“poupanca”)

Remoção do objetosession.removeAttribute(“poupanca”)

Page 45: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 45

Sessões: propriedadesEnumeration getAttributeNames()retorna uma enumeração com

todos os nomes dos atributos armazenados na sessão

boolean isNew()retorna true se a sessão é

nova para o cliente. Retorna false para sessões preexistentes

Page 46: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 46

Sessões: propriedades

boolean isNew() Para saber se uma sessão é nova,

use o método isNew()

if (session.isNew()) {

myObject = new BObject();

} else {

myObject = (BObject) session.getAttribute("obj");

}

Page 47: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 47

Gerenciamento de Sessão

Não há como saber que cliente não precisa mais da sessão

Pode-se definir um timeout em minutos para a duração de uma sessão desde a última requisição do cliente setMaxInactiveInterval(int segundos) define novo valor para timeout

se intervalo for -1 sessão nunca expira

int getMaxInactiveInterval() recupera valor de timeout

Page 48: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 48

Sessões – Exemplo salvando objeto na sessão

public class ControleSessaoServlet { public void doGet( ...) { HttpSession session =request.getSession(true); response.setContentType("text/html"); PrintWriter out = response.getWriter(); String nome = request.getParameter("nome"); Pessoa p = new Pessoa(nome); session.setAttribute("usuario",p); out.println("<a href=\"/servlet/SeuNomeServlet\">"+ "Clique aqui</a>"); out.close(); }}

Page 49: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 49

public class SeuNomeServlet { public void doGet() { HttpSession session = request.getSession(false); response.setContentType("text/html"); PrintWriter out = response.getWriter(); if (session != null) { Pessoa p = (Pessoa) session.getAttribute("usuario"); out.println("Seu nome é" + p.getNome()); } else { out.println("Sessão inválida"); } out.close(); }}

Sessões – Exemplo – recuperando objeto da sessão

Page 50: Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – cecafac@gmail.comcecafac@gmail.com.

11/04/23 50

Compartilhamento de objetos na sessão

Como a sessão pode persistir além do tempo de uma requisição, é possível que a persistência de alguns objetos não sejam desejáveis

Use o método removeAttribute("nome")

para remover objetos da sessão