javax.servlet.http.HttpSession 这个类是很常用的,每当我们浏览网站,不论有没有登陆,都会产生1个session,它记录了和浏览者相关的数据;
下面介绍session的2个监听器接口:
1)javax.servlet.http.HttpSessionBindingListen er;
实现这个接口的类,每当被存放到session或从session中移除都会出发接口中相应的方法,从而实现监听的效果;
2)javax.servlet.http.HttpSessionListener;
实现这个接口的类,本身就是1个监听器,每当有session生成或消亡时,都触发接口中相应的方法,从而实现监听器的效果;
HttpSessionListener 的实现类本身就是一个监听器,要使用它需要在 web.xml 中启动这个监听器,例如
3)这2个监听器是有区别的
前者的触发取决于 session 中加入的属性;
后者的触发取决于 session 本身的产生和消亡;
与shangshu 之类似的还有
对ServletContext的监听和对Request监听
应用:当前在线人数列表
在线人数列表是对所有人起作用,数据应放到application中。即ServletContext对象
OnLineDemo.java
online.jsp
logout.jsp
下面介绍session的2个监听器接口:
1)javax.servlet.http.HttpSessionBindingListen
实现这个接口的类,每当被存放到session或从session中移除都会出发接口中相应的方法,从而实现监听的效果;
2)javax.servlet.http.HttpSessionListener;
实现这个接口的类,本身就是1个监听器,每当有session生成或消亡时,都触发接口中相应的方法,从而实现监听器的效果;
HttpSessionListener 的实现类本身就是一个监听器,要使用它需要在 web.xml 中启动这个监听器,例如
Xml代码
-
<listener>
-
<listener-class>packname.classname</listener-class> -
</listener>
3)这2个监听器是有区别的
前者的触发取决于 session 中加入的属性;
后者的触发取决于 session 本身的产生和消亡;
与shangshu 之类似的还有
对ServletContext的监听和对Request监听
应用:当前在线人数列表
在线人数列表是对所有人起作用,数据应放到application中。即ServletContext对象
OnLineDemo.java
Java代码
package demo;
-
-
import
java.util.ArrayList; -
import
java.util.List; -
-
import
javax.servlet.ServletContext; -
import
javax.servlet.ServletContextEvent; -
import
javax.servlet.ServletContextListener; -
import
javax.servlet.http.HttpSessionAttributeList ener; -
import
javax.servlet.http.HttpSessionBindingEvent; -
import
javax.servlet.http.HttpSessionEvent; -
import
javax.servlet.http.HttpSessionListener; -
-
-
-
public
class OnlineDemo implements ServletContextListener, HttpSessionListener, -
HttpSessionAttributeList ener { -
// 声明一个ServletContext对象 -
private ServletContext application = null; -
-
public void contextInitialized(ServletContextEvent sce) { -
// 容器初始化时,向application中存放一个空的容器 -
this.application = sce.getServletContext(); -
this.application.setAttribute("alluser", new ArrayList()); -
} -
-
public void contextDestroyed(ServletContextEvent sce) { -
} -
-
public void sessionCreated(HttpSessionEvent se) { -
} -
-
public void sessionDestroyed(HttpSessionEvent se) { -
// 将用户名称从列表中删除 -
List l = (List) this.application.getAttribute("alluser"); -
String value = (String) se.getSession().getAttribute("uname"); -
l.remove(value); -
this.application.setAttribute("alluser", l); -
} -
-
public void attributeAdded(HttpSessionBindingEvent se) { -
// 如果登陆成功,则将用户名保存在列表之中 -
List l = (List) this.application.getAttribute("alluser"); -
l.add(se.getValue()); -
this.application.setAttribute("alluser", l); -
} -
-
public void attributeRemoved(HttpSessionBindingEvent se) { -
} -
-
public void attributeReplaced(HttpSessionBindingEvent se) { -
} -
}
online.jsp
Html代码
-
<%@
page contentType="text/html;charset=gb2312"%> -
<%@
page import="java.util.*"%> -
<form
action="online.jsp" method="post"> -
用户名:
-
<input
type="text" name="name"> -
<input
type="submit" value="登陆"> -
<a
href="logout.jsp">注销</a> -
</form>
-
<!--
向session接收输入的用户名 --> -
<%
-
if(request.getParameter("name")!=null) -
session.setAttribute("uname",request.getParameter("name")) ; -
%>
-
<h2>在线人员</h2>
-
<hr>
-
<%
-
List l = (List)application.getAttribute("allUser"); -
for(Object o : l) -
out.println(o); -
%>
logout.jsp
Html代码
-
<%
-
session.invalidate() ; -
%>