スコープとは
スコープとは、Webアプリで使用する情報(データ)を格納することです。
スコープには、3種類の有効範囲があり、用途によって使い分ける必要があります。
スコープを使用することで、複数のJSPやサーブレットで情報(データ)を共有することができます。
それでは、一緒に学習して行きましょう!!
スコープの種類
今回、紹介するスコープの種類は以下の3つです。ページ属性は省略します。
- リクエストスコープ
- セッションスコープ
- アプリケーションスコープ
リクエストスコープ

1回のリクエストのみ共有することができます。
【サーブレット】と【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);
}
}