`

HttpSessionListener, HttpSessionAttributeListener的用法 .

阅读更多

以下是一个统计在线会话数的功能,并且让超时的自动销毁

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
		</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的创建到销毁

    对于Session监听,我们主要关注`HttpSessionListener`和`HttpSessionAttributeListener`这两个接口。`HttpSessionListener`可以监听Session的创建和销毁,而`HttpSessionAttributeListener`则可以监听Session属性的...

    JSP监听器用法分析.docx

    本文将深入探讨JSP监听器的使用方法和常见应用场景。 **一、监听器接口** 1. **ServletContextAttributeListener**:这个接口用于监听ServletContext对象中属性的变化,包括添加、删除或修改属性。当这些事件发生...

    javaEE监听器

    ServletContextListener用于监听应用程序的启动和关闭事件,HttpSessionListener则用于监听session的创建和销毁,HttpSessionAttributeListener则在session属性添加、移除或替换时被调用。 2. **JSP监听器**:JSP...

    Servlet监听器例子

    在这个“Servlet监听器例子”中,我们将深入探讨如何使用`ServletContextListener`, `HttpSessionListener`, 和 `HttpSessionAttributeListener`来实现不同的功能。 首先,`ServletContextListener`接口用于监听...

    java监听器学习 统计在线人数

    本教程将深入讲解如何利用Java的监听器机制来统计在线人数,具体涉及到ServletContextListener、HttpSessionListener以及HttpSessionAttributeListener。 首先,`ServletContextListener`是Java Servlet API中的一...

    servlet 监听器的实现

    此外,还可以使用`HttpSessionAttributeListener`来监听会话属性的添加、替换和移除。这在需要对会话中存储的数据进行跟踪或处理时非常有用。 总之,Servlet监听器提供了一种强大的机制,使开发者能够在Web应用的...

    Java实训教程 Java软件开发实战 web开发技术 第6章 listener 共21页.pptx

    - **掌握监听器的使用方法**:学会如何在项目中实现和部署监听器,以便监控和响应特定事件。 #### 二、监听器技术基础 ##### 1. 监听器简介 监听器是一种特殊的技术,用于监测服务器端对象(如`ServletContext`、...

    JSP中的在线人数统计

    为了实现在线人数统计,我们首先需要创建一个监听器类`OnLineDemo.java`,该类实现了`ServletContextListener`、`HttpSessionListener`和`HttpSessionAttributeListener`接口。 1. **监听器类`OnLineDemo.java`**:...

    网络应用开发 之 监听对象的属性变更

    在类中定义对应事件的方法,例如`attributeAdded()`, `attributeRemoved()` 和 `attributeReplaced()`,然后在这些方法中编写处理逻辑。 ```java import javax.servlet.http.HttpSessionAttributeListener; import ...

    STRUTS:listener监听器

    ### STRUTS:Listener监听器详解 #### 一、引言 在Java Web开发中,监听器(Listener)是十分重要的组成部分,...监听器是Java Web开发中不可或缺的一部分,掌握其使用方法对于开发高效稳定的Web应用具有重要意义。

    session监听小例子

    2. `HttpSessionAttributeListener`: 提供了四个方法,`attributeAdded(HttpSessionBindingEvent se)`、`attributeRemoved(HttpSessionBindingEvent se)`、`attributeReplaced(HttpSessionBindingEvent se)`分别用于...

    Servlet的监听器小DEMO

    例如,如果你想要监听会话事件,可以实现`HttpSessionListener`或`HttpSessionAttributeListener`。 2. **实现接口方法**:为所选接口中的方法提供实现。例如,对于`HttpSessionListener`,你需要实现`...

    HttpSession的使用

    // 其他重写的方法... } ``` ### 5. 避免过多的session使用 尽管`HttpSession`对于状态管理非常有用,但过度依赖它可能会导致服务器内存压力增大,因为每个活跃的session都会占用一部分服务器内存。为了优化,...

    Java基于servlet监听器实现在线人数监控功能的方法

    Java基于servlet监听器实现...本文介绍了Java基于servlet监听器实现在线人数监控功能的方法,通过使用ServletContextListener、HttpSessionAttributeListener和HttpSessionListener接口,可以实现在线人数监控功能。

    jsp 登录servlet

    public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener { @Override public void sessionCreated(HttpSessionEvent se) { System.out.println("新会话创建:" + se....

    使用监听器跟踪session的生命周期和session的属性

    - 当一个新的Session被创建时,会调用`sessionCreated(HttpSessionEvent event)`方法,开发者可以在此方法中进行初始化操作,例如记录Session创建的时间、设置默认值等。 - 当一个Session被销毁时,会调用`...

    JavaWeb考试题.

    考生应熟悉`FilterChain.doFilter()`方法和各种监听器接口(如`HttpSessionListener`,`HttpSessionAttributeListener`)。 9. **部署描述符(web.xml)**: web.xml是JavaWeb应用的配置文件,用于定义Servlet、...

    java监听器和过滤器详解

    4. **编写监听器**:实现`HttpSessionListener`接口,重写`sessionCreated()`与`sessionDestroyed()`方法,以便在用户登录和注销时更新在线用户列表。 5. **配置监听器**:在`web.xml`中注册监听器。 6. **页面展示*...

    利用session监听器实现一个客户不能再两个客户端登录。

    在Java Web中,我们可以使用HttpSessionListener或者HttpSessionAttributeListener接口来实现这一目标。这里我们将主要关注HttpSessionBindingListener,因为它可以监听到Session中的属性变化。 1. 创建一个实现了...

    seeeion 监听用户,控制同一个用户不能同时登陆

    此外,你还可以使用`HttpSessionAttributeListener`来监听Session属性的变化,比如当用户信息被添加到Session时触发检查,但这可能会增加额外的处理开销。 除了Java监听器,现代Web框架如Spring Security也提供了...

Global site tag (gtag.js) - Google Analytics