Questão SCWCD

Olá pessoal,

Estava estudando EL quando um amigo me passou a seguinte questão (segundo ele foi uma questão de um concurso):

[code]/**

  • arquivo ServletEscopo.java
    */
    public class ServletEscopo
    extends javax.servlet.http.HttpServlet
    implements javax.servlet.Servlet {
    public void init() throws ServletException {
    ServletContext context = this.getServletContext();
    context.setAttribute(“chave”, “contexto”);
    }

protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
String atributoSession =
(String) session.getAttribute(“chave”);
if (atributoSession == null) {
atributoSession = “sessão”;
session.setAttribute(“chave”, atributoSession );
}
String atributoRequest =
(String) request.getAttribute(“chave”);
if (atributoRequest == null) {
atributoRequest = “requisição”;
request.setAttribute(“chave”, atributoRequest );
}
response.sendRedirect(“resposta.jsp”);
}
}[/code]

[code]<%-- arquivo resposta.jsp --%>

resposta chave = ${chave} [/code]

Analisando os trechos de código apresentados, após a execução da classe
ServletEscopo, o valor exibido pela página resposta.jsp será
A) chave = contexto.
B) chave = sessão.
C) chave = requisição.
D) chave = página.

A resposta correta é letra B.

A explicação para isso é pelo fato de ServletContext não fazer parte dos objetos implícitos da EL? E logo após isso ele seta na session. O sessionScope é um obj. implícito, logo a EL pega o valor do primeiro valor setado para o atributo “chave”?

Quem puder ajudar… :idea:

Tambem estou intrigado pra saber o porque desta quetão… :slight_smile:

Primeiro respondendo as perguntas feitas.
A explicação para isso é pelo fato de ServletContext não fazer parte dos objetos implícitos da EL?
O ServletContext faz parte dos objetos implícitos da EL, o nome do objeto implícito é applicationScope
E logo após isso ele seta na session. O sessionScope é um obj. implícito, logo a EL pega o valor do primeiro valor setado para o atributo “chave”?
A EL nao pega o primeiro valor que ela ver setado para o atributo, ele primeiro procura no pageScope, se nao encontrar nada ela procura no requestScope, ou seja ela começa procurando do mais restrito para o menos restrito.
A resposta correta é a B pq a aplicação utilizou o senRedirect e o objeto Request foi perdido, entao só restou o atributo da Sessão e do contexto, como nao foi especificado em qual escopo estava, a EL pegou o escopo mais restrito que é o da Session e mostrou.
Bom se eu estiver errado, por favor alguem me corrija.

Excelente, com a explicação tirei totalmente minhas dúvidas dessa questão.

Abraços.

Boa resposta Guga, o cara tá fera mesmo :lol: