Web系開発メモ

Java, JavaScript, CSS, HTML などなど。ハードウェアやゲームのことも書いてます。

Servlet:セッションを使う

Servlet API のセッション(HttpSession)を使うと、リクエストをまたがって値を保持することができます。これから, セッションに値を設定して取得する方法を書いていきます。

前提

記事内のコードを実行する場合、サーブレットの動作環境(コンテナ)が必要になります。環境がない場合は、下の記事などを参照して頂けると嬉しいです。

Servlet:動作環境構築(Jetty Maven Plugin)

手順1. 値を設定するサーブレットの作成

ssjp/src/main/java/ssjp/session/SetSessionServlet.java

package ssjp.session;

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("/session/set")
@SuppressWarnings("serial")
public class SetSessionServlet extends HttpServlet {
  public void doGet(
    HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException {
    //-> パラメータを取得してセッションに設定
    String val = req.getParameter("param");
    HttpSession ssn = req.getSession();
    ssn.setAttribute("ssn", val);
    //-> HTMLを返す
    res.setContentType("text/html");
    res.setCharacterEncoding("utf-8");
    res.getWriter().println(
      "<html><body>設定完了</body></html>"
    );
  }
}

リクエストパラメータ param の値を取得してセッションに設定しています。セッションに設定するために、キー(ssn)を指定しています。

手順2. 値を取得するサーブレットの作成

ssjp/src/main/java/ssjp/session/GetSessionServlet.java

package ssjp.session;

import java.io.IOException;
import java.io.PrintWriter;

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("/session/get")
@SuppressWarnings("serial")
public class GetSessionServlet extends HttpServlet {
  public void doGet(
    HttpServletRequest req, HttpServletResponse res)
  throws ServletException, IOException {
    //-> セッションから値を取得してHTMLを返す
    HttpSession ssn = req.getSession(false);
    if (ssn == null) {
      html("セッションなし", res);
    } else {
      String val = (String) ssn.getAttribute("ssn");
      html(val, res);
    }
  }
  private void html(
    String msg, HttpServletResponse res)
  throws IOException {
    res.setContentType("text/html");
    res.setCharacterEncoding("utf-8");
    PrintWriter o = res.getWriter();
    o.print("<html><body>");
    o.print(msg);
    o.println("</body></html>");
  }
}

キー(ssn)で保存した値をセッションから取得します。取得した値を使って HTML を返しています。

手順3. 確認

コンテナ(Jetty Plugin など)を起動して以下の通り確認します。

3.1. 値の設定

ブラウザ等で http://localhost:8080/session/set?param=test を開いて、セッションにパラメータ(param)の値(test)を保存します。

3.2. 値の取得

次に http://localhost:8080/session/get を開くと、保存された値が画面に表示されます。

コード

今回のコードは GitHub にも置いています。

GitHub - ssjp(※ Servlet Sample Jetty Plugin)