tomcat7 + struts2でwebアプリケーション(8) セッション(1)

SessionMapを使ってセッションを扱う。
(1)struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">

<struts>
    <constant name="struts.devMode" value="false" />

    <package name="myapp" extends="struts-default" namespace="/">
    	<!-- フォーム入力処理 -->
    	<action name="testAction" class="TestAction">
    		<result name="success">/result.jsp</result>
    		<result name="input">/formTest.jsp</result>
    	</action>

    	<!-- セッション処理 -->
    	<action name="clearSession" class="SessionAction" method="clear">
    		<result name="success">/formTest.jsp</result>
    	</action>
    </package>

</struts>

(2)TestAction.java
SessionAwareを実装し、メンバにSessionMapを追加する。
そのままではセッションの中身が空なので、メソッド内で要素を挿入する。

import java.util.Map;

import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;


public class TestAction extends ActionSupport implements SessionAware{
	private String username;
	private String password;
	private SessionMap<String, Object> session;

	@Override
	public String execute() throws Exception {
		session.put("username", username);
		session.put("password", password);
		return "success";
	}

	@Override
	public void setSession(Map<String, Object> session) {
		this.session = (SessionMap)session;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Map<String, Object> getSession() {
		return session;
	}
}

(3)SessionAction.java
SessionMapのinvalidateメソッドで現在のセッションを無効にする。
※セッションからすべての要素を削除する場合はclearメソッド。

import java.util.Map;

import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;


public class SessionAction extends ActionSupport implements SessionAware{
	private SessionMap<String, Object> session;

	public String clear(){
		session.invalidate();
		return "success";
	}

	public Map<String, Object> getSession() {
		return session;
	}

	public void setSession(Map<String, Object> session) {
		this.session = (SessionMap)session;
	}

}

(4)入力画面(formTest.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
<!--
.errorMessage {
  color: red;
}
-->
</style>
<title>input</title>
</head>
<body>
<s:form action="testAction" method="post">
	<s:textfield name="username" label="名前"/>
	<s:password name="password" label="パス"/>
	<s:submit value="送信"/>
</s:form>
<a href="printSession.jsp">セッション情報を表示</a>
</body>
</html>

(5)セッション情報表示画面(printSession.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>session detail</title>
</head>
<body>

名前:<s:property value="#session.username"/>
<br/>
パス:<s:property value="#session.password"/>

<a href="<s:url action="clearSession"/>">セッションをクリアして入力画面へ戻る</a>

</body>
</html>

(6)セッションから入力結果を取得し表示する画面(result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>result</title>
</head>
<body>

名前:<s:property value="#session.username"/>
<br/>
パス:<s:property value="#session.password"/>

<a href="./formTest.jsp">戻る</a>
<a href="./printSession.jsp">セッション情報表示ページへ</a>"
</body>
</html>