(2)Clear Session Interceptor
利用の宣言をするだけで、そのActionが起動すると同時にHTTPセッションの中身が全て消去されます。ただし、HTTPセッションオブジェクト本体は破棄されません。宣言はアノテーションの@InterceptorRef("clearSession")で行えます。
では、実装例を見てみましょう。
@InterceptorRefs({
@InterceptorRef("clearSession"),
@InterceptorRef("defaultStack"),
})
リスト2のようにclearSessionのアノテーションを追加するだけで使うことができます。サンプルアプリケーションについては、次以降に挙げるCreate Session Interceptor、Scope Interceptorと一緒に解説します。
(3)Create Session Interceptor
利用の宣言をするだけで、そのActionが起動すると同時にHTTPセッションが生成されます。もしすでに存在していた場合には何もしません。宣言はアノテーションの@InterceptorRef("createSession")で行います。
では、実装例を見てみましょう。
@Namespace(value="/session")
@ParentPackage(value="struts-default")
@InterceptorRefs({
// CreateSessionインターセプタ定義 …(A)
@InterceptorRef("createSession"),
@InterceptorRef("defaultStack"),
})
@Results({
@Result(name="success" , location="check.jsp"),
})
public class CreateSessionInterceptorSampleAction extends ActionSupport implements SessionAware{
public static final Logger log = Logger.getLogger(CreateSessionInterceptorSampleAction.class);
@Action(value="create")
public String execute() throws Exception {
// セッションからnumを取得し、+1を行う
Integer num = (Integer)session.get("num");
if ( num == null ) num = 0;
num++;
// セッションへnum値をバインド
session.put("num", num);
log.debug(" session : " + session);
addActionMessage("セッションが生成されました。現在のnum値:" + num);
return "success";
}
public void setSession(Map<String, Object> session) {
this.session = session;
}
private Map<String,Object> session;
}
リスト3の(A)の部分のように、createSessionのアノテーションを追加するだけで使うことができます。Actionクラスが起動すると自動的にセッションが生成され、セッションの情報はMap形式で扱われます。このMapの値を変更することで、自動的にセッションへの変更も行ってくれます。今回のサンプルを実際に起動すると、アクセスされるたびに変数num値が1ずつ加算され、毎回セッションへ格納されます。
ではCreateSession/ClearSessionインターセプタの動きの確認をしてみましょう。http://127.0.0.1:8080/interceptors/session/index.actionから、画面中ほどにある[Create Session / Clear Session Interceptor]のメニューにあるリンクをクリックして動作させてみます。
図3は、セッションに対して初めて値を追加したところです。もし無い場合は1から開始するので、1が出力されます。

では立て続けにあと3回、同じようにセッションを追加リンクをクリックしてみましょう。次のように3回分加算され、4が出力されます。

続いて削除するのも同様に[セッション内を全て削除]リンクをクリックします。その結果は図5のようになります。

以上のように、単純なHTTPセッションの作成、一括クリアはインターセプタ宣言1つで行うことができます。
