Japanese / English
HttpSessionAttributeListener実装メソッド
HttpSessionAttributeListenerインターフェースは、以下の2つのメソッドを実装する必要があります。

public void attributeAdded(HttpSessionBindingEvent arg0) {}
public void attributeReplaced(HttpSessionBindingEvent arg0) {}
public void attributeRemoved(HttpSessionBindingEvent arg0) {}
attributeAddedメソッド
attributeAddedはセッションにオブジェクトが登録された時のイベント処理を行うメソッドです。
attributeReplacedはセッションのオブジェクトが置換された時のイベント処理を行うメソッドです。
attributeRemovedはセッションのオブジェクトが削除された時のイベント処理を行うメソッドです。
いずれも、セッション操作時に別のセッションを操作したい際などに使用します。
以下、例です。

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSession;
  
public class sessionAttributeListener implements HttpSessionAttributeListener{
    public void attributeAdded(HttpSessionBindingEvent arg0){
        HttpSession session = arg0.getSession();
        if(arg0.getValue() instance of Sess1){
            // session1キーに登録しなおし
            session.setAttribute("session1",new Sess2());
        }
    }
  
    public void attributeReplaced(HttpSessionBindingEvent arg0){
        HttpSession session=arg0.getSession();
        if(arg0.getValue() instance of Sess1){
            // session1キーに登録しなおし
            session.setAttribute("session1",new Sess2());
        }
    }

  
    public void attributeRemoved(HttpSessionBindingEvent arg0){
        HttpSession session=arg0.getSession();
        if(arg0.getValue() instance of Sess1){
            // session1キーを削除
            session.removeAttribute("session1");
        }
    }
}
getValueメソッド
HttpSessionBindingEventのgetValueメソッドは、登録されたオブジェクト、又は置換される前のオブジェクト、又は削除さえれたオブジェクトを返すメソッドです。

web.xmlに記述
web.xmlには以下のように記述します。記述箇所も関係あるようですが詳しくはわかりません。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app>

  <listener>
      <listener-class>com.confrage.TEST.SessionListener</listener-class>
  </listener>

...
Sessionを監視する
実際にセッションを監視してみます。以下がリスナーです。このHttpSessionAttributeListenerはweb.xmlには登録されているものとします。

package jp.co.confrage;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
  
public class SessionListener implements HttpSessionAttributeListener{
    public void attributeAdded(HttpSessionBindingEvent arg0){
        System.out.println("SessionAdd:" + arg0.getName() + ":" + arg0.getValue());
    }
  
    public void attributeReplaced(HttpSessionBindingEvent arg0){
        System.out.println("SessionChange:" + arg0.getName() + ":" + arg0.getValue());
    }

    public void attributeRemoved(HttpSessionBindingEvent arg0){
        System.out.println("SessionRemove:" + arg0.getName() + ":" + arg0.getValue());
    }
}
以下のような画面があり、送信ボタンを押すとサーブレットに処理が渡ります。



送信ボタンを押した時のサーブレットは以下のように登録、変更、削除しています。

package jp.co.confrage;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class TestServlet
 */
public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public TestServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        HttpSession session = request.getSession(false); 
        request.setCharacterEncoding("windows-31j"); 
        String input = request.getParameter("input"); 
        session.setAttribute("INPUT", input);
        session.setAttribute("INPUT", input + "a");
        session.removeAttribute("INPUT");
        response.setContentType("text/html; charset=windows-31j"); 
         PrintWriter out = response.getWriter(); 
         out.println("<html>"); 
         out.println("<head><title>test</title></head>"); 
         out.println("<body>"); 
         out.println(":::" + input + ":::"); 
         out.println("</body></html>"); 
         out.close(); 
    }

}
以下、送信ボタン押下後の画面とコンソールです。コンソールにセッションの情報が表示されているのがわかります。



Back to top

Information
SEO対策 大阪  税理士 相談  税理士 守口市  税理士 大阪市  税理士 枚方市  自動車ガラス 神戸  シール印刷 神戸  ブリリアントアパートメント  株式会社CONFRAGE  英会話 個人レッスン 京都市右京区  京都市右京区西京区でマンツーマン英会話 
このページはCONFRAGEの著作物です。このページを複製・転載することを禁じます。CopyRight(C)2003-2016 CONFRAGE All rights reserved.