O GoConqr está de visual novo! Conte para nós o que você achou.

Notas

Servlet Attribute Scopes

Luis Felipe Guariento Desenvolvimento de Software Concursos Públicos Português 20 páginas

Conteúdo das notas (20)

Página 1

Agenda

Nessa apresentação, discutiremos:

Como adicionar atributos em diferentes escopos (request, session e context) e como recuperá-los.

Problemas multi-threading.

Página 2

Servlet Request Scopes

Nas apresentações anteriores discutimos a respeito de parâmetros, agora discutiremos sobre atributos.

Um atributo é um objeto cujo valores podem ser "set", para configurar o valor do atributo ou então "get", para recuperar o valor do atributo.

A visibilidade de um atributo pode ter três escopos:

Request

Session

Context

Página 3

Atributos e parâmetros

Discutiremos as diferenças entre parâmetros e atributos focando nos fatores:

Tipo

Como configurá-los

Tipo do retorno

Como obtê-los.

Página 4

Diferenças - Tipo

Parâmetros:

Temos Context Init Parameters, request parameters e Servlet init Pamameters

Atributos:

Temos Servlet Context Attributes, HttpSession Attributes e Request Attributes.

Página 5

Explorando os escopos

Antes de passarmos a outras diferenças, entenderemos o significado dos três escopos com relação à "visibilidade" e ao "ciclo de vida"

Servlet Attribute Scopes

Página 6

Explorando os escopos (2)

Servlet Attribute Scopes

Página 7

Explorando os escopos (3)

Servlet Attribute Scopes

Página 8

Diferenças - Configurando ("to set")

Configurando parâmetros:

ServletContext init Parameter e servlet init parameters são configurados no descritor de implentação.

Configurando atributos:

Nós utilizamos o método setAttribute(String nome, Object obj) para configurar atributos.

Página 9

Diferenças - obtenção

Obtendo parâmetros:

Parâmetros são recuperados através do método getInitParameter(String), o qual retornará um objeto do tipo String.

Obtendo atributos:

Atributos são recuperados através do método getAttribute(String), que retorna um Object.

Página 10

Diferenças - tipo do retorno

Parâmetros: o tipo de retorno é "String".

Atributos: o tipo de retorno é Object.

Página 11

API

Atribute Methods:

getAttribute(String)

setAttribute(String,Object)

Enumeration getAttributeNames()

removeAttribute(String)

Estes métodos estão disponíveis para todos os escopos (ServletContext, HttpSession e ServletRequest).

Página 12

Sample Servlet

É importante lembrar que ServletRequest, ServletContext e HttpSession são interfaces.

O próximo slide demonstra uma exemplo de programa que ilustra como adicionar, recuperar e remover atributos.

Página 13

SampleServlet - Attrib Servlet

Servlet Attribute Scopes

Servlet Attribute Scopes

Página 14

Problemas de Multithreading

Dois servlet context attributes "attrib1" e "attrib2" estão configurados com 26 e 45, respectivamente.

Servlet Attribute Scopes

Entretanto, quando recuperado, o primeiro servlet context attribute retorna um valor diferente.

Página 15

Problemas de Multithreading (2)

A razão do comportamento obtido anteriormente é o seguinte:

Servlet Context Attributes podem ser acessados por todos (outros servlets, JSPs) na aplicação web.

Cada requisição, ainda que seja do mesmo servlet ou de um servlet diferente, roda em uma thread diferente.

Essas múltiplas threads podem acessar e modificar os valores do atributo.

Servlet Attribute Scopes

Página 16

Problemas de Multithreading (3)

Thread 1 vai para o status "Runnable but not Running" e thread 2 vai para o estado "Running" - irá modificar o valor de "attrib 1" para 47.

Esse é o problema de Multithreading.

Context Scope Attributes não são "Thread-safe". Qualquer thread pode configurar e obter o valor do atributo, modificando-o.

Página 17

Protegendo Context Attributes

Para proteger context attributes, obtenha um "lock" para o context usando o método "synchronized":

Servlet Attribute Scopes

Isso irá garantir que somente uma thread por vez conseguirá acessar o context attribute "attrib1", prevenindo o problema de multithreading.

Página 18

Atributos de sessão

Session é uma conversação entre um cliente e o servidor.

Se um cliente abre duas janelas de browser, o container usará a mesma sessão para a segunda janela aberta.

Da mesma maneira, session attributes não são thread-safe.

Página 19

Protegendo atributos de sessão

Para proteger atributos de sessão, sincronize o objeto HttpSession, como no exemplo anterior:

Servlet Attribute Scopes

Request attributes e variáveis locais são thread-safe!

O código acima sincroniza o atributo de sessão "sess" de modo que seu valor não pode ser modificado por múltiplas threads ao mesmo tempo.

Página 20

Conclusão

Nessa apresentação discutimos sobre diferentes escopos de atributo e como adicionar, recuperar e remover atributos.

Também discutimos problemas multithreading e maneiras de evitá-los.

Informações

Descrição
Concursos Públicos Desenvolvimento de Software (OCEJWCD 6 ONLINE COURSE) Notas sobre Servlet Attribute Scopes, criado por Luis Felipe Guariento em 06-02-2018.
Criado por
Luis Felipe Guariento · fev 2018
Atualizado
18 fev 2018
Visualizações
0
Avaliação

Fale Conosco

Sobre o que é sua mensagem?

O que você acha do novo visual?

Você gostou?