以下是一个统计在线会话数的功能,并且让超时的自动销毁
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监听,我们主要关注`HttpSessionListener`和`HttpSessionAttributeListener`这两个接口。`HttpSessionListener`可以监听Session的创建和销毁,而`HttpSessionAttributeListener`则可以监听Session属性的...
本文将深入探讨JSP监听器的使用方法和常见应用场景。 **一、监听器接口** 1. **ServletContextAttributeListener**:这个接口用于监听ServletContext对象中属性的变化,包括添加、删除或修改属性。当这些事件发生...
ServletContextListener用于监听应用程序的启动和关闭事件,HttpSessionListener则用于监听session的创建和销毁,HttpSessionAttributeListener则在session属性添加、移除或替换时被调用。 2. **JSP监听器**:JSP...
在这个“Servlet监听器例子”中,我们将深入探讨如何使用`ServletContextListener`, `HttpSessionListener`, 和 `HttpSessionAttributeListener`来实现不同的功能。 首先,`ServletContextListener`接口用于监听...
本教程将深入讲解如何利用Java的监听器机制来统计在线人数,具体涉及到ServletContextListener、HttpSessionListener以及HttpSessionAttributeListener。 首先,`ServletContextListener`是Java Servlet API中的一...
此外,还可以使用`HttpSessionAttributeListener`来监听会话属性的添加、替换和移除。这在需要对会话中存储的数据进行跟踪或处理时非常有用。 总之,Servlet监听器提供了一种强大的机制,使开发者能够在Web应用的...
- **掌握监听器的使用方法**:学会如何在项目中实现和部署监听器,以便监控和响应特定事件。 #### 二、监听器技术基础 ##### 1. 监听器简介 监听器是一种特殊的技术,用于监测服务器端对象(如`ServletContext`、...
为了实现在线人数统计,我们首先需要创建一个监听器类`OnLineDemo.java`,该类实现了`ServletContextListener`、`HttpSessionListener`和`HttpSessionAttributeListener`接口。 1. **监听器类`OnLineDemo.java`**:...
在类中定义对应事件的方法,例如`attributeAdded()`, `attributeRemoved()` 和 `attributeReplaced()`,然后在这些方法中编写处理逻辑。 ```java import javax.servlet.http.HttpSessionAttributeListener; import ...
### STRUTS:Listener监听器详解 #### 一、引言 在Java Web开发中,监听器(Listener)是十分重要的组成部分,...监听器是Java Web开发中不可或缺的一部分,掌握其使用方法对于开发高效稳定的Web应用具有重要意义。
2. `HttpSessionAttributeListener`: 提供了四个方法,`attributeAdded(HttpSessionBindingEvent se)`、`attributeRemoved(HttpSessionBindingEvent se)`、`attributeReplaced(HttpSessionBindingEvent se)`分别用于...
例如,如果你想要监听会话事件,可以实现`HttpSessionListener`或`HttpSessionAttributeListener`。 2. **实现接口方法**:为所选接口中的方法提供实现。例如,对于`HttpSessionListener`,你需要实现`...
// 其他重写的方法... } ``` ### 5. 避免过多的session使用 尽管`HttpSession`对于状态管理非常有用,但过度依赖它可能会导致服务器内存压力增大,因为每个活跃的session都会占用一部分服务器内存。为了优化,...
Java基于servlet监听器实现...本文介绍了Java基于servlet监听器实现在线人数监控功能的方法,通过使用ServletContextListener、HttpSessionAttributeListener和HttpSessionListener接口,可以实现在线人数监控功能。
public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener { @Override public void sessionCreated(HttpSessionEvent se) { System.out.println("新会话创建:" + se....
- 当一个新的Session被创建时,会调用`sessionCreated(HttpSessionEvent event)`方法,开发者可以在此方法中进行初始化操作,例如记录Session创建的时间、设置默认值等。 - 当一个Session被销毁时,会调用`...
考生应熟悉`FilterChain.doFilter()`方法和各种监听器接口(如`HttpSessionListener`,`HttpSessionAttributeListener`)。 9. **部署描述符(web.xml)**: web.xml是JavaWeb应用的配置文件,用于定义Servlet、...
4. **编写监听器**:实现`HttpSessionListener`接口,重写`sessionCreated()`与`sessionDestroyed()`方法,以便在用户登录和注销时更新在线用户列表。 5. **配置监听器**:在`web.xml`中注册监听器。 6. **页面展示*...
在Java Web中,我们可以使用HttpSessionListener或者HttpSessionAttributeListener接口来实现这一目标。这里我们将主要关注HttpSessionBindingListener,因为它可以监听到Session中的属性变化。 1. 创建一个实现了...
此外,你还可以使用`HttpSessionAttributeListener`来监听Session属性的变化,比如当用户信息被添加到Session时触发检查,但这可能会增加额外的处理开销。 除了Java监听器,现代Web框架如Spring Security也提供了...