﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-同一个目标，同一个梦想-文章分类-JSP/Servlet</title><link>http://www.blogjava.net/J2EEHOME/category/35834.html</link><description>One Target,One Dream</description><language>zh-cn</language><lastBuildDate>Tue, 03 Mar 2009 13:46:10 GMT</lastBuildDate><pubDate>Tue, 03 Mar 2009 13:46:10 GMT</pubDate><ttl>60</ttl><item><title>jsp中Session的有效期设置、监控怎么实现？</title><link>http://www.blogjava.net/J2EEHOME/articles/257552.html</link><dc:creator>J2EE Home工作室</dc:creator><author>J2EE Home工作室</author><pubDate>Tue, 03 Mar 2009 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/J2EEHOME/articles/257552.html</guid><wfw:comment>http://www.blogjava.net/J2EEHOME/comments/257552.html</wfw:comment><comments>http://www.blogjava.net/J2EEHOME/articles/257552.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/J2EEHOME/comments/commentRss/257552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/J2EEHOME/services/trackbacks/257552.html</trackback:ping><description><![CDATA[<p>&nbsp;* 在JavaWeb中使用HttpSession（以下简称session）对象来表示一个会话。&nbsp;</p>
<p>* Session的创建（代表会话周期的开始）：第一次调用request.getSession()方法时，会创建一个session对象。</p>
<p>&nbsp;* Session的销毁（代表会话周期的结束）：在某个请求周期内调用了Session.invalidate()方法，此请求周期结束后，session被销毁；或者是session超时后自动销毁。</p>
<p>&nbsp;* 对于JSP，如果指定了&lt;%@ page session="false"%&gt;，则在JSP中无法直接访问内置的session变量，同时也不会主动创建session，因为此时JSP未自动执行request.getSession()操作获取session。</p>
<p>&nbsp;* 在session对象刚创建的第一个请求周期内，调用session.isNew()方法将得到true。</p>
<p><strong><font color="#ff1493">１．有效期设置</font></strong> </p>
<p>&nbsp;* 可以在web.xml文件中配置session默认的超时时间（分钟）：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;session-config&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;session-timeout&gt;10&lt;/session-timeout&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/session-config&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也可以调用session. setMaxInactiveInterval()方法设置session超时时间（分钟） </p>
<p><font color="#ff1493">２．监控</font> &nbsp;</p>
<p>* 通过SessionListenr可以监听session的创建和销毁，步骤：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>1.写一个类MySessionListener，实现javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;2.在web.xml中配置SessionListener：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&lt;listener&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&lt;listener-class&gt;MySessionListener类全名&lt;/listener-class&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&lt;/listener&gt;&nbsp;&nbsp;&nbsp; </p>
<p>* 当session 被创建和销毁时，容器会分别调用SessionListener的sessionCreated()方法和sessionDestroyed()方法，这两个方法中传入了一个参数对象HttpSessionEvent，可以通过此对象的getSession()方法获取session对象。</p>
<p>&nbsp;应用示例：在线人数统计</p>
<p>import java.util.HashSet;</p>
<p>import javax.servlet.ServletContext;</p>
<p>import javax.servlet.http.HttpSession;</p>
<p>import javax.servlet.http.HttpSessionEvent;</p>
<p>import javax.servlet.http.HttpSessionListener;&nbsp;</p>
<p>public class MySessionListener implements HttpSessionListener {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;public void sessionCreated(HttpSessionEvent event) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;HttpSession session = event.getSession();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>ServletContext application = session.getServletContext();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;// 在application范围由一个HashSet集保存所有的session&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;HashSet sessions = (HashSet) application.getAttribute("sessions");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>if (sessions == null) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>sessions = new HashSet();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>application.setAttribute("sessions", sessions);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>// 新创建的session均添加到HashSet集中&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;sessions.add(session);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>// 可以在别处从application范围中取出sessions集合&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>// 然后使用sessions.size()获取当前活动的session数，即为&#8220;在线人数&#8221;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>public void sessionDestroyed(HttpSessionEvent event) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>HttpSession session = event.getSession();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;ServletContext application = session.getServletContext();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;HashSet sessions = (HashSet) application.getAttribute("sessions");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;// 销毁的session均从HashSet集中移除&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>sessions.remove(session);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>}</p>
<p>}</p>
<img src ="http://www.blogjava.net/J2EEHOME/aggbug/257552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/J2EEHOME/" target="_blank">J2EE Home工作室</a> 2009-03-03 14:49 <a href="http://www.blogjava.net/J2EEHOME/articles/257552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>