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>