- Home ›
- サーブレット/JSP入門 ›
- セッション管理
セッションオブジェクトの削除
セッションに格納されたセッションオブジェクトの削除について確認します。
セッションオブジェクトを削除する場合には「HttpSession」インターフェースで定義されている"removeAttribute"メソッドを使います。
removeAttribute public void removeAttribute(java.lang.String name)
Removes the object bound with the specified name from this session. If the session does not have an object bound with the specified name, this method does nothing. After this method executes, and if the object implements HttpSessionBindingListener, the container calls HttpSessionBindingListener.valueUnbound. The container then notifies any HttpSessionAttributeListeners in the web application. Parameters: name - the name of the object to remove from this session Throws: java.lang.IllegalStateException - if this method is called on an invalidated session
"removeAttribute"メソッドは、引数に指定した「名前」のセッションオブジェクト削除します。
例えばセッションオブジェクトとして名前が「visited」のものを削除する場合には下記のように記述します。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(true); session.removeAttribute("visited"); }
サンプルプログラム
では簡単に試してみます。テストするにあたってセッションに登録されている全てのセッションオブジェクトを取得する"getAttributeNames"メソッドを使います。
getAttributeNames public java.util.Enumeration getAttributeNames()
Returns an Enumeration of String objects containing the names of all the objects bound to this session. Returns: an Enumeration of String objects specifying the names of all the objects bound to this session Throws: java.lang.IllegalStateException - if this method is called on an invalidated session
web.xmlファイルは下記のようにしました。
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>sessiontest</servlet-name> <servlet-class>SessionTest2</servlet-class> </servlet> <servlet> <servlet-name>deleteobject</servlet-name> <servlet-class>DeleteObject2</servlet-class> </servlet> <servlet-mapping> <servlet-name>sessiontest</servlet-name> <url-pattern>/sessiontest</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>deleteobject</servlet-name> <url-pattern>/deleteobject</url-pattern> </servlet-mapping> </web-app>
プログラムは下記の通りです。
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.Enumeration; public class SessionTest2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(false); out.println("<html>"); out.println("<head>"); out.println("<title>セッションテスト</title>"); out.println("</head>"); out.println("<body>"); if (session == null){ out.println("<p>セッションオブジェクトを登録します</p>"); session = request.getSession(true); session.setAttribute("age", "24"); session.setAttribute("name", "山田"); } /* 現在登録されているセッションオブジェクトを表示 */ out.println("<p>"); out.println("登録されているセッションオブジェクトを表示します<br>"); Enumeration enum_session = session.getAttributeNames(); while(enum_session.hasMoreElements()) { String key = (String)enum_session.nextElement(); String val = (String)session.getAttribute(key); out.println(key + " = " + val + "<br>"); } out.println("</p>"); out.println("<a href=\"/session/deleteobject\">ageオブジェクトの削除</a>"); out.println("</body>"); out.println("</html>"); } }
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.Enumeration; public class DeleteObject2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(false); out.println("<html>"); out.println("<head>"); out.println("<title>セッションテスト</title>"); out.println("</head>"); out.println("<body>"); if (session != null){ session.removeAttribute("age"); /* 現在登録されているセッションオブジェクトを表示 */ out.println("<p>"); out.println("登録されているセッションオブジェクトを表示します<br>"); Enumeration enum_session = session.getAttributeNames(); while(enum_session.hasMoreElements()) { String key = (String)enum_session.nextElement(); String val = (String)session.getAttribute(key); out.println(key + " = " + val + "<br>"); } out.println("</p>"); }else{ out.println("<p>セッションがありません</p>"); } out.println("</body>"); out.println("</html>"); } }
上記をコンパイル後に「d:\servlet-sample\session\WEB-INF\classes\」ディレクトリにクラスファイルを移動した後で、ブラウザで「http://localhost:8080/session/sessiontest」へアクセスしてみます。
最初に表示した時に、「age」と「name」というセッションオブジェクトを登録し、画面に表示しています。
ここで「age」と言う名前のセッションオブジェクトを削除します。「ageオブジェクトの削除」をクリックして下さい。
「age」と言う名前のセッションオブジェクトが削除されていることを確認できます。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。