Java

【Java】アプリケーションスコープの特徴や使い方を説明します。

1.アプリケーションスコープとは

アプリケーションスコープとは、複数のユーザがアクセスするWebアプリケーションで、各ユーザの状態を共有して保存する機能です。

アプリケーションスコープに保存されたインスタンスは、アプリケーションが停止するまで、またはインスタンスを削除するまで保持されます。
そのため、Webブラウザを再起動してもアプリケーションを停止しない限り、インスタンスは保存され続けます。

リクエストスコープは、リクエストごとにインスタンスを保存する機能であり、
セッションスコープは、ユーザ(ブラウザ)ごとにインスタンスを保存する機能です。
これらスコープの違いや特徴はは次の記事にまとめてあります。
(作成中)

2.アプリケーションスコープを使ったデータ取捨の方法

まずは、基本構文から勉強していきましょう。

アプリケーションスコープを使ってデータの格納や取得、削除などを行うときは基本的に次のようなコードを記載します。

基本構文1

【アプリケーションスコープを取得】

ServletContext application = this.getServletContext();

アプリケーションスコープを使用する場合、最初に定義します。
以降は、ここで取得したアプリケーションスコープにインスタンスを格納していきます。


基本構文2

【アプリケーションスコープからインスタンスを取得】

application.getAttribute(”属性名(key)”,インスタンス(value));


基本構文3

【アプリケーションスコープにインスタンスを格納】

application.setAttribute(”属性名(key)”);

次に、リクエストスコープを実際に用いたコードを見ていきましょう。

SampleController(アプリケーションスコープにインスタンス格納・取得するサーブレット)

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
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("/SampleController")
public class SampleController extends HttpServlet{

public static final String SESSION_KEY = "test";

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

//➀アプリケーションスコープの作成・取得
ServletContext application = this.getServletContext();

//➁入力された結果を取得する
String str;
if(request.getParameter("appscp") != null)

str = request.getParameter("appscp");

else

str = "-1";

int num = Integer.parseInt(str);

//➂上記➁で取得した選択結果によりアプリケーションスコープに保存or削除
if(num==0)

application.setAttribute("test","アプリケーションスコープにインスタンスを保持しています。");

else if(num==1)

application.removeAttribute("test");

//➃アプリケーションスコープにインスタンスが保存されているかどうかの判定
if(application.getAttribute("test")==null||application.getAttribute("test")=="")

request.setAttribute("appscope","アプリケーションスコープにインスタンスは保持していません。");

else

request.setAttribute("appscope",(String)application.getAttribute("test"));

//➄sampleScope.jspにフォワード
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/AppSample.jsp");
dispatcher.forward(request, response);

}

}

 

AppSample(Webブラウザに表示するjspファイル)

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%=request.getAttribute("appscope") %>

<form action="/App/SampleController" method="get">

<input type="radio" name="appscp" value="0">アプリケーションスコープにインスタンスを取得する<br>
<input type="radio" name="appscp" value="1">アプリケーションスコープからインスタンスを破棄する<br>
<input type="radio" name="appscp" value="2">アプリケーションスコープがインスタンスを保持しているか確認する。<br>
<input type="submit" name="button" value="送信">

</form>
</body>
</html>

 

上記コードは、次の動作を持つプログラムです。

  • インスタンス取捨の選択ボタンを画面に表示し、入力させる(取得・破棄・保持状況の確認)
  • アプリケーションスコープを作成・取得する※①
  • Webブラウザ上で入力された選択結果を取得する※➁
  • 上記で取得した選択結果によりアプリケーションスコープに保存または削除する※➂
  • アプリケーションスコープからインスタンスを取得し、インスタンスが保存されているか否かを確認※➃
  • 結果をsampleScope.jspに渡して、Webページに表示する※➄

実行結果

アプリケーションを起動しURLを入力すると、次の画面が表示されます。

「アプリケーションスコープにインスタンスを取得する」を選択して「送信」を押すと画面が再描画され、メッセージ「アプリケーションスコープにインスタンスを保持しています」が表示されます。

ブラウザを再起動してもスコープにインスタンスを保持し続けているため、同様のメッセージが表示されます。

また、同じネットワークの別ユーザがインスタンスを破棄した場合は、その処理が反映されるため、再描画した際にメッセージが「アプリケーションスコープにインスタンスは保持していません」となります。

次にアプリケーションスコープにインスタンスを保持した状態で、「インスタンスの保持状況の確認」を選択して「送信」を押すと画面が再描画されメッセージ「アプリケーションスコープにインスタンスを保持しています」が表示されます。

最後にアプリケーションスコープにインスタンスを保持した状態で、「アプリケーションスコープからインスタンスを破棄する」を選択して「送信」を押すと画面が再描画されメッセージ「アプリケーションスコープにインスタンスは保持していません」が表示されます。

 

以上でこの記事は終了となります。お疲れ様でした(^^)

-Java

Copyright© タカログ , 2022 All Rights Reserved Powered by AFFINGER5.