如何在 JSP 页面之间共享数据
JSP 页面间共享数据的核心是利用不同作用域的隐式对象,数据会绑定到对应作用域中,其他页面可通过getAttribute()或 EL 读取,按作用域从窄到宽分为 4 类方式:
| 作用域 | 核心对象 | 数据生命周期 | 适用场景 |
|---|---|---|---|
| page(页面) | pageContext | 仅当前 JSP 页面有效(跳转后失效) | 单个页面内的临时数据 |
| request(请求) | request | 单次请求内有效(转发后仍可用) | 同一请求的多个页面(如转发) |
| session(会话) | session | 单个用户会话内有效(默认 30 分钟) | 跨请求的用户专属数据(如登录信息) |
| application(应用) | application | 整个 Web 应用运行期间有效 | 全局共享数据(如系统配置) |
方式 1:page 作用域(仅当前页面)
通过pageContext绑定数据,仅当前页面可访问,跳转 / 刷新后失效:
1 | <%-- 绑定数据 --%> |
方式 2:request 作用域(单次请求)
通过request绑定数据,转发(forward) 的页面可共享,重定向(redirect)失效(重定向是新请求):① 页面 A(set.jsp):
1 | <% |
② 页面 B(get.jsp):
1 | <%-- 读取request作用域数据 --%> |
方式 3:session 作用域(用户会话)
通过session绑定数据,同一用户的所有请求(跨页面、跨请求)均可访问,直到会话失效(关闭浏览器 / 超时):① 登录页面(login.jsp):
1 | <% |
② 首页(index.jsp):
1 | <%-- 读取session中的用户信息 --%> |
方式 4:application 作用域(全局共享)
通过application(ServletContext)绑定数据,所有用户、所有页面共享,直到 Web 应用重启:① 配置页面(config.jsp):
1 | <% |
② 任意页面:
1 | <%-- 所有用户均可读取 --%> |
补充方式:URL 传参(轻量级)
通过 URL 拼接参数传递简单数据(仅支持字符串,暴露在地址栏,不安全):① 页面 A:
1 | <a href="get.jsp?id=123&name=李四">跳转</a> |
② 页面 B(get.jsp):
1 | <%-- 读取URL参数 --%> |
核心注意事项:
- 优先使用 “最小作用域”:如仅单次请求用 request,避免滥用 session/application 导致内存占用过高;
- session 数据需注意线程安全(多请求共享),且敏感数据需加密;
- 重定向(
response.sendRedirect())会创建新请求,request 作用域数据失效,需用 session/URL 传参。



