(1) JavaScriptでAttributeの値を削除(Remove)する方法
(1-1) 構文
(1-2) サンプルプログラム
(1-2-1) サンプルプログラムの概要
(1-2-2) JSP
(1-2-3) JavaScript
(1-2-4) Servlet①:setAttributeするサーブレット
(1-2-5) Servlet②:removeAttributeするサーブレット
(1) JavaScriptでAttributeの値を削除(Remove)する方法
今回はJavaScriptでsessionオブジェクトのAttributeをクリア(Remove)する方法をご紹介します。
(1-1) 構文
方針として、Attributeをクリアする機能を持つ「Servlet」を用意し、それを画面(JSP)から直接呼び出したり、あるいはJavaScriptを経由して呼び出したり、といった形でセッションをクリアしてみます。
■データの削除(Servlet)
Servlet等でsessionオブジェクトの属性値を削除するためのServletの記述です。AttributeのクリアはHttpSessionクラスのremoveAttributeメソッドを使います。
(構文)
//# HttpSessionクラスのインスタンス生成 HttpSession session = request.getSession(); //# “finalstr”属性にセットされた値を削除する session.removeAttribute(“[属性の名前]”);
■JavaScriptからServletの呼び出し
上記のAttributeクリアするServletを画面(JSP等)から呼び出す方法はいくつかあり、例えば次のような方法があります。
●パターン①
JavaScript経由でServlet呼び出し(JSP⇒JavaScript⇒Servlet)
(図121)①

(図121)②

(1-2) サンプルプログラム
(1-2-1) サンプルプログラムの概要
「session.removeAttribute(“[属性の名前]”);」で実際にsessionの指定した属性値がクリアされているか?を確認するための簡単なプログラムをご紹介します。
具体的にはボタンを押下する事で、sessionの属性値セット(setAttribute)したりクリア(removeAttribute)したりするプログラムです。
(動画)完成イメージ
●①値のセット
左のボタンを押すと、テキストに入力した値がsessionの「finalstring」という属性にセットされ、その値が画面下方に表示されます。
(図122)

●②値のクリア
右のボタンを押すと、sessionの「finalstring」という属性の値が「クリア」され、その値が画面下方に表示されます。
(図122)②

内部的には、いずれも画面(JSP)のボタンを押すとJavaScriptのメソッドが呼ばれ、そこから更にServletを呼び出し、そのServletの中でsessionの属性をセット/クリアしています。
次の節から、このサンプルを構成する各部品(JSP、JavaScript、Servlet)を順番にご紹介していきます。
(1-2-2) JSP
画面自体はテキストボックス1個+ボタン2個とシンプルですが、ポイントとしては後述のJavaScriptでjQueryのgetメソッドを使うためにjQueryのライブラリ(jquery-1.10.2.js)をインポートしている点と、最後の<div id=”GetServletResponse”></div>にはサーブレットの処理結果(挨拶文等)が埋め込まれる点です。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Clear session attribute example</title>
<script src="https://code.jquery.com/jquery-1.10.2.js" type="text/javascript"></script>
<script src="js/IT0993_ClearSessionAttribute.js" type="text/javascript"></script>
</head>
<body>
<form>
お名前を入力してください:<input type="text" id="u_name" /><br /><br />
<input type="button" value="setAttributeボタン" onClick="SetNewAttribute()">
<input type="button" value="clearAttributeボタン" onClick="ClearAttribute()">
</form>
<br /><br />
<strong>↓↓現在Attributeにセットされている値↓↓</strong>
<div id="GetServletResponse"></div>
</body>
</html>
(図123)①

(1-2-3) JavaScript
JavaScriptではjQueryのgetメソッドを呼び出して、サーブレット(「ClearSessionAttribute」や「SetSessionAttribute」)の処理結果を受け取り、それを画面の要素の値としてセットしています。
function ClearAttribute() {
$.get('ClearSessionAttribute'
,function(responseText) {
$('#GetServletResponse').text(responseText);
}
);
}
function SetNewAttribute() {
var name = $('#u_name').val();
$.get('SetSessionAttribute'
,{userName : name}
,function(responseText) {
$('#GetServletResponse').text(responseText);
}
);
}
(図123)②

(1-2-4) Servlet①:setAttributeするサーブレット
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/SetSessionAttribute")
public class IT0993_SetSessionAttribute extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//# 入力値のチェック
String name = request.getParameter("userName").trim();
if(name == null || name.equals("")){
name = "Guest User";
}
//# 挨拶の作成
String sayhello = "### Hi ! "+name+" ###";
//# セッション属性に値をセット
HttpSession session = request.getSession();
session.setAttribute("UserGreeting", sayhello);
//# レスポンス情報に挨拶を追加
response.setContentType("text/html");
response.getWriter().write((String)session.getAttribute("UserGreeting"));
}
}
(図123)③

(1-2-5) Servlet②:removeAttributeするサーブレット
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/ClearSessionAttribute")
public class IT0993_ClearSessionAttribute extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//# セッション属性の値をクリア
HttpSession session = request.getSession();
session.removeAttribute("UserGreeting");
//# セッション属性に空の値をセット
session.setAttribute("UserGreeting", "*** N/A ***");
//# レスポンス情報に空の挨拶を追加
response.setContentType("text/html");
response.getWriter().write((String)session.getAttribute("UserGreeting"));
}
}
(図124)④
