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;
}