解决方案 »
- struts2 的hello world出错
- JSP中读取数据库中的数据问题
- spring+hibernate 使用SQLQuery连接了一个ORACLE数据库,现在用户退出系统,要求断开数据库连接,应该怎么写啊
- 开源ERP Openbravo学习www.java-erp.cn
- c#中使用skinEngine渲染问题
- 怎么样才能有一个编程思路,我写程序时,总是没有思路
- 如何用javamail定时发送邮件?
- 一个很急的问题!!!!!!!!!!!!!!.谢谢各位先.
- Tomcat5.0.28服务器配置问题
- 看了几天的 struts 一般的简单代码能看明白了,但是还有个关键的问题没有搞清楚,谁来指点下我
- 利用Struts2的<s:autocompleter>标签实现动态级联下拉列表的问题
- 详解@GeneratedValue @SequenceGenerator @GenericGenerator
楼主可以将这个jsp分解为2个,一个setMaxInactiveInterval并setAttribute,另一个getAttribute,两个jsp间隔1秒以上先后访问,这就没有歧义了。
getId为何不报错,是因为session销毁并不意味着session对象被垃圾回收,对象还在,只是状态是销毁状态。而getId方法和是否销毁这个状态无关,它总是可以返回session对象的id
但是您将的第一句我不太明白,我的问题是处在对Thread.sleep函数的理解上吧?
<%
session.setAttribute("a", "love");
session.setMaxInactiveInterval(3);
Thread.sleep(5000);
%>
<br>
<%=session.getAttribute("a")%>
<br>
<%=session.getId()%>
<a href="index2.jsp">页面2</a>JSP2.jsp页面的部分代码<%=session.getAttribute("a")%>
这段代码执行后,第一个页面是可以正常显示getId()和getAttribute()的值,而第二个页面显示了null
session的有效期设置为3秒,线程暂停了5秒,最后session还是失效了,是吗?
但是更多的处理步骤,如清理Session中对象,则有可能需要等到跨线请求退出后才能做,因为涉及到线程同步。更深一步想,这是一种保护措施,防止一个请求处理过程中需要考虑取到的Session竟然已经超期这样的意外。
还是有些小问题想明确的确定下:
1、一个浏览器的请求时从什么时候开始的?是第一句jsp代码吗?
2、超时到底是从本次请求起始开始计算还是从请求退出开始计算?超时所指的具体范围是什么?
3、Thread.sleep()方法所休眠的时间到底算不算做"请求"所消耗的时间?
本人基础很差,见笑了~
2、超时从对Session的上一次访问开始算起。Session是全局性的(跨请求的),超时当然也就是全局性的。
3、当然算请求处理的时间开销。上面三个概念应该是直白的。
唯一困难的地方在于session会在一个线程(也就是一个请求处理周期)中被取出并在变量中持有,然后另一个线程(超时控制的)对session做了超时处理,这时有些事情就会因为锁啊同步啊这些问题而变得不好预料了。
我的做法是尽量避开这些话题(也就是前面所说的灰色区域)
非常感谢magong的回复~