JavaEE でのファイル間のインスタンスの受け渡し方法を解説します。
インスタンスの受け渡しには、以下の3つのスコープを使います。
- リクエストスコープ
- セッションスコープ
- アプリケーションスコープ
では、それぞれの違いも含めて解説します。
また、下記の “属性名” とは受け渡すときのキーワードのこと。
受け取り側は、受け取りたいインスタンスと同じ属性名を指定することで受け取ることができます。
リクエストスコープ
リクエストスコープとは、インスタンスを “一度だけ” 渡すために使うスコープ。
往復ができないため、いわば使い捨てのスコープです。
フォワードでは使えますが、リダイレクトでは使えません。
送信元の処理
request.setAttribute("属性名", インスタンス);
送信先の処理(受け取るとき)
型名 変数名 = (キャスト) request.getAttribute(“属性名”);
※getAttribute(); で受け取ったときは、オブジェクト型のインスタンスになっているので、( )内で本来の型名にキャストして受け取ります。
セッションスコープ
セッションスコープとは、ユーザーごとにインスタンスを作成することができるスコープです。
スコープの有効期限を開発者が決めることができ、また何度でも往復して使うことができます。
送信元の処理
HttpSession session = request.getSession();
session.setAttribute(“属性名”, インスタンス);
送信先の処理(受け取るとき)
HttpSession session = request.getSession();
型名 変数名 = (キャスト) session.getAttribute(“属性名”);
※コード内の session は変数。違う名前でも動作は変わらないが、session がわかりやすい。
※getAttribute(); で受け取ったときは、オブジェクト型のインスタンスになっているので、( )内で本来の型名にキャストして受け取ります。
アプリケーションスコープ
アプリケーションスコープとは、ユーザー全員が共有できるスコープのこと。
SNSでの投稿は全員が見ることができるように、ユーザー全員で共有したい情報を格納します。
送信元
ServletContext application = this.getServletContext();
application.setAttribute(“属性名”, インスタンス);
送信先(受け取るとき)
ServletContext application = this.getServletContext();
型名 変数名 = (キャスト) application.getAttribute(“属性名”);
※コード内の application は変数。違う名前でも動作は変わらないが、application がわかりやすい。
※getAttribute(); で受け取ったときは、オブジェクト型のインスタンスになっているので、( )内で本来の型名にキャストして受け取ります。