Notizen
Servlet Attribute Scopes
Inhalt der Notizen (20)
Seite 1
Agenda
Nessa apresentação, discutiremos:
Como adicionar atributos em diferentes escopos (request, session e context) e como recuperá-los.
Problemas multi-threading.
Seite 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
Seite 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.
Seite 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.
Seite 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"
Seite 6
Explorando os escopos (2)
Seite 7
Explorando os escopos (3)
Seite 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.
Seite 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.
Seite 10
Diferenças - tipo do retorno
Parâmetros: o tipo de retorno é "String".
Atributos: o tipo de retorno é Object.
Seite 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).
Seite 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.
Seite 13
SampleServlet - Attrib Servlet
Seite 14
Problemas de Multithreading
Dois servlet context attributes "attrib1" e "attrib2" estão configurados com 26 e 45, respectivamente.
Entretanto, quando recuperado, o primeiro servlet context attribute retorna um valor diferente.
Seite 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.
Seite 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.
Seite 17
Protegendo Context Attributes
Para proteger context attributes, obtenha um "lock" para o context usando o método "synchronized":
Isso irá garantir que somente uma thread por vez conseguirá acessar o context attribute "attrib1", prevenindo o problema de multithreading.
Seite 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.
Seite 19
Protegendo atributos de sessão
Para proteger atributos de sessão, sincronize o objeto HttpSession, como no exemplo anterior:
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.
Seite 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.
Informationen
- Beschreibung
- Concursos Públicos Desenvolvimento de Software (OCEJWCD 6 ONLINE COURSE) Notiz am Servlet Attribute Scopes, erstellt von Luis Felipe Guariento am 06/02/2018.
- Erstellt von
- Luis Felipe Guariento
- Aufrufe
- 0
- Bewertung