Arquivos Ceça Moraes – [email protected]@gmail.com Introdução à Programação SI1 1.
Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – [email protected]@gmail.com.
Transcript of Desenvolvimento de Projeto e Aplicações Web Ceça Moraes – [email protected]@gmail.com.
11/04/23 2
Conteúdo
Servlets
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
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
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.
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.
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
11/04/23 8
Servlets Cria threads para cada requisição
Web.
11/04/23 9
Arquitetura
Servidor Web
Container Servlet
Context
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
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()
11/04/23 12
Implementação Simples
Herdar da classe HttpServlet
Redefinir métodos doGet() e doPost() para implementar os serviços
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
11/04/23 14
Acesso aos servlets
Diretamente através da URLhttp://www.faculdademarista.com.br/servlet/ServletPgto? matr=“2312"&valor=1000
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>
11/04/23 16
Acesso aos servlets
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>>
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
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
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
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(); }}
11/04/23 22
HttpServlet: Exemplo
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
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>>
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
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
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
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
11/04/23 29
HttpServletRequest
Métodos para leitura de cookiesCookie[] getCookies()
Métodos para gerenciamento de sessõesHttpSession getSession(boolean create)
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>>
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”
11/04/23 32
ServletResponse - Saída
Exemplo
...
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML><BODY>Bom Dia!</BODY></HTML>");
...
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 ....
Mantendo o Estado entre Requisições
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
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
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
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
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
11/04/23 40
Sessões
A sessão é única para cada cliente e persiste através de várias requisições
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)
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
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);
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”)
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
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");
}
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
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(); }}
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
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