在 JSP(JavaServer Pages)中,有四种作用域,它们决定了对象的可见性和生命周期。这四种作用域分别是:
页面作用域(Page Scope):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Page Scope Example</title>
</head>
<body>
<%@ page import="java.util.ArrayList" %>
<%
// 在页面作用域中创建一个 ArrayList 对象
ArrayList<String> pageList = new ArrayList<>();
pageList.add("Item 1");
pageContext.setAttribute("pageList", pageList);
%>
<h1>Page Scope Example</h1>
<p>Items in pageList:</p>
<ul>
<%
// 在页面作用域中获取并显示 ArrayList 对象
ArrayList<String> retrievedList = (ArrayList<String>) pageContext.getAttribute("pageList");
for (String item : retrievedList) {
out.println("<li>" + item + "</li>");
}
%>
</ul>
</body>
</html>
请求作用域(Request Scope):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Request Scope Example</title>
</head>
<body>
<%@ page import="java.util.HashMap" %>
<%
// 在请求作用域中创建一个 HashMap 对象
HashMap<String, String> requestMap = new HashMap<>();
requestMap.put("key1", "Value 1");
request.setAttribute("requestMap", requestMap);
%>
<h1>Request Scope Example</h1>
<p>Value for key1: <%= request.getAttribute("requestMap").get("key1") %></p>
</body>
</html>
会话作用域(Session Scope):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Session Scope Example</title>
</head>
<body>
<%@ page import="java.util.HashSet" %>
<%
// 在会话作用域中创建一个 HashSet 对象
HashSet<String> sessionSet = new HashSet<>();
sessionSet.add("Item A");
session.setAttribute("sessionSet", sessionSet);
%>
<h1>Session Scope Example</h1>
<p>Items in sessionSet:</p>
<ul>
<%
// 在会话作用域中获取并显示 HashSet 对象
HashSet<String> retrievedSet = (HashSet<String>) session.getAttribute("sessionSet");
for (String item : retrievedSet) {
out.println("<li>" + item + "</li>");
}
%>
</ul>
</body>
</html>
应用程序作用域(Application Scope):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Application Scope Example</title>
</head>
<body>
<%@ page import="java.util.LinkedHashMap" %>
<%
// 在应用程序作用域中创建一个 LinkedHashMap 对象
LinkedHashMap<String, String> appMap = new LinkedHashMap<>();
appMap.put("keyX", "Value X");
application.setAttribute("appMap", appMap);
%>
<h1>Application Scope Example</h1>
<p>Value for keyX: <%= application.getAttribute("appMap").get("keyX") %></p>
</body>
</html>
这些示例演示了如何在不同的作用域中存储和获取数据,以及数据在不同页面之间的共享。作用域的选择应该基于数据的生命周期和可见性的需求。