能否在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
相关产品推荐
相关产品推荐

