Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpSessionListener:如何定制不同类型的会话?_Java_Jakarta Ee_Httpsession - Fatal编程技术网

Java HttpSessionListener:如何定制不同类型的会话?

Java HttpSessionListener:如何定制不同类型的会话?,java,jakarta-ee,httpsession,Java,Jakarta Ee,Httpsession,我需要能够区分会话类别;就这样, public final class MyHttpSessionListener implements HttpSessionListener { private static final AtomicInteger counterA = new AtomicInteger(); private static final AtomicInteger counterB = new AtomicI

我需要能够区分会话类别;就这样,

public final class MyHttpSessionListener implements HttpSessionListener {

    private static final AtomicInteger counterA = 
            new AtomicInteger();

    private static final AtomicInteger counterB =
            new AtomicInteger();

    private static final MyHttpSessionListener INSTANCE = 
            new MyHttpSessionListener();

    public static MyHttpSessionListener getInstance() {
        return INSTANCE;
    }

    public MyHttpSessionListener() {}

    public int getNumberOfAClients() {
        return counterA.get();
    }

    public int getNumberOfBClients() {
        return counterB.get();
    }

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("Creating a session...");

        User user = 
                (User) se.getSession()
                         .getAttribute(Config.CURRENT_USER_ATTRIBUTE);

        switch (user.getUserType()) { <--- Here, user is null!
            case A:
                counterA.incrementAndGet();
                break;

            case B:
                counterB.incrementAndGet();
                break;
        }
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        // Similar to sessionCreated.
        ...
    }
}
公共最终类MyHttpSessionListener实现HttpSessionListener{
私有静态最终原子整数计数器A=
新的原子整数();
私有静态最终原子整数计数器B=
新的原子整数();
私有静态最终MyHttpSessionListener实例=
新建MyHttpSessionListener();
公共静态MyHttpSessionListener getInstance(){
返回实例;
}
公共MyHttpSessionListener(){}
public int getNumberOfAClients(){
返回计数器a.get();
}
public int getNumberOfBClients(){
返回计数器b.get();
}
@凌驾
已创建公共无效会话(HttpSessionEvent se){
System.out.println(“创建会话…”);
用户=
(用户)se.getSession()
.getAttribute(Config.CURRENT\u USER\u属性);

switch(user.getUserType()){我发现的一个解决方案是向所讨论的侦听器添加方法,以增加计数器。接下来,只需在登录代码中调用这些方法:

public final class MyHttpSessionListener implements HttpSessionListener {

    private static final AtomicInteger counterA = 
            new AtomicInteger();

    private static final AtomicInteger counterB =
            new AtomicInteger();

    public void incA() {
        counterA.incrementAndGet();
    }

    ...
}
(我的登录servlet)

switch (user.getUserType()) {
    case COUNTERA:
        MyHttpSessionListener.incA();
        break;

    case COUNTERB:
        MyHttpSessionListener.incB();
        break;
}