1. 概要

このクイックチュートリアルでは、 HttpServletRequest# getSession() HttpServletRequest# getSession(boolean)の呼び出しの違いを説明します。

2. 違いは何ですか?

メソッドgetSession() getSession(boolean)は非常に似ています。 ただし、わずかな違いがあります。 違いは、セッションがまだ存在しない場合にセッションを作成する必要があるかどうかです。

getSession()とgetSession(true)の呼び出しは機能的に同じです:現在のセッションを取得し、まだ存在しない場合は作成します。

ただし、 getSession(false)を呼び出すと、現在のセッションが取得され、まだ存在しない場合はnullが返されます。特に、セッションが存在するかどうかを確認する場合に便利です。

3. 例

この例では、次のシナリオを検討しています。

  • ユーザーがユーザーIDを入力し、アプリケーションにログインします
  • 次に、ユーザーはユーザー名年齢を入力し、ログインしたユーザーのこれらの詳細を更新したいと考えています。

HttpServletRequest#getSession()および HttpServletRequest#getSession(boolean)。の使用法を理解するために、ユーザー値をセッションに格納します。

まず、 doGet()メソッドで HttpServletRequest#getSession()を使用するサーブレットを作成しましょう。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession();
    session.setAttribute("userId", request.getParameter("userId"));
}

この時点で、サーブレットは既存のセッションを取得するか、ログインしているユーザー用に新しいセッションを作成します(存在しない場合)。

次に、セッションでuserName属性を設定します。

それぞれのユーザーIDのユーザーの詳細を更新するため、同じセッションが必要であり、ユーザー名を格納するための新しいセッションを作成する必要はありません。

したがって、ここでは、 HttpServletRequest#getSession(boolean) false の値を使用します。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession(false);
    if (session != null) {
        session.setAttribute("userName", request.getParameter("userName"));
    }
}

これにより、userIdが以前に設定されたのと同じセッションでuserName属性が設定されます。

4. 結論

このチュートリアルでは、 HttpServletRequest#getSession()メソッドと HttpServletRequest#getSession(boolean)メソッドの違いについて説明しました。

完全な例は、GitHubから入手できます。