【サーブレット入門】セッションの開始方法をわかりやすく解説

Java

今回の記事ではサーブレットでセッションを開始する方法について解説していきます。

セッションの管理はWebアプリを作成する上で必須となります。
特にログイン機能のあるアプリケーションでは使うことになるでしょう。

それでは早速解説していきます。

このブログでは初心者の方向けにサーブレットとjspを使ってサンプルWebアプリを開発する方法をサンプルコード付きで解説しています。
JavaでWebアプリの開発ができるようになりたい!という方はチャレンジしてみてください。

セッションとは

まずセッションとはなんなのかということについて簡単に解説します。

セッションとは簡単にいうと、ユーザーを管理するための仕組みです。

Webアプリは基本的にサーバーとクライアントの間でリクエストとレスポンスのやり取りが行われます。
クライアントからサーバーに対してリクエストを送ったときに、そのリクエストがどのユーザーから送られてきたか判断するためにセッションを利用します。

リクエストを送ってきたユーザーが誰なのか判定するためにサーバーではセッションIDを保持しておきます。
このセッションIDを使ってセッションを管理します。

サーブレットでのセッションの開始

サーブレットでセッションを開始するためには「doGet」メソッドや「doPost」メソッドの引数として渡される「HttpServletRequest」インターフェースに実装されている、「getSession」メソッドを使います。

getSessionメソッドでは戻り値「HttpSession」が返却されますので、それを受け取って、セッションを管理します。

まとめると次のようなコードでセッションを開始します。

HttpSession session = request.getSession()

このgetSessionメソッドでは、引数として、「true」「false」を渡すことができます。
どちらを渡した場合でもセッションがすでに開始されている場合はそのセッションを開始します。

セッションが開始されていなかった場合、「true」を渡すと新たにセッションを開始して、開始されたセッションが返ってきます。

「false」を渡した場合はnullが返ってきます。

// セッションが開始されていなければ、新しいセッションを開始
HttpSession session = request.getSession(true);

// セッションが開始されていなければ、nullを返却する
HttpSession session = request.getSession(false);

引数を渡さなかった場合はtrueを渡した場合と同じ扱いになります。

セッションを開始するサンプルプログラム

では実際にサーブレットを作成して、確認してみましょう。

今回はセッションが存在するかどうかを確認し、セッションが存在していない場合は新しくセッションを開始します。
そしてセッションを開始したことを画面に表示します。

セッションが存在しなかった場合には新しくセッションを開始して、セッションを開始したことを画面に表示します。

なお今回作成しているアプリケーション名は「BlobApplication」です。
アプリケーション名が違う場合は該当する箇所をご自身の環境で書き換えてください。

ServletTest.java

package uhablog;

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("/SessionTest")
public class SessionTest extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// セッションが存在しない場合はnullを返却
		HttpSession session = request.getSession(false);
		
		// 画面を描画する
		response.setContentType("text/html; charset=Shift_JIS");
		PrintWriter pw = response.getWriter();
		pw.println("<html>");
		pw.println("<head>");
		pw.println("<title>セッションの開始</title>");
		pw.println("</head>");
		pw.println("<body>");
		
		// セッションが開始されている場合と開始されていない場合で処理を変える
		if (session == null) {
			
			// セッションを開始する
			session = request.getSession(true);
			pw.println("<p>セッションが存在しなかったので、新しくセッションを開始しました</p>");
		} else {
			pw.println("<p>セッションは開始されていました</p>");
		}
		
		// アプリ名「BlogApplication」はご自身の環境に合わせて書き換えてください。
		pw.println("<a href=\"/BlogApplication/SessionTest\">再表示する</a>");
		pw.println("</body>");
		pw.println("</html>");	
	}
}

サーバーを起動し、「http://localhost:8080/BlogApplication/SessionTest」にアクセスします。

最初にアクセスした場合はセッションはありませんので、新しくセッションが開始されます。
「再表示する」をクリックします。

すでにセッションが開始されています。

タイトルとURLをコピーしました