实现 HttpSessionListener

2023-12-27

我面临着一个类似的问题 https://stackoverflow.com/questions/1439743/whats-wrong-with-my-listener-in-my-web-xml并了解到我的侦听器类将在读取 web.xml 时实例化。我在侦听器类中有几个函数供主 servlet 的 doPost 使用(它与数据库(mysql)交互以读取/写入有关用户的数据。)以及 HttpSessionListener 的方法。那么是什么阻止了容器加载侦听器类。我收到 404 错误。

snippet:

public class EntryServlet extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {


    PlayersList playa = new PlayersList(); //listener class

    if(!playa.isExisting(params[3])){
        if(params[1].equals("Register")){           
            playa.addPlayer(params);
        }
    }       
    else
        out.println("Username already exists");


    if(playa.isExisting(params[argUName],params[argUPwd])){
        HttpSession session = request.getSession(true);     
        session.setMaxInactiveInterval(600);            
        HashMap playersMap = playa.getActivePlayers();
        //code . .
    }
    else
        out.println("Couldn't locate player Name!");    
        out.println(playa.getIn());         
}

监听类:

public class PlayersList implements HttpSessionListener{
private Connection cn;
private Statement st;

PlayersList(){
    try{
        Class.forName("com.mysql.jdbc.Driver");
        cn =  DriverManager.getConnection("jdbc:mysql://localhost/homeDbse\'","root","");
        st = cn.createStatement();
    }
    catch(ClassNotFoundException ce){}
    catch(SQLException se){}
    catch(Exception e){}
}   

public boolean isExisting(String player){
    //interaction with dbse
}   

public void addPlayer(String[] args){
    //interaction with dbse

}   
public void sessionCreated(HttpSessionEvent se){
    //session managing
}   
public void sessionDestroyed(HttpSessionEvent se){
    //session managing
}

这种做法是完全错误的。你应该从另一边做。创建一个Player实现的对象HttpSessionBindingListener http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpSessionBindingListener.html并使用它来代替。

public class Player implements HttpSessionBindingListener {

    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        // Add player to list.
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        // Remove player from list.
    }

    // ...

}

The valueBound()当你这样做时将会被触发

Player player = new Player(name);
request.getSession().setAttribute("player", player);

The valueUnbound()当会话过期或删除属性时将被触发。


与具体问题无关,您的代码中存在严重的 JDBC 问题。每当数据库由于打开时间过长而导致连接超时时,该应用程序就会崩溃。您应该在以下位置打开和关闭连接、语句和结果集最短的可能范围。即,将它们关闭在finally完全相同的块try执行 SQL 查询的块。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现 HttpSessionListener 的相关文章

随机推荐

  • GDB 中的断点命名

    有没有办法在 GDB 中命名一个断点 以便在断点被击中时 GDB 给出一些名称而不是数字 IE 在方法 main 中命中断点 非常重要的断点 不 没有办法做到这一点 但您可以使用 命令 命令和打印命令 e g break main comm
  • 如何使用变量名调用java方法?

    假设我有 Method1 void Method2 void 有没有办法我可以选择其中一个带有变量的方法 String MyVar 2 MethodMyVar 使用反射 Method method WhateverYourClassIs c
  • 如何根据单个用户定义的文字自动添加文字定义?

    C 11 offers 用户定义的文字 http en wikipedia org wiki C 2B 2B11 User defined literals 我刚刚开始使用它们 这让我想知道是否可以自动添加所有SI 乘数 http en w
  • Keras + DataFrameMapper + make_pipeline,input_dim 困境

    我的数据看起来像这样 import pandas as pd from sklearn pandas import DataFrameMapper CategoricalImputer from sklearn preprocessing
  • 法罗双重调度

    有人可以解释一下 Pharo 4 0 中使用 Smalltalk 进行双重调度的过程吗 我是 Smalltalk 的新手 很难掌握这个概念 因为与 Smalltalk 相比 它在 Java 中的实现方式非常不同 如果有人能用一个例子来解释它
  • 组合 XPATH 轴(前同级和后同级)

    假设我有以下 UL ul li barry li li bob li li carl li li dave li li roger li li steve li ul 我需要获取鲍勃和罗杰之间的所有 LI 我可以抓住鲍勃之后的一切 ul l
  • 编写一个函数来删除对象(如果存在)

    我正在尝试编写一个函数来删除对象 如果存在 原因是我想摆脱日志消息错误 未找到对象 arg 我尝试了以下方法 ifrm lt function arg if exists as character substitute arg rm arg
  • 为什么 pytorch 中的正则化和临时代码不匹配?pytorch 中的正则化公式是什么?

    我一直在尝试对 PyTorch 中的二元分类模型进行 L2 正则化 但是当我匹配 PyTorch 的结果和临时代码时 它不匹配 火炬代码 class LogisticRegression nn Module def init self n
  • 如何通过 Java 在 SQLite 中强制执行外键约束?

    默认情况下 SQLite 似乎不强制执行外键 我在用着sqlitejdbc v056 jar http www zentus com sqlitejdbc 我读过使用PRAGMA foreign keys ON 将打开外键约束 并且需要在每
  • 算法中的陌生符号:∀是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在阅读一个算法 这是一个基于A 的寻路算法 它包含一个我不熟悉的数学符号 这是上下文 v s g s mins pred s v s
  • import 不能在 chrome 61 中使用?

    我尝试在最新发布的 chrome 版本 即 chrome 61 中玩 ES6 功能 在使用过程中遇到了错误import关键词 从技术上来说 import使用以下方法 但控制台显示错误 import Mymodule from Mymodul
  • 自然连接的维恩图

    我一直在尝试完全理解 sql 连接的概念 维恩图在这方面帮助了我很多 我发现它们适用于所有类型的连接 但不适用于自然连接 自然连接的维恩图是什么样子的 维恩图对于理解自然连接或内连接没有太大帮助 大多数与 Stack Overflow 和网
  • 如何将数据作为 trie 存储在表中? (SQL 服务器)

    为了方便起见 该表包含英语词典中的所有单词 我想做的是将数据存储为特里树 这样我就可以遍历 trie 的不同分支并返回最相关的结果 首先 如何将表中的数据存储为 trie 结构 其次 如何遍历这棵树 如果有帮助的话 建议上一个问题 http
  • 如何在 Playframework2 中的 i18n 中使用单引号?

    在开发法语应用程序时 法语充满了单引号 我需要使用带有单引号和许多其他重音字符的 i18n 所以这是我的摘录messages fr FR file some key C est la vie 这是输出 Cest la vie 如何在消息中使
  • 为什么我的规范化路径带有前缀 \\?\

    我正在开发一个个人项目 试图通过规范化 Rust 中的相对路径来解决该项目 然而 每当我这样做时 新路径都会以一个奇怪的前缀 顺序 例如 简单的事情如下 let p fs canonicalize unwrap println p disp
  • SQL循环遍历所有表并获取特定列的最大值

    我正在尝试创建一个审核表来检查该表的加载日期 基本上 我想循环遍历数据库中的所有表并检查特定列 LoadedDate并返回每个表的该列的最大值 SELECT TABLE NAME INTO TableList FROM INFORMATIO
  • Android Facebook 对话框

    我已将 Facebook 集成到我的应用程序中 但是 它不是在对话框中显示 而是全屏打开 我想知道是否有人知道如何将其更改为对话框 Facebook 处理程序类 Override public void onCreate Bundle sa
  • 无法连接到总线:没有这样的文件或目录

    我创建了一个 docker 16 4 容器并尝试在容器内运行 docker 继这篇文章之后 https www digitalocean com community tutorials how to install and use dock
  • 使用 MS 编译器的 std::cout 非常慢

    我正在打印多次计算迭代的进度 输出实际上是其中最慢的部分 但只有当我使用 Visual C 编译器时 MinGW 在同一系统上才能正常工作 考虑以下代码 include
  • 实现 HttpSessionListener

    我面临着一个类似的问题 https stackoverflow com questions 1439743 whats wrong with my listener in my web xml并了解到我的侦听器类将在读取 web xml 时