【JSP/サーブレット入門】スコープ(リクエスト・セッション・アプリケーション)について

スポンサーリンク

スコープとは

スコープとは、Webアプリで使用する情報(データ)を格納することです。

スコープには、3種類の有効範囲があり、用途によって使い分ける必要があります。

スコープを使用することで、複数のJSPやサーブレットで情報(データ)を共有することができます。

それでは、一緒に学習して行きましょう!!

スコープの種類

今回、紹介するスコープの種類は以下の3つです。ページ属性は省略します。

  • リクエストスコープ
  • セッションスコープ
  • アプリケーションスコープ

リクエストスコープ

1回のリクエストのみ共有することができます。

【サーブレット】と【JSP】の間で値を共有したい場合に使用することが多いです。

複数のJSP・サーブレットでの共有はできない。フォワードすることで共有可能。(※フォワードについては後半で解説します

【構文】リクエストスコープに値を設定する場合

// requestはjavax.servlet.http.HttpServletRequestクラス
request.setAttribute( "変数", 格納値 );

【構文】リクエストスコープから値を取得する場合

// requestはjavax.servlet.http.HttpServletRequestクラス
Object object = request.getAttribute("変数");

getAttributeの戻り値がObject型になっているため、必要に応じてキャストする必要がありますよ!

セッションスコープ

以下の期間中、複数の画面で値の共有が可能。

  • 明示的にデータを消去するまで
  • ブラウザを閉じるまで
  • セッションの有効期限が切れるまで

【構文】セッションスコープに値を設定する場合

// requestはjavax.servlet.http.HttpServletRequestクラス
request.getSession().setAttribute( "変数", 格納値 )

【構文】セッションスコープから値を取得する場合

// requestはjavax.servlet.http.HttpServletRequestクラス
Object object = request.getSession().getAttribute( "変数" );

getAttributeの戻り値がObject型になっているため、必要に応じてキャストする必要がありますよ!

明示的に値を破棄することができます。

【構文】セッションスコープから値を破棄する場合

// requestはjavax.servlet.http.HttpServletRequestクラス
request.getSession().removeAttribute( "変数" );

アプリケーションスコープ

Webアプリケーションを起動して終了するまで、複数のユーザー(パソコン)間で値の共有が可能。

【構文】アプリケーションスコープに値を設定する場合

// requestはjavax.servlet.http.HttpServletRequestクラス
request.getServletContext().setAttribute( "変数", 格納値 )

【構文】アプリケーションスコープから値を取得する場合

// requestはjavax.servlet.http.HttpServletRequestクラス
Object object = request.getServletContext().getAttribute( "変数" );

フォワード

フォワードとは、サーブレットからJSP 又は 他のサーブレットに転送することです。

フォワードを利用することで、リクエストスコープに格納された値を受け取ることができます。

【構文】JSPファイルにフォワードにする場合

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/SampleServlet")
public class SampleServlet extends HttpServlet {

    public SampleServlet() {
        super();
    }

    protected void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

        // クエリパラメータから値を取得
        String value = request.getParameter( "param" );
        // リクエストスコープにvalueという名前で格納
        request.setAttribute( "value", value );

        // JSPファイルにフォワード
        RequestDispatcher rd = request.getRequestDispatcher( "/WEB-INF/result.jsp" );
        rd.forward(request, response);

    }

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