3

私はグーグルでスタックオーバーフローしましたが、これを機能させることはできません。これが私のコードです。subscribe メソッドでセッション属性「topic」を設定しましたが、sessionDestroyed では null として取得されます。 SOに関するこの質問は私に関連しているようですが、問題は解決しません。

@Path("/jpubsub/{topic}")
    public class JMSSubscribe implements HttpSessionListener, ServletContextListener, MessageListener, ExceptionListener {
    
        @GET
        public subscribe(@javax.ws.rs.core.Context HttpServletRequest request) {
            HttpSession session = request.getSession();
            session.setAttribute("topic", "1");
        }
    
        @Override
        public void sessionCreated(HttpSessionEvent hse) {
            HttpSession session = hse.getSession();
                System.out.println("Created Session - ID : " + session.getId());
        }
    
        @Override
        public void sessionDestroyed(HttpSessionEvent hse) {
                System.out.println("Destroyed Session - ID : " + hse.getSession().getId());
                System.out.println("Topic ID sessionDestroyed - " + hse.getSession().getAttribute("topic"));
        }

助けてください。

PS: で属性を設定するとsessionCreated()、 で取得されsessionDestroyed()ます。異なるセッション オブジェクトを使用しているからですか? また、セッションIDを印刷するとき。3 つのメソッドすべてで同じセッション ID を取得します。

他のコードが必要かどうか尋ねてください。

4

2 に答える 2

-1

セッション作成メソッドでセッション属性を設定します

@Path("/jpubsub/{topic}")
public class JMSSubscribe implements HttpSessionListener, ServletContextListener, MessageListener, ExceptionListener {

    @GET
    public subscribe(@javax.ws.rs.core.Context HttpServletRequest request) {
        HttpSession session = request.getSession();
    }

    @Override
    public void sessionCreated(HttpSessionEvent hse) {
        HttpSession session = hse.getSession();
        session.setAttribute("topic", "1");

            System.out.println("Created Session - ID : " + session.getId());
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent hse) {
            System.out.println("Destroyed Session - ID : " + hse.getSession().getId());
            System.out.println("Topic ID sessionDestroyed - " + hse.getSession().getAttribute("topic"));
    }
于 2013-09-27T09:13:46.337 に答える