HttpSessionListener有2个接口需要实现
sessionCreated//新建一个会话时候触发也可以说是客户端第一次和服务器交互时候触发
sessionDestroyed//销毁会话的时候 一般来说只有某个按钮触发进行销毁 或者配置定时销毁 ( 很多文献中提到说浏览器关闭时候会销毁 但是楼主通过各种现行主流浏览器测试效果不尽如人意)
HttpSessionAttributeListener有3个接口需要实现
attributeAdded//在session中添加对象时触发此操作 笼统的说就是调用setAttribute这个方法时候会触发的
attributeRemoved//修改、删除session中添加对象时触发此操作 笼统的说就是调用 removeAttribute这个方法时候会触发的
attributeReplaced//在Session属性被重新设置时
以下是一个统计在线会话数的功能,并且让超时的自动销毁
web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <listener>
- <listener-class>
- org.xiosu.listener.onlineListener (实现session监听器接口的类的名字,包也要写上)
- </listener-class>
- </listener>
- <!--默认的会话超时时间间隔,以分钟为单位 -->
- <session-config>
- <session-timeout>1</session-timeout>
- </session-config>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
onlineListener.java
- package org.xiosu.listener;
- import java.util.ArrayList;
- import javax.servlet.ServletContext;
- import javax.servlet.http.HttpSessionAttributeListener;
- import javax.servlet.http.HttpSessionBindingEvent;
- import javax.servlet.http.HttpSessionEvent;
- import javax.servlet.http.HttpSessionListener;
- public class onlineListener implements HttpSessionListener,
- HttpSessionAttributeListener {
- // 参数
- ServletContext sc;
- ArrayList list = new ArrayList();
- // 新建一个session时触发此操作
- public void sessionCreated(HttpSessionEvent se) {
- sc = se.getSession().getServletContext();
- System.out.println("新建一个session");
- }
- // 销毁一个session时触发此操作
- public void sessionDestroyed(HttpSessionEvent se) {
- System.out.println("销毁一个session");
- if (!list.isEmpty()) {
- list.remove((String) se.getSession().getAttribute("userName"));
- sc.setAttribute("list", list);
- }
- }
- // 在session中添加对象时触发此操作,在list中添加一个对象
- public void attributeAdded(HttpSessionBindingEvent sbe) {
- list.add((String) sbe.getValue());
- System.out.println(sbe.getValue());
- sc.setAttribute("list", list);
- }
- // 修改、删除session中添加对象时触发此操作
- public void attributeRemoved(HttpSessionBindingEvent arg0) {
- System.out.println("5555555");
- }
- public void attributeReplaced(HttpSessionBindingEvent arg0) {
- System.out.println("77777777");
- }
- }
index.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme() + "://"
- + request.getServerName() + ":" + request.getServerPort()
- + path + "/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'index.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <%
- session = request.getSession(false);
- if (session != null)
- session.invalidate();
- %>
- <form action="isOnline.jsp" method="post">
- 用户名:
- <input type="text" name="uName" />
- <input type="submit" value="上线">
- </body>
- </html>
isOnline.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'isOnline.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <%
- session=request.getSession();
- session.setAttribute("userName",request.getParameter("uName"));
- response.sendRedirect("showOnline.jsp");
- %>
- </body>
- </html>
showOnline.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'showOnline.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <%
- ArrayList showList=(ArrayList)(getServletContext().getAttribute("list"));
- out.print("在线人数 "+showList.size()+"<br>");
- for(int i=0;i<showList.size();i++){
- out.print(showList.get(i)+"在线"+"<br>");
- }
- %>
- <br>
- <a href="index.jsp">退出</a>
- </body>
- </html>
相关推荐
对于Session监听,我们主要关注`HttpSessionListener`和`HttpSessionAttributeListener`这两个接口。`HttpSessionListener`可以监听Session的创建和销毁,而`HttpSessionAttributeListener`则可以监听Session属性的...
在这个“Servlet监听器例子”中,我们将深入探讨如何使用`ServletContextListener`, `HttpSessionListener`, 和 `HttpSessionAttributeListener`来实现不同的功能。 首先,`ServletContextListener`接口用于监听...
本教程将深入讲解如何利用Java的监听器机制来统计在线人数,具体涉及到ServletContextListener、HttpSessionListener以及HttpSessionAttributeListener。 首先,`ServletContextListener`是Java Servlet API中的一...
本文将深入探讨JSP监听器的使用方法和常见应用场景。 **一、监听器接口** 1. **ServletContextAttributeListener**:这个接口用于监听ServletContext对象中属性的变化,包括添加、删除或修改属性。当这些事件发生...
在Java Servlet API中,提供了多种监听器接口,例如HttpSessionListener、HttpSessionAttributeListener和HttpSessionBindingListener,用于监听会话的创建、销毁、属性添加、修改和移除等事件。 在这个特定的例子...
- 当一个新的Session被创建时,会调用`sessionCreated(HttpSessionEvent event)`方法,开发者可以在此方法中进行初始化操作,例如记录Session创建的时间、设置默认值等。 - 当一个Session被销毁时,会调用`...
为了实现在线人数统计,我们首先需要创建一个监听器类`OnLineDemo.java`,该类实现了`ServletContextListener`、`HttpSessionListener`和`HttpSessionAttributeListener`接口。 1. **监听器类`OnLineDemo.java`**:...
这里主要涉及到了Java Web应用中的监听器,尤其是`HttpSessionListener`和`HttpSessionAttributeListener`。 ### 标题解析:Java可以监听客户端的请求、服务端的操作等 这个标题明确指出了Java可以通过特定的机制...
此外,还可以使用`HttpSessionAttributeListener`来监听会话属性的添加、替换和移除。这在需要对会话中存储的数据进行跟踪或处理时非常有用。 总之,Servlet监听器提供了一种强大的机制,使开发者能够在Web应用的...
为了监听`HttpSession`的创建、销毁以及属性变化,可以使用`HttpSessionListener`和`HttpSessionAttributeListener`。注册这些监听器可以让我们在特定事件发生时执行相应的操作,如记录日志、清理资源等。 ```java ...
例如,如果你想要监听会话事件,可以实现`HttpSessionListener`或`HttpSessionAttributeListener`。 2. **实现接口方法**:为所选接口中的方法提供实现。例如,对于`HttpSessionListener`,你需要实现`...
Servlet容器支持监听器(Listener),如`HttpSessionListener`和`HttpSessionAttributeListener`,它们可以监听Session的创建、销毁和属性变化。监听器可用来统计在线用户、清理过期Session等。 ```java @Web...
监听器是实现了特定接口的Java类,这些接口如HttpSessionListener、HttpSessionAttributeListener等,它们是Servlet API的一部分。通过注册监听器,我们可以在session创建、销毁、属性添加、修改或移除等事件发生时...
例如,一个在线统计的例子中,我们定义了一个类ONline,这个类实现了ServletContextListener、HttpSessionListener和HttpSessionAttributeListener接口。在contextInitialized方法中初始化用户列表,在...
在"监听器访问计数"的场景下,我们通常会使用HttpSessionListener或者HttpSessionAttributeListener来实现在线人数的统计。例如,当一个用户打开一个Web页面时,创建一个新的会话,监听器会接收到这个事件并增加在线...
2. `HttpSessionAttributeListener`: 提供了四个方法,`attributeAdded(HttpSessionBindingEvent se)`、`attributeRemoved(HttpSessionBindingEvent se)`、`attributeReplaced(HttpSessionBindingEvent se)`分别用于...
3. **Session监听器**:通过实现HttpSessionListener或HttpSessionAttributeListener接口,可以在Session创建、销毁或属性变化时执行特定操作。 4. **及时清理Session**:为了避免内存泄漏,开发者应合理设计...
在Java Web中,我们可以使用HttpSessionListener或者HttpSessionAttributeListener接口来实现这一目标。这里我们将主要关注HttpSessionBindingListener,因为它可以监听到Session中的属性变化。 1. 创建一个实现了...
这篇文章介绍了通过使用Java的监听器(Listener)机制来实现网站在线人数统计的示例,重点在于如何利用ServletContextListener、HttpSessionAttributeListener和HttpSessionListener这三个监听器接口。 首先,我们...