You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在JSP的<% %>脚本块中从Servlet获取Session属性?

能否在JSP的<% %>脚本块中获取Servlet设置的Session属性?

当然可以!这是Java Web开发里非常常规的操作——毕竟JSP本质上就是被编译成Servlet运行的,两者共享同一个HttpSession上下文,完全可以互通会话属性。

具体实现方法

JSP中内置了session这个隐式对象,你不需要手动创建或从request里获取,直接在<% %>脚本块里调用它就能访问Servlet设置的Session属性。

1. 先看Servlet中设置Session属性的示例

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 获取Session(若不存在则自动创建)
    HttpSession session = request.getSession();
    // 往Session中存入属性
    session.setAttribute("username", "JohnDoe");
    session.setAttribute("userRole", "admin");
    
    // 转发到目标JSP页面
    request.getRequestDispatcher("/user-info.jsp").forward(request, response);
}

2. 再看JSP的<% %>脚本块中获取属性的示例

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>用户信息</title>
</head>
<body>
    <%
        // 直接使用内置session对象读取属性,注意类型强转
        String username = (String) session.getAttribute("username");
        String userRole = (String) session.getAttribute("userRole");
        
        // 建议添加非空判断,避免属性不存在时触发空指针异常
        if (username != null) {
            out.println("当前登录用户名:" + username + "<br>");
        }
        if (userRole != null) {
            out.println("用户角色:" + userRole);
        }
    %>
</body>
</html>

额外小提示

  • 除了<% %>脚本块,你也可以用JSP表达式<%= %>更简洁地输出属性值,比如<%= session.getAttribute("username") %>,但同样要注意空值处理。
  • Session属性的作用域覆盖整个会话周期,只要会话未过期或被销毁,同一会话内的任何JSP、Servlet都能访问这些属性。

内容的提问来源于stack exchange,提问作者John Jacobs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:18:09