JAVA EE サーバー ~ クライアント間のデータ連携

リクエストスコープ

※サーバー側(サーブレット)
public class MyServlet extends HttpServlet
{
 protected void doPost(
  HttpServletRequest req,
  HttpServletResponst res) throws ~{
  
  GET、POSTパラメータを取得
  String prm = req.getParameter("パラメータ名");
  転送先へ値を渡す
  req.setAttribute("変数名","値");
  フォワード
  this.getServletContext().getRequestDispatcher("転送先パス").forward(req, res);<br/>
 }
}

※クライアント側(転送先パス.jsp)
リクエストパラメータを取得
${param['変数名']}
サーバから渡された値を取得(フォワード時のみ)
${requestScope['変数名']}

JavaBeans

JavaBeans」参照

クッキー

クッキーとは?

・ プログラム(命令)によって生成されるテキストデータ
生成されると
・ クライアント側で保持される
・ ブラウザを閉じても残る
・ 自動的に(勝手に)サーバへ送信される
・ 暗号化されないので直接読まれる

クッキー(コード)

本例での流れ
cookie_flow

※cookie1.jsp
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
クッキー情報がある場合にその値を取得する
<%
 String email = "";
 
 全クッキー取得
 Cookie[] cookies = request.getCookies();
 
 if (cookies != null)
 {
  クッキー全件Loop
  for (Cookie cook : cookies)
  {
   クッキー名:emailの値を取得
   if (cook.getName().equals("email"))
   {
    email = cook.getValue();
    break;
   }
  }
 }
%>
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>

 <form method="POST" action="cookie2.jsp">
  <input type="text" name="email" value="<%=email %>" />
  <input type="submit" value="送信" />
 </form>
</body>
</html>

※cookie2.jsp
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>

 <%
  クッキーオブジェクト生成
  cookie1.jspからのパラメータをクッキーオブジェクトに格納
  Cookie cook = new Cookie("email", request.getParameter("email"));
  cook.setMaxAge(60 * 60 * 24 * 10); 有効期限:10日
  
  クッキーを削除する場合
  cook.setMaxAge(0);

  
  クッキー発行
  response.addCookie(cook);
  クライアント側でクッキーを保存する様に命令
 %>
</body>
</html>

クッキー(HTTPヘッダー)

※cookie1.jsp
(1)テキストボックスのデータをPOSTする前
cookie1
クッキーはまだ無い
セッションIDについては別項参照

※cookie2.jsp
(2)パラメータをクッキーに格納
cooki2
・クッキーはまだ無い
・(1)のPOSTデータを受け取っている
・クライアントへクッキーをセットする様に命令

※cookie1.jsp
(3)再度cookie1.jspにアクセス
cookie3
クッキーをサーバーへ通知
クッキーが作成されている

セッション

セッションとは?

サーバー側で管理される接続情報
接続毎にセッションIDが発行され、クライアントに通知される。
ブラウザを閉じた後のアクセスは別ユーザと見なされる。

セッション(コード)

※session1.jsp
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
<%
 セッション情報を取得
 String email = (String) session.getAttribute("email");
%>
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>

 <form method="POST" action="session2.jsp">
  セッション情報がある場合にテキストボックスに表示
  <input type="text" name="email" value="<%=(email == null) ? "" : email %>" />
  <input type="submit" value="送信" />
 </form>
</body>
</html>

※session2.jsp
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>

 <%
  パラメータをセッション情報に格納
  session.setAttribute("email", request.getParameter("email"));
  
  セッション情報保持期限
  session.setMaxInactiveInterval(60);
  単位:秒
  デフォルト:1800(30分)

  アプリケーション全体で設定する場合はデプロイメントディスクリプタ参照
  
  セッション情報を削除する場合
  session.removeAttribute("email");
  
  セッション情報を全て削除する場合
  session.invalidate();
 %>
</body>
</html>

セッション(HTTPヘッダー)

※session1.jsp
(1)初回表示時
session1
セッション情報がサーバー側で作成され、IDをクライアントに通知している
セッションIDがクッキーに保存される。

※session1.jsp
(2)テキストボックスのデータをsession2.jspへポスト
session2

※session2.jsp
(3)パラメータをセッション情報に格納
session3
・(1)で受け取ったセッションIDをサーバーへ通知している
・(2)のPOSTデータを受け取っている

※session1.jsp
(4)再度session1.jspを表示
session4
セッション情報があるのでテキストボックスにセッション情報が表示される。

スコープ

変数が保持される期間・範囲

page

現在のページ(ファイル)内でのみ有効。
ほかのページと共有の必要がない単発的な処理を行う場合に使用。
全スコープ中で最も有効範囲の狭い設定(デフォルト)

request

一連のリクエスト処理の範囲で有効。
現在のページ、およびフォワード(またはインクルード)された先のページでのみ、値を共有することができる

session

ユーザーセッションの範囲で有効。
複数の独立したファイル(クラス)間で情報を共有したい場合に使用する
(例:ECサイトにおける買い物カゴなど)。
異なるユーザーとの間では情報は共有されない

application

現在のアプリケーション内のすべてのファイル(クラス)間、アプリケーションにアクセスしている全ユーザー間で有効。
全スコープ中で最も有効範囲の広い設定