背景如下:
希望实现当用户点击
jsp
页面上的注销按钮时实现在数据库中保存用户注销的时间。另外如果用户没有正常退出,则在
session
超时时自动记录超时时候的时间。
仿照找到的关于利用
HttpSessionListener
实现在线人数统计的方法来处理:
对每一个正在访问的用户,
J2EE
应用服务器会为其建立一个对应的
HttpSession
对象。当一个浏览器第一次访问网站的时候,
J2EE
应用服务器会新建一个
HttpSession
对象,并触发
HttpSession
创建事件,如果注册了
HttpSessionListener
事件监听器,则会调用
HttpSessionListener
事件监听器的
sessionCreated
方法。相反,当这个浏览器访问结束超时的时候,
J2EE
应用服务器会销毁相应的
HttpSession
对象,触发
HttpSession
销毁事件,同时调用所注册
HttpSessionListener
事件监听器的
sessionDestroyed
方法。
可见,对应于一个用户访问的开始和结束,相应的有
sessionCreated
方法和
sessionDestroyed
方法执行。因此,我们只需在
HttpSessionListener
实现类的
sessionDestroyed
方法中让其执行数据库的更新操作就可以了。
下面是示例代码:
package libms.session;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import libms.service.UserServiceImpl;
public class UserOnlineListener implements HttpSessionListener {
private static long userId = 0;
public static void setUserId(long id) {
userId = id;
}
public void sessionCreated(HttpSessionEvent event) {
}
public void sessionDestroyed(HttpSessionEvent event) {
if (userId > 0) {
// 这里写更新数据库的操作
}
}
}
在
web.xml
文件中注册一个监听器:
<web-app>
……
<listener>
<listener-class>
com.online.OnlineCountListener
</listener-class>
</listener>
……
</web-app>
在用户登录的时候,把用户的
id
使用
UserOnlineListener .setUserId (id)
的方法保存下来。当用户点击注销按钮的时候,调用
session.invalidate
()
的方法清空
session
,就会触发监听器
sessionDestroyed(HttpSessionEvent
event)
方法了,同样,如果用户非正常退出,则在
session
超时的时候,也会出发该方法。
|
相关推荐
93、判断session是否过期 94、参数式查询数据库 95、取得数据库中各栏名称 96、使用JavaBean、设置和获取Bean的属性 97、设置Bean的一个属性与输入参数关联 98、实现基于数据库的站内搜索 99、DOM读取XML文档 100、...
1. `WriteSession2DB`方法:登录验证后将Session数据写入数据库。 2. `RemoveSession4DB`方法:用户退出时,删除数据库中对应的Session数据。 3. 重定向到JSP的ASPX页面:在`Page_Load`事件中,获取URL参数中的...
4. **配置过期策略**:根据业务需求设置Redis中的Session过期时间,确保安全性和性能。 **实现步骤**: 1. 安装和配置Redis服务器。 2. 在Tomcat项目中添加Redis Session Manager依赖。 3. 修改Tomcat配置文件,...
总的来说,通过JSP实现Web网页访问次数涉及服务器端编程、文件操作(或数据库操作)、状态管理等多个方面。这个简单的Demo展示了基本的思路,但在实际应用中,还需要根据具体需求进行优化和扩展。
记录用户登录日志可以通过在验证成功后将相关信息写入数据库或文本文件来实现。技术可以选择SQL的INSERT语句,或者使用日志框架如Log4j来记录这些事件。 9. 错误处理: 当后台验证出现问题时,应提供适当的错误...
// 存储和更新登录计数的逻辑,可能涉及数据库操作或使用session } } ``` 2. 配置监听器:在web.xml文件中,我们需要声明刚刚创建的监听器类,以便服务器在启动时加载它。 ```xml ... <listener-class>...
93、判断session是否过期 94、参数式查询数据库 95、取得数据库中各栏名称 96、使用JavaBean、设置和获取Bean的属性 97、设置Bean的一个属性与输入参数关联 98、实现基于数据库的站内搜索 99、DOM读取XML文档 100、...
2. **导入必要的库**:导入`java.sql`库,虽然示例代码中没有使用,但通常在用户登录页面可能涉及数据库操作。 3. **JavaScript函数`loadimage`**:当页面加载或用户重新加载验证码时,该函数会通过添加随机参数来...
Persistent Cookie 是永久的 Cookie,直到其过期或被删除。 二、Java 中的 Cookie 操作 在 Java 中,使用 Cookie 需要 import 相关的包,例如 javax.servlet.http.Cookie。使用 Cookie 的步骤如下: 1. 创建 ...
当用户离开或Session过期时,服务器会自动销毁该Session。 #### 4. MVC设计模式详解 - **MVC模式**:“Model-View-Controller”模式是一种常见的软件架构模式,主要用于构建用户界面。MVC将应用程序分为三个核心...
在IT行业中,尤其是在Web服务开发领域,`Tomcat`是一个广泛应用的开源Java Servlet容器,它实现了Java EE的Servlet和JSP规范。而`Redis`则是一款高性能的键值数据库,常用于缓存和数据共享,以提高应用的性能。当...
3. **上下文参数优化**:例如,通过`sessionTimeout`控制会话过期时间,减少无效会话的内存占用;`useBodyEncodingForURI`可以避免编码问题,提高处理URL的效率。 4. **Web应用部署优化**:将静态资源(如CSS、JS、...