1 0

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个答案 按时间排序 按投票排序

0 0

既然都是容器内置对象了,所以肯定是容器负责管理晒。

2013年6月14日 16:54
0 0

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
0 0

我想的是销毁以后 直接getid将会重新创建一个session

然后request.getSession(false) 此方法
会根据请求里面的sessionid去回去session因为已经销毁了 所以就获取不到了......

2013年6月03日 08:47
0 0

有趣的问题,试了试,结论如下。

隐式的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语法之隐式对象详解

    了解JSP 隐式对象的分类和组成 能够运用隐式对象进行JSP 编程 理解Page、Request、Session 和Application 范围的区别

    JSP 隐式对象

    JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。 JSP所支持的九大隐式对象: 对象 描述 request ...

    javaBean和JSP标准动作.rar

    在JSP页面中,我们通过使用隐式对象可以更加方便地实现我们的效果。隐式对象包含: request response out ---- 输入输出对象 pageContext session application ---- 应用作用域对象 page config ---- Servlet对象...

    jsp九大内置对象

     当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个Session对象,同时分配一个String类型的ID号,JSP引擎同时将这换个ID号发送到客户端,存放在Cookie中,这样Session对象,直到客户关闭浏览器后,...

    JSP程序设计与案例实战

    内容摘要:JSP程序设计与案例实战PPT,里面覆盖了网页前端“三剑客”知识点、如何安装配置JSP运行环境、JSP脚本元素(JSP表达式、声明、Script)及其指令(include指令、page指令、taglib指令)、JSP隐式对象(out、...

    JSP期末考试试题及答案

    针对以下题目请选择正确的答案(每道题目有一个或多哥正确的答案)。...5) 在J2EE中,以下不是JSP隐式对象的是()。(选择一项) a) pageContext b) context c) application d) out

    jsp试卷大全及答案

    5) 在J2EE中,以下不是JSP隐式对象的是()。(选择一项) a) pageContext b) context c) application d) out 6) Servlet中,HttpServletResponse的()方法用来把一个Http请求重定向到另外的URL...

    jsp试卷带答案很全面

    有两份试卷 针对以下题目请选择正确的答案(每道题目有一个或多哥正确的答案)。...5) 在J2EE中,以下不是JSP隐式对象的是()。(选择一项) a) pageContext b) context c) application d) out

    JSP 相关对象的使用介绍

    JSP九大隐式对象: 对象名 描述 作用域 数据类型 request 此对象封装了由WEB浏览器或其它客户端生成的HTTP请求的细节(参数,属性,头标和数据); request(用户请求期) ServletRequest的子类型 response 此...

    web开发常用对象和技术总结

    11个word文档,10个pdf文件,详细讲解web开发中要用到各种技术,包括jsp隐式对象,表达式语言,自定义标签,标准标签库,javabean和标准动作,javamail ,过滤器,监听器servlet ,request ,session ,application.......

    XML Oracle Servlet 复习汇总(S2)

    2 Servlet:session对象的创建 3分 3 Servlet:web程序目录结构 6分 4 Servlet:jsp隐式对象 4分 5 Servlet:指令和动作 6分 6 Servlet:mvc 8分 7 Servlet:转发和重定向 8分 8 Servlet:连接池 5分 9 Servlet:...

    Servlet与JSP核心编程第2版

    16.8 引用隐式对象 16.9 表达式语言中运算符的应用 16.10 表达式的条件求值 16.11 表达式语言其他功能概览 第ⅲ部分 支持技术 第17章 数据库访问:jdbc 17.1 jdbc应用概述 17.2 基本jdbc示例 17.3 用...

    EL表达式的详细使用

    JSP 表达式语言定义了一组隐式对象,其中许多对象在 JSP scriplet 和表达式中可用: 术语 JSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext 等。例如,${pageContext....

    最详细的jsp基础教程

    更多内容,点击了解: https://how2j.cn/k/jsp/jsp-tutorials/530.html?p=81777 目录 JSP系列教材 (一)- 教程 JSP系列教材 (二)- 转译为Servlet ...JSP系列教材 (九)- 九种隐式对象 JSP系列教材 (十)- J

    吴天雄--JavaWeb完整笔记.doc

    模块二:使用eclipse和idea快速开发jsp(idea和tomcat的相关配置、eclipse创建web项目、jsp页面元素、jsp九大内置对象、四大作用域对象、解决get/post请求乱码问题、cookie和session详解、请求重定向);模块三:...

    JSTL高级用法

    EL中的隐式对象  ${param.name}  ${paramValues.name}  cookie JSTL并没有提供设定cookie的动作, 例:要取得cookie中有一个设定名称为userCountry的值,可以使用${cookie.userCountry}来取得它。  header...

    EL表达式 (详解)

    2--EL表达式可操作常量 变量 和隐式对象. 最常用的 隐式对象有${param}和${paramValues}. ${param}表示返回请求参数中单个字符串的值. ${paramValues}表示返回请求参数的一组 值.pageScope表示页面范围的变量....

    计算机二级Web程序设计模拟卷(二).doc

    A.8888 B.8001 C.8080 D.80 正确答案:C 您的答案: 本题解析: 暂无解析 7.JSP中的隐式注释为()。 A.//注释内容 B. C. D./*注释内容*/ 正确答案:C 您的答案: 本题解析: 暂无解析 8.假设在helloapp应用中有一个...

    J2EE应用开发详解

    76 5.5.2 JavaBean动作 78 5.6 隐式对象 78 5.6.1 request对象 78 5.6.2 response对象 78 5.6.3 application对象 78 5.6.4 out对象 79 5.6.5 page对象 79 5.6.6 session对象 79 5.6.7 exception对象 80 5.6.8 ...

Global site tag (gtag.js) - Google Analytics