Decirle con código: 4 ámbitos de JSP
1. ¿Cuál es el uso del alcance en JSP?
En el desarrollo WEB, JSP se utiliza como una vista para mostrar datos, y proporciona 4 ámbitos diferentes para compartir datos en la página. El ámbito de estos 4 ámbitos tiene diferentes ciclos de vida. Averigüe entre los 4 ámbitos. La diferencia nos conviene para darnos cuenta de las funciones de diferentes escenarios comerciales.
2. ¿Qué 4 visores?
dominio de página, dominio de solicitud, dominio de sesión, dominio de aplicación
3. La diferencia entre visores
3.1 objeto pageContext
objeto pageContext: su ciclo de vida es el dominio de la página, lo que significa que los datos almacenados en el objeto pageContext solo son válidos en la página actual. Cuando se produce un salto de página, los datos en el dominio pageContext se destruyen
Valor ajustado:
pageContext.setAttribute("Key","value");
Valor:
pageContext.getAttribute("Key");
3.2 objeto de solicitud
Objeto de solicitud: su ciclo de vida es el dominio de solicitud, lo que significa que cuando los datos se almacenan en el objeto de solicitud, cuando se reenvía la página o en la página actual, se pueden obtener los datos en el dominio de solicitud. Cuando finaliza la solicitud, los datos almacenados se destruyen.
Valor ajustado:
request.setAttribute("key","value");
Valor:
request.getAttribute("key");
3.3 objeto de sesión
Objeto de sesión: su ciclo de vida es el dominio de sesión. La sesión se basa en el navegador, lo que significa que los datos se almacenan en el dominio de sesión. Cuando se cierra el navegador, los datos se destruyen.
Valor ajustado:
session.setAttrbute("key","value");
Valor:
session.getAttribute("key");
3.4 objeto de aplicación
Objeto de aplicación: Su ciclo de vida es el dominio de la aplicación, que existe en toda la aplicación. Cuando los datos se configuran en la aplicación, se destruirán cuando se cierre el servidor.
Valor ajustado:
application.setAttribute("key","value");
Valor:
application.getAttribute("key");
4. Demostración de código
4.1 Dominio de la página de demostración
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 la página actual, puede ver que los 4 ámbitos pueden obtener valores, como se muestra a continuación:
4.2 Dominio de solicitud de demostración
Para demostrar el dominio de la solicitud, se requieren 2 páginas. Son scope.jsp y scope2.jsp. Como se muestra en la siguiente figura: Establezca el valor en scope.jsp y reenvíelo a scope2.jsp hasta forward. Se encuentra que el valor de pageContext no se puede obtener, y se pueden obtener otros valores para comparar.
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 Dominio de la sesión de demostración
La sesión se basa en el navegador. Si visita scope2.jsp desde otro navegador, encontrará que el valor del campo de sesión no está disponible. (Tenga en cuenta que es acceso a scope2.jsp en lugar de scope.jsp. Porque scope.jsp se restablecerá y tomará el valor).
4.4 Dominio de la aplicación de demostración
Porque el dominio de la aplicación se basa en toda la aplicación. Entonces necesitas cerrar el servidor Tomcat para destruirlo. Después de reiniciar Tomcat, como se muestra a continuación: