-
jsp隐式对象session的疑惑5
一个jsp页面有如下代码:
<%
1.String id1=session.getId();
2.String id2=request.getSession().getId();
3.out.print("id1:"+id1+"<br/>"+"id2:"+id2);
4.session.invalidate();
5.out.print("id1:"+session.getId()+"<br/>);
6.out.print("id2:"+request.getSession(false).getId());
%>
运行后,第三行输出id1与id2相同,这是正常的,不正常得在第五六行,
第四行invalidate()后,第五行竟然仍然能正常输出......可第六行却报nullpointerexception了,
这是为什么呢?2013年6月01日 21:06
4个答案 按时间排序 按投票排序
-
session.invalidate()的主要作用是将此session从session池中删除,同时将此session的valid状态置成false,而不是session对象本身销毁(通过gc销毁),所以invalidate后,其session对象依然可以引用到,那其id就可以获得,但是request.getSession(false)就不能获取到session对象了,因为在获取request的session时有个判断,当此session的valid的状态是false时返回null
2013年6月05日 16:09
-
我想的是销毁以后 直接getid将会重新创建一个session
然后request.getSession(false) 此方法
会根据请求里面的sessionid去回去session因为已经销毁了 所以就获取不到了......2013年6月03日 08:47
-
有趣的问题,试了试,结论如下。
隐式的session和request.getSeesion并不总是一个对象!
1. 画面初始时,session(即隐式的session,下同)和request.getSession指向相同对象。
2. 调用session.invalidate()时,
2.1 request的session被设置成null。
2.2 session没有变成null,可以取id,但不能再访问attribute。
3. session.invalidate后,jstl动作不够准确。
所以我的建议是,尽量避免在jsp里面使用invalidate。如果使用,最后也放在最后!
测试代码
user是我放进session里面的一个对象。session建立时会创建个新User。${user}<br /> - <%=session.getId() %> - <%=request.getSession().getId()%><br /> - <%=request.getSession(true).getAttribute("user") %><br /> <% session.invalidate(); out.print(session + "<br/>"); out.print(request.getSession(true) + "<br/>"); out.print(session + "<br/>"); %> ${user}<br /> - <%=session.getId() %> - <%=request.getSession().getId()%><br /> - <%=request.getSession(true).getAttribute("user") %><br /> - <%=session.getAttribute("user") %><br />
你可以尝试把第5行的session.invalidate()注释后,看看运行结果。
我的结果,
------=== 注释掉invalidate的结果 ===------
User@1344568
- E71E603284385CAF3CB3196021816BA8 - E71E603284385CAF3CB3196021816BA8
- User@1344568
org.apache.catalina.session.StandardSessionFacade@b8b390
org.apache.catalina.session.StandardSessionFacade@b8b390
org.apache.catalina.session.StandardSessionFacade@b8b390
User@1344568
- E71E603284385CAF3CB3196021816BA8 - E71E603284385CAF3CB3196021816BA8
- User@1344568
- User@1344568
------=== 去掉注释,执行invalidate的结果 ===------
User@1344568
- E71E603284385CAF3CB3196021816BA8 - E71E603284385CAF3CB3196021816BA8
- User@1344568
org.apache.catalina.session.StandardSessionFacade@b8b390
org.apache.catalina.session.StandardSessionFacade@b6e838
org.apache.catalina.session.StandardSessionFacade@b8b390
{null} pageContext里的user被设置成null。
- E71E603284385CAF3CB3196021816BA8 - 2F64E48FF81DC95AFA66EB0310D3C77F
- User@47c342
- 抛了java.lang.IllegalStateException,session已经无效的异常。
2013年6月02日 15:00
相关推荐
**JSP隐式对象详解** JavaServer Pages (JSP) 是一种用于开发动态网页的技术,它允许开发者在HTML代码中嵌入Java代码。在JSP中,有一些预先定义好的对象,被称为“隐式对象”,这些对象可以直接在JSP页面中使用,...
例如,使用request对象获取用户的登录信息,通过session对象存储用户登录状态以便在多个页面间保持会话,如果登录失败,可以通过out对象向用户显示错误信息。若遇到异常,可以在错误处理页面使用exception对象来捕获...
- session对象:用于实现用户登录状态的保持,例如记录用户信息,防止非法访问。 - application对象:存储全局变量,如网站的统计信息、配置信息等。 - response对象:设置HTTP响应头,如编码、缓存控制,或者...
5. **session对象**: `session` 对象是 `javax.servlet.http.HttpSession` 的实例,用于在用户的不同请求之间保持状态信息。创建会话 `session = request.getSession();`,然后可以使用 `session.setAttribute(...
- JSP隐式对象是预定义的Java对象,可以直接在JSP页面中使用,分为以下几类: - 输入/输出对象:`request`、`response`和`out`。 - 作用域通信对象:`session`、`application`和`pageContext`。 - Servlet相关...
通过它可以直接访问 JSP 页面中的各种对象,如 `request`、`session` 等。 - **param**: 获取当前请求的所有参数值,返回类型为 String。 - **paramValues**: 获取当前请求的所有参数值,并返回每个参数的所有值组成...
jsp隐式对象是jsp技术的核心之一,jsp隐式对象是指在jsp页面中可以直接使用的java对象,这些对象都是jsp引擎提供的,jsp隐式对象共有九大对象,分别是: 1. request对象 2. response对象 3. pageContext对象 4. ...
JSP 九大隐式对象是指在 JSP 编程中可以直接使用的九个内置对象,这九个对象分别是:request、response、session、application、out、pageContext、config、page、exception。下面对每个对象进行详细解释。 1. ...
常见的JSP隐式对象包括request、response、session、application、out、pageContext等。下面将详细介绍这些隐式对象的定义和用法,并通过实例加以说明。 1. request对象 request对象用于获取客户端的请求信息,如...
在JSP中,我们有9个隐式对象,比如request、response、session等,而在EL中,这个数量增加到了11个。值得注意的是,EL和JSP共享一个隐式对象——`pageContext`,但其余的隐式对象则是EL特有的。 **7.3.1 EL隐式对象...
EL表达式隐式对象可以分为两类:一类是pageContext对象,另一类是四个域(page、request、session、application)中搜索的隐式对象。 pageContext对象是EL表达式的核心对象,它提供了对当前JSP页面的所有信息的访问...
这门JavaWeb程序设计入门课件主要聚焦于EL(Expression Language)隐式对象,它是一个强大的JSP(JavaServer Pages)表达式语言,用于简化JavaWeb开发中的数据访问和页面逻辑。EL隐式对象是预定义的一组变量,可以...
这些隐式对象的名称是 JSP 的保留字,JSP 使用 Java 定义的隐式对象来访问网页的动态内容。 输入/输出对象: * 控制页面的输入和输出 * 访问与所有请求和响应有关的数据 * 输入和输出对象包括 request、response ...
JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。 JSP所支持的九大隐式对象: 对象 描述 request ...
* session对象:用于存储用户会话相关数据。 * application对象:用于存储应用程序全局数据。 * pageContext对象:用于存储当前JSP页面的数据。 Servlet相关对象 Servlet相关对象包括page和config两个对象。 * ...
当一个用户访问Web应用时,服务器会创建一个Session对象,并为其分配一个唯一的Session ID。这个ID通常被存储在客户端的Cookie中,或者在URL中隐式传递,使得服务器能够识别和追踪同一个用户的不同请求。 #### ...
JSP隐式对象是JSP页面中可以直接使用的对象,包括request、response、session、application、out、config、pageContext等。这些对象提供了对HTTP请求和响应的访问能力,帮助开发者快速开发Web应用程序。 五、JSP...