1 session理论知识
1.1 session何时创建 1.2 session何时销毁 |
1 session何时创建
Session 机制: session机制是一种服务器端的机制, 这个标识称为session id, 先介绍一下测试环境:
其中servlet和jsp都是默认内容。 测试1:分别请求servlet和jsp,通过浏览器查看是否生成session。 测试结果:请求servlet没有产生session,请求jsp产生了session。 理论知识:jsp的本质是servlet,只有在servlet中调用request.getSession();或者request.getSession(true);服务器才会产生session。如果调用request.getSession(false);将不会产生session。那么为什么jsp会产生session。 查找原因: 在eclipse项目所在的工作空间中,找到jsp的源码
查看index.jsp源代码:
可以看到在index.jsp的java代码中,自动获取了session。
先介绍一下测试环境:
其中servlet和jsp都是默认内容。 测试1:分别请求servlet和jsp,通过浏览器查看是否生成session。 测试结果:请求servlet没有产生session,请求jsp产生了session。 理论知识:jsp的本质是servlet,只有在servlet中调用request.getSession();或者request.getSession(true);服务器才会产生session。如果调用request.getSession(false);将不会产生session。那么为什么jsp会产生session。 查找原因: 在eclipse项目所在的工作空间中,找到jsp的源码
查看index.jsp源代码:
可以看到在index.jsp的java代码中,自动获取了session。
因为jsp中指令session默认配置为true, <%@ page session="true"%> OK,那我们现在试试<%@ page session="false"%>,然后再去访问这个jsp页面。 响应头信息 原始头信息 Content-Length 824 Content-Type text/html;charset=ISO-8859-1 Date Thu, 05 Apr 2012 14:47:38 GMT Server Apache-Coyote/1.1 好了,这时我们发现那个JSESSIONID已经消失了,控制台输出的session==null结果也是true了。 总结: 它的建立需要基于下面两个条件中的任意一个: 1:在servlet中手动调用 request.getsession() 2 :jsp中没有写<%@ page session="false"%> (默认情况下它是<%@ page session="true"%>的) 如果两个条件同时都不满足,那么你建立的只是一个无seesion的连接。 |
2 session何时销毁
一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如 Servlet )调用
要了解Session首先要知道一个概念:Session的销毁只有两种情况: 第一:session调用了 session.invalidate()方法。 第二:前后两次请求超出了session指定的生命周期时间。 注意如果服务器正常关闭不会销毁 其中Session的生命周期时间可以在web.xml配置。默认30分钟 在web.xml可以做如下配置:
如何来证明关闭浏览器的时候Session没有销毁呢? 我们可以创建一个SessionListener 此监听器专门用来监听Session的生命周期的. 代码如下: tomcat 可以持久化到本地文件 然后关闭查看 |