Diga a você com o código: 4 escopos de JSP
1. Qual é o uso de escopo em JSP?
No desenvolvimento WEB, JSP é usado como uma visão para exibir dados, e fornece 4 escopos diferentes para compartilhar dados na página. O escopo desses 4 escopos tem diferentes ciclos de vida. Descubra entre os 4 escopos. A diferença é conveniente para percebermos as funções de diferentes cenários de negócios.
2. Quais são os 4 escopos?
domínio de página, domínio de solicitação, domínio de sessão, domínio de aplicativo
3. A diferença entre escopos
3.1 objeto pageContext
Objeto pageContext: seu ciclo de vida é o domínio da página, o que significa que os dados armazenados no objeto pageContext são válidos apenas na página atual. Quando ocorre um salto de página, os dados no domínio pageContext são destruídos
Definir valor:
pageContext.setAttribute("Key","value");
Valor:
pageContext.getAttribute("Key");
3.2 objeto de solicitação
Objeto de solicitação: seu ciclo de vida é o domínio de solicitação, o que significa que quando os dados são armazenados no objeto de solicitação, quando a página é encaminhada ou na página atual, os dados do domínio de solicitação podem ser obtidos. Quando a solicitação termina, os dados armazenados são destruídos.
Definir valor:
request.setAttribute("key","value");
Valor:
request.getAttribute("key");
3.3 objeto de sessão
Objeto de sessão: seu ciclo de vida é o domínio da sessão. A sessão é baseada no navegador, o que significa que os dados são armazenados no domínio da sessão. Quando o navegador é fechado, os dados são destruídos.
Definir valor:
session.setAttrbute("key","value");
Valor:
session.getAttribute("key");
3.4 objeto de aplicação
Objeto aplicativo: seu ciclo de vida é o domínio do aplicativo, que existe em todo o aplicativo. Quando os dados são definidos no aplicativo, eles serão destruídos quando o servidor for fechado.
Definir valor:
application.setAttribute("key","value");
Valor:
application.getAttribute("key");
4. Demonstração de código
4.1 Domínio da página de demonstração
Página: scope.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>作用域测试</title>
</head>
<body>
<%
//设值
pageContext.setAttribute("name1","zhangshan001");
request.setAttribute("name2","zhangshan001");
session.setAttribute("name3","zhangshan001");
application.setAttribute("name4","zhangshan001");
//取值
String name1 = (String)pageContext.getAttribute("name1");
String name2 = (String)request.getAttribute("name2");
String name3 = (String)session.getAttribute("name3");
String name4 = (String)application.getAttribute("name4");
%>
pageContext域:${name1}<br/>
request域:${name2}<br/>
session域:${name3}<br/>
application域:${name4}<br/>
</body>
</html>
Visite a página atual, você pode ver que todos os 4 escopos podem obter valores, conforme mostrado abaixo:
4.2 Domínio de solicitação de demonstração
Para demonstrar o domínio do pedido, 2 páginas são necessárias. Eles são scope.jsp e scope2.jsp. Conforme mostrado na figura abaixo: Defina o valor em scope.jsp e encaminhe-o para scope2.jsp por meio de encaminhamento. Descobriu-se que o valor de pageContext não pode ser obtido e outros valores podem ser obtidos para comparação.
Página: scope.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>作用域测试</title>
</head>
<body>
<%
pageContext.setAttribute("name1","zhangshan001");
request.setAttribute("name2","zhangshan001");
session.setAttribute("name3","zhangshan001");
application.setAttribute("name4","zhangshan001");
String name1 = (String)pageContext.getAttribute("name1");
String name2 = (String)request.getAttribute("name2");
String name3 = (String)session.getAttribute("name3");
String name4 = (String)application.getAttribute("name4");
%>
pageContext域:${name1}<br/>
request域:${name2}<br/>
session域:${name3}<br/>
application域:${name4}<br/>
<jsp:forward page="scope2.jsp"></jsp:forward>
</body>
</html>
Página: scope2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>作用域测试</title>
</head>
<body>
<%
String name1 = (String)pageContext.getAttribute("name1");
String name2 = (String)request.getAttribute("name2");
String name3 = (String)session.getAttribute("name3");
String name4 = (String)application.getAttribute("name4");
%>
<h1>scope2.jsp</h1>
pageContext域:${name1}<br/>
request域:${name2}<br/>
session域:${name3}<br/>
application域:${name4}<br/>
</body>
</html>
4.3 Domínio da sessão de demonstração
A sessão é baseada no navegador. Se você visitar scope2.jsp de outro navegador, verá que o valor do campo da sessão não está disponível. (Observe que é o acesso ao scope2.jsp em vez de scope.jsp. Porque o scope.jsp será redefinido e receberá o valor.)
4.4 Domínio do aplicativo de demonstração
Porque o domínio do aplicativo é baseado em todo o aplicativo. Portanto, você precisa fechar o servidor tomcat para destruí-lo. Depois de reiniciar o tomcat, conforme mostrado abaixo: