Questão SCWCD

4 respostas
kaabah

Olá pessoal,

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

/**
* 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");
}
}
<%-- arquivo resposta.jsp --%>
<html>
<head>
<title>resposta</title>
</head>
<body>
chave = ${chave}
</body>
</html>

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:

4 Respostas

henriquedamota

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

gugaa_df

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.

H

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

Abraços.

walterfelipe

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

Criado 16 de março de 2008
Ultima resposta 21 de mar. de 2008
Respostas 4
Participantes 5