Webアプリケーションのスコープに関する解説記事です。
はじめに
webアプリケーションの勉強をはじめてすぐの方をターゲットにしています。
- よく耳にするセッションとはどういうものか
- セッションを含む、スコープとは何か
上記を知るためのとっかかりとしてください。
1. スコープ概要
スコープとはインスタンスを保存できる領域のことです。
int型やdouble型など基本データ型変数はスコープに保存できません。
スコープには3種類あり、保存できる領域の広さ(有効期限)によって区別されます。
2. スコープの種類
・リクエストスコープ
→レスポンスが返されるまで利用できる
・セッションスコープ
→リクエストをまたいで利用可能
有効期限は開発者が決めることができる
・アプリケーションスコープ
→Webアプリケーションが終了するまで利用できる
最も有効範囲が広く、アクセスしている全員が共有できる
3. 利用方法
リクエストスコープ
リクエストスコープとはHttpServletRequestのメソッドを使用するということです。
・リクエストスコープに保存する
reqest.setAttribute("属性名",インスタンス)
※第1引数:String型、第2引数:Object型
・リクエストスコープからインスタンスを取得する
インスタンスの型 変数名 = (インスタンスの型)reqest.getAttribute("属性名")
セッションスコープ
セッションスコープはHttpSessionのメソッドを使用するということです。
・セッションスコープの取得
HttpSession session = request.getSession();
・セッションスコープに保存する
session.setAttribute("属性名",インスタンス)
・セッションスコープからインスタンスを取得する
インスタンスの型 変数名 = (インスタンスの型)session.getAttribute("属性名")
・セッションスコープからインスタンスを削除する
session.removeAttribute("属性名")
アプリケーションスコープ
アプリケーションスコープはServletContextインスタンスです。
・アプリケーションスコープの取得
ServletContext application = getServletContext();
・アプリケーションスコープに保存する
application.setAttribute("属性名",インスタンス)
・アプリケーションスコープからインスタンスを取得する
インスタンスの型 変数名 = (インスタンスの型)application.getAttribute("属性名")
・アプリケーションスコープからインスタンスを削除する
application.removeAttribute("属性名")
さいごに
セッションスコープであるHttpSeeeionインスタンスはブラウザから使われなくなってもすぐにガベージコレクションの対象にならず消滅しません。
そのため多用しすぎるとメモリ不足になってしまうことがあります。
そこでセッションスコープを破棄することでインスタンスを削除するメソッドがあり、セッションスコープに保存している全てのインスタンスが消滅します。
session.invalidate();
ECサイトでのログアウト時などに使用されます。
本記事では解説を省きましたが、ページスコープと呼ばれるものがJSPにあります。
そのページ単体でのみ使用され、最も有効範囲が狭いスコープです。
参考
(1) 志賀澄人 スッキリわかるサーブレット&JSP入門 株式会社インプレス 2019
(2) FUJITSU 人材育成・研修サービス プログラマー育成コース for Java
https://www.fujitsu.com/jp/group/fap/services/java-education-kc/course/technology/web-apl/06-jsp/