Você está na página 1de 14

17/04/2017

Prof. Marcos Vinicius


E-mail: marcos.vinicius@ufc.br

AULA 07 ESCOPO

1/28

NA AULA DE HOJE...
Introduo
DESENVOLVIMENTO DE SOFTWARE PARA WEB

Gerenciando sesses
Funcionamento das sesses
Contexto

2/28

1
17/04/2017

INTRODUO
HTTP um protocolo stateless, ou seja, no mantm estado
DESENVOLVIMENTO DE SOFTWARE PARA WEB

das requisies

HTTP foi pensado dessa forma inicialmente por motivo de


eficincia e pelo propsito inicial de HTML: distribuio de
contedo esttico
3/28

INTRODUO
Muitas vezes necessrio gerenciar as vrias
DESENVOLVIMENTO DE SOFTWARE PARA WEB

submisses/navegao de um usurio

Exemplo tpico: carrinho de compras da Amazon

Concluso: necessrio criar um mecanismo para


identificar e agrupar vrias interaes do usurio
com a aplicao Web

4/28

2
17/04/2017

GERENCIANDO SESSES
Os Servlet containers permitem e facilitam o gerenciamento de
DESENVOLVIMENTO DE SOFTWARE PARA WEB

sesses

Uma sesso um agrupamento de requisies de um nico


usurio, na qual pode-se armazenar informaes sobre esse
usurio:

5/28

A CLASSE HTTPSESSION
A classe HttpSession representa a sesso a qual
DESENVOLVIMENTO DE SOFTWARE PARA WEB

pertence uma requisio

Uma sesso pode ser vista como uma rea da memria


reservada para um usurio

Cada usurio possuir sua prpria sesso, que


representada por uma instncia de HttpSession

Para obter a sesso, deve-se usar o mtodo de


HttpServletRequest:
public HttpSession getSession( )
6/28

3
17/04/2017

MTODOS DE HTTPSESSION
Para adicionar objetos na sesso:
DESENVOLVIMENTO DE SOFTWARE PARA WEB

public void setAttribute(String name, Object value)

Para recuperar objetos da sesso:


public Object getAttribute(String name)

Para apagar um objeto da sesso:


public void removeAttribute(String name)

OBSERVAO: os objetos inseridos na sesso devem


implementar a classe java.io.Serializable
7/28

CARRINHO DE COMPRAS
Permite adicionar gradualmente produtos ao
DESENVOLVIMENTO DE SOFTWARE PARA WEB

carrinho de compras:

8/28

4
17/04/2017

GERENCIANDO SESSES
public class CarrinhoServlet {
public void doGet (HttpServletRequest request,
HttpServletResponse response)
DESENVOLVIMENTO DE SOFTWARE PARA WEB

throws ServletException, IOException {


// Obtendo a sesso do usurio
HttpSession session = request.getSession( );
// Procura na sesso o vetor de produtos (carrinho de compras)
Vector cc = (Vector) session.getAttribute(carrinho);
// no primeiro acesso, no h ainda carrinho de compras na sesso
// O carrinho de compras ento criado e adicionado
if ( cc == null ) {
cc = new Vector( );
session.setAttribute( carrinho, cc );
}
// Adiciona o produto no vetor (carrinho de compras)
String nome = request.getParameter("nome");
double preco = Double.parseDouble(request.getParameter("preco"));
Produto p = new Produto(nome,preco);
cc.add(p);
...} 9/28

FUNCIONAMENTO DAS SESSES


Realizao da primeira requisio de um usurio:
DESENVOLVIMENTO DE SOFTWARE PARA WEB

10/28

5
17/04/2017

FUNCIONAMENTO DAS SESSES


Realizao das demais requisies do usurio:
DESENVOLVIMENTO DE SOFTWARE PARA WEB

11/28

FUNCIONAMENTO DAS SESSES


Os containers gerenciam as sesses usando cookies de
DESENVOLVIMENTO DE SOFTWARE PARA WEB

sesso

Cookies so informaes armazenadas pelo browser do cliente


e enviados nas requisies para o servidor que o originou

O container gera um id nico para cada usurio

Essa informao armazenada em um cookie:


O mtodo public String getId( ) de HttpSession retorna o id dessa sesso

12/28

6
17/04/2017

FUNCIONAMENTO DAS SESSES


Realizao da primeira requisio que acessa a sesso:
DESENVOLVIMENTO DE SOFTWARE PARA WEB

13/28

FUNCIONAMENTO DAS SESSES


Realizao das demais requisies:
DESENVOLVIMENTO DE SOFTWARE PARA WEB

14/28

7
17/04/2017

CONTEXTO
Um Servlet container pode ter muitas aplicaes
DESENVOLVIMENTO DE SOFTWARE PARA WEB

Web, cada uma em um contexto

Um contexto representa o ambiente de execuo de


cada aplicao Web

No Tomcat, cada pasta abaixo de webapps


representa um contexto

Os contextos isolam os dados e as classes e evitam


que erros em uma aplicao interfiram em outras
15/28

A CLASSE SERVLETCONTEXT
A classe ServletContext representa o contexto da
DESENVOLVIMENTO DE SOFTWARE PARA WEB

aplicao

Cada aplicao possui um nico ServletContext, que


compartilhado por todos os Servlets

O ServletContext acessado atravs do mtodo do


Servlet:
public ServletContext getServletContext( )

16/28

8
17/04/2017

DEFININDO CONTEXTOS
<web-app>
<context-param>
DESENVOLVIMENTO DE SOFTWARE PARA WEB

<param-name>dburl</param-name>
<param-value> jdbc:mysql://localhost/user
</param-value>
</context-param>
<context-param>
<param-name>login</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123456 </param-value>
</context-param> Os parmetros de contexto
so acessvel a todos os
</web-app> Servlets da aplicao
17/28

ACESSANDO PARMETROS
public void doGet (HttpServletRequest request,
HttpServletResponse response) throws ServletException,
DESENVOLVIMENTO DE SOFTWARE PARA WEB

IOException {
// Obtendo o ServletContext
ServletContext context = getServletContext( );

// Obtendo dados de conexo do BD


String dbURL = context.getInitParameter("dburl");
String username = context.getInitParameter(login");
String password = context.getInitParameter("password");

Class.forName(com.mysql.jdbc.Driver);

// Abrindo conexo com o BD


Connection conn =
DriverManager.getConnection(dbURL,username,password);
}
18/28

9
17/04/2017

ESCOPOS DE ATRIBUTOS
Existem em trs escopos de atributos:
DESENVOLVIMENTO DE SOFTWARE PARA WEB

Requisio (classe HttpServletRequest)


Os atributos so armazenados apenas durante a execuo de
uma requisio HTTP

Sesso (classe HttpSession)


Os atributos so armazenados durante toda uma sesso de
iteraes com um usurio. Acessvel apenas para o cliente dono
da Sesso

Contexto (classe ServletContext)


Os atributos so armazenados durante toda a vida da aplicao
Web. Acessvel a todos os clientes da aplicao

19/28

ESCOPOS DE ATRIBUTOS
DESENVOLVIMENTO DE SOFTWARE PARA WEB

20/28

10
17/04/2017

ATRIBUTO NA REQUISIO
public class BuscaServlet extends HttpServlet {
public void doPost (HttpServletRequest request,
HttpServletResponse response) throws ServletException,
DESENVOLVIMENTO DE SOFTWARE PARA WEB

IOException {
String nome = request.getParameter(nome") ;

// Procura o usuario com o nome indicado


Usuario user = procuraUsuario(nome);

// Insere o usurio no escopo da requisio


request.setAttribute(user,user);

// Repassa a requisio para outro Servlet


RequestDispatcher rd =

request.getRequestDispatcher("/UsuarioServlet" );
rd.forward( request, response );
}
} 21/28

ATRIBUTO NA REQUISIO
public class UsuarioServlet extends HttpServlet {
DESENVOLVIMENTO DE SOFTWARE PARA WEB

public void doPost (HttpServletRequest request,


HttpServletResponse response)throws ServletException,
IOException {
// Procura o usuario passsado na requisio
Usuario user = (Usuario) request.getAttribute(user);
PrintWriter out = response.getWriter( );
if(user != null){
// Se o usurio tiver sido encontrado, mostrar tabela com nome,
// email, telefone, endereo
out.println(<table border=5 bgcolor=blue>);
out.println(<td>+user.getName( )+</td>);

}
}
}

22/28

11
17/04/2017

ATRIBUTO NA REQUISIO
DESENVOLVIMENTO DE SOFTWARE PARA WEB

23/28

ATRIBUTO NA SESSO
public class CarrinhoServlet {
public void doGet (HttpServletRequest request, HttpServletResponse
response)throws ServletException, IOException {
DESENVOLVIMENTO DE SOFTWARE PARA WEB

// Obtendo a sesso do usurio


HttpSession session = request.getSession( );
// Procura na sesso o vetor de produtos (carrinho de compras)
Vector cc = (Vector) session.getAttribute(carrinho);
// Se for o primeiro acesso, no h ainda carrinho de compras na sesso.
// O carrinho de compras ento criado e adicionado
if ( cc == null ) {
cc = new Vector( );
session.setAttribute( carrinho, cc );
}
// Adiciona o produto no vetor (carrinho de compras)
String nome = request.getParameter("nome");
double preco = Double.parseDouble(request.getParameter("preco"));
Produto p = new Produto(nome,preco);
cc.add(request.getParameter(produto));
...
}
}
24/28

12
17/04/2017

ATRIBUTO NA SESSO
DESENVOLVIMENTO DE SOFTWARE PARA WEB

25/28

ATRIBUTO NO CONTEXTO
public class BemVindoServlet extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse
DESENVOLVIMENTO DE SOFTWARE PARA WEB

response)throws ServletException, IOException {


ServletContext context = getServletContext( );

// Verifica se j existe o contador de usurios


Integer cont = (Integer) context.getAttribute(counter) ;

// Cria o contador se for o primeiro ou incrementa


if ( cont == null){
cont = new Integer(1);
} else{ cont = new Integer( cont.intValue( ) + 1); }

context.setAttribute(counter,cont);

PrintWriter out = response.getWriter( );


out.println(Bem vindo, voc o usurio de nmero: +
cont.intValue( ));
}
}
26/28

13
DESENVOLVIMENTO DE SOFTWARE PARA WEB DESENVOLVIMENTO DE SOFTWARE PARA WEB

DVIDAS?
ATRIBUTO NO CONTEXTO

28/28
27/28
17/04/2017

14