`
zhao103804
  • 浏览: 124645 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JSP解决session过期时写入数据库操作

阅读更多

 

 

背景如下:

    希望实现当用户点击 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 超时的时候,也会出发该方法。

分享到:
评论

相关推荐

    JSP实例编程100例

    93、判断session是否过期 94、参数式查询数据库 95、取得数据库中各栏名称 96、使用JavaBean、设置和获取Bean的属性 97、设置Bean的一个属性与输入参数关联 98、实现基于数据库的站内搜索 99、DOM读取XML文档 100、...

    jsp和asp.net共享session值示例代码

    1. `WriteSession2DB`方法:登录验证后将Session数据写入数据库。 2. `RemoveSession4DB`方法:用户退出时,删除数据库中对应的Session数据。 3. 重定向到JSP的ASPX页面:在`Page_Load`事件中,获取URL参数中的...

    20190629+tomcat8+redis实现session共享.zip

    4. **配置过期策略**:根据业务需求设置Redis中的Session过期时间,确保安全性和性能。 **实现步骤**: 1. 安装和配置Redis服务器。 2. 在Tomcat项目中添加Redis Session Manager依赖。 3. 修改Tomcat配置文件,...

    JSP实现web网页访问次数

    总的来说,通过JSP实现Web网页访问次数涉及服务器端编程、文件操作(或数据库操作)、状态管理等多个方面。这个简单的Demo展示了基本的思路,但在实际应用中,还需要根据具体需求进行优化和扩展。

    登录验证页面jsp.pdf

    记录用户登录日志可以通过在验证成功后将相关信息写入数据库或文本文件来实现。技术可以选择SQL的INSERT语句,或者使用日志框架如Log4j来记录这些事件。 9. 错误处理: 当后台验证出现问题时,应提供适当的错误...

    java jsp listener小用法

    // 存储和更新登录计数的逻辑,可能涉及数据库操作或使用session } } ``` 2. 配置监听器:在web.xml文件中,我们需要声明刚刚创建的监听器类,以便服务器在启动时加载它。 ```xml ... &lt;listener-class&gt;...

    JAP编程学习100例

    93、判断session是否过期 94、参数式查询数据库 95、取得数据库中各栏名称 96、使用JavaBean、设置和获取Bean的属性 97、设置Bean的一个属性与输入参数关联 98、实现基于数据库的站内搜索 99、DOM读取XML文档 100、...

    Jsp生成页面验证码的方法

    2. **导入必要的库**:导入`java.sql`库,虽然示例代码中没有使用,但通常在用户登录页面可能涉及数据库操作。 3. **JavaScript函数`loadimage`**:当页面加载或用户重新加载验证码时,该函数会通过添加随机参数来...

    如何在java文件中实现写入cookie和用户登陆验证操.doc

    Persistent Cookie 是永久的 Cookie,直到其过期或被删除。 二、Java 中的 Cookie 操作 在 Java 中,使用 Cookie 需要 import 相关的包,例如 javax.servlet.http.Cookie。使用 Cookie 的步骤如下: 1. 创建 ...

    java面试题

    当用户离开或Session过期时,服务器会自动销毁该Session。 #### 4. MVC设计模式详解 - **MVC模式**:“Model-View-Controller”模式是一种常见的软件架构模式,主要用于构建用户界面。MVC将应用程序分为三个核心...

    tomcat+redis依赖包

    在IT行业中,尤其是在Web服务开发领域,`Tomcat`是一个广泛应用的开源Java Servlet容器,它实现了Java EE的Servlet和JSP规范。而`Redis`则是一款高性能的键值数据库,常用于缓存和数据共享,以提高应用的性能。当...

    tomcat优化

    3. **上下文参数优化**:例如,通过`sessionTimeout`控制会话过期时间,减少无效会话的内存占用;`useBodyEncodingForURI`可以避免编码问题,提高处理URL的效率。 4. **Web应用部署优化**:将静态资源(如CSS、JS、...

Global site tag (gtag.js) - Google Analytics