jsp隐式对象session的疑惑
一个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:"+id1+"<br/>);
6.out.print("id2:"+request.getSession(false).getId());
%>
运行后,第三行输出id1与id2相同,这是正常的,不正常得在第五六行,
第四行invalidate()后,第五行竟然仍然能正常输出......可第六行却报nullpointerexception了,
这是为什么呢? --------------------编程问答-------------------- 少写了一行
第四和第五行之间还有一行
id1=session.getId();
问题一样 --------------------编程问答-------------------- session对象肯定还存在,因为你自己还引用着,
但是request已经没有这个session对象的引用了。 --------------------编程问答--------------------
你的意思是说,隐式对象是jsp必须固定有的,不能人为的置为null吗?
还是不太明白... --------------------编程问答--------------------
--------------------编程问答--------------------
1.String id1=session.getId(); //将值赋给 id1 这个时候已经脱离session了
2.String id2=request.getSession().getId(); //同上
3.out.print("id1:"+id1+"<br/>"+"id2:"+id2);
4.session.invalidate();
5.out.print("id1:"+id1+"<br/>); //虽然session已经被销毁,但是不会影响到id1,,它们之间没有任何关系。
6.out.print("id2:"+request.getSession(false).getId()); //这里是在重新获取session中的id,由于前面的session.invalidate()影响,所以request.getSession(false)返回的是null,然后getId() 就报nullpointer啦~
我第二楼补充了哦,最好你自己先试试 --------------------编程问答--------------------
那就不可能了,,,可能没有编译吧。。。
或者
request.getSession(true):若存在会话则返回该会话,否则新建一个会话。
request.getSession(false):若存在会话则返回该会话,否则返回NULL
简而言之,session.invalidate() 是把session集合中保存的键值对变量全部清空,但是session还存在于回话中,但是你用的request.getSession(false)就不一样了。。
--------------------编程问答--------------------
session对象肯定还存在,因为你自己还引用着,
但是request已经没有这个session对象的引用了。
你的意思是说,隐式对象是jsp必须固定有的,不能人为的置为null吗?
还是不太明白...
session失效并不需要将session里的id设为null,这个应该不难理解吧。
如果取里面的值,比如getAttribute("dd")就会出错了。 --------------------编程问答-------------------- session.invalidate(); 第四行,表示session已经销毁了。request.getSession(false):若存在会话则返回该会话,否则返回NULL ,你再getID肯定就是空指针错误了。
id1 已经被赋值了,所以有值了。
6楼说的已经很具体了。
补充:Java , Java EE