1

永続的でユーザー固有のセッションカウンターを作成する必要があります。私はこれを作りました

package my.package;

import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSession;
import java.util.HashMap;

public class SessionCounter implements HttpSessionListener {

    private static HashMap activeSessions;

    public SessionCounter() {
        //How to restore session count?
        activeSessions = new HashMap();
    }

    public void sessionCreated(HttpSessionEvent se) {
        HttpSession session = se.getSession();
        String userName = session.getAttribute("username");
        Integer count = (Integer) activeSessions.get(userName);
        if (count != null) {
            activeSessions.put(userName, Integer.valueOf(count.intValue() + 1));
        } else {
            activeSessions.put(userName, new Integer(1));
        }
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        HttpSession session = se.getSession();
        String userName = session.getAttribute("username");
        Integer count = (Integer) activeSessions.get(userName);
        if (count != null && count.intValue() > 0) {
            activeSessions.put(userName, Integer.valueOf(count.intValue() - 1));
        }

    }

    public static HashMap getActiveSessions() {
        return activeSessions;
    }
}

Tomcat を再起動した後でもセッションはアクティブですが、activeSessions 変数に保存されているセッション カウントは失われます。再起動後にセッション数を復元するにはどうすればよいですか?

4

1 に答える 1

0

Tomcat がシャットダウンされると (つまり、プロセスを強制終了するのではなく、シャットダウン スクリプトによって)、すべてのセッションがシリアル化され、次回の起動時に復元されます。

HttpSessionListener は常に再作成されるため、HashMap が新たにインスタンス化され、情報が失われます。serialiable を実装し、データを保持するモデルを作成し、Tomcat のシャットダウン時にそれをディスクに保存する必要があります。

于 2012-04-20T15:24:47.453 に答える