1

サーバーセッションを管理するためにJDBC永続性を使用する必要があります。次に、(wl_session_values に保存された) セッション値を実際のオブジェクトに変換する必要があります。ベロー私は私のコードを書きます:

try {
String userName = "root";
String password = "****";
String url = "jdbc:mysql://localhost:3306/test";
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, userName, password);

PreparedStatement pstmt = null;
String query = "select * from wl_servlet_sessions";
pstmt = conn.prepareStatement(query);
ResultSet resultSet = pstmt.executeQuery();

while(resultSet.next()){
    System.out.println(resultSet.getString("wl_id"));

    Blob blob = resultSet.getBlob("wl_session_values");
    InputStream in = blob.getBinaryStream();
    ObjectInputStream ois = new ObjectInputStream(in);

    Hashtable<Object, Object> hash = (Hashtable)ois.readObject();
        for(Map.Entry<Object, Object> newHash : hash.entrySet()){
        System.out.println("Key : " + newHash.getKey().toString());
        System.out.println("Value : " + newHash.getValue().toString());
    }
}

} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (conn != null) {
    try {
        conn.close();
    } catch (Exception e) { e.printStackTrace(); }
}

しかし、結果を逆シリアル化しようとすると、常にjava.io.StreamCorruptedException: invalid stream header: 73720013.

助けてくれてありがとう。

4

1 に答える 1

1

これらはプライベート API であるため、近づかないようにします。

この例のようにHttpSessionListenerを実装することで問題を解決できます。

于 2011-01-17T16:13:36.047 に答える