0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JavaとJSPでインスタンスを共有する

Posted at

JavaのサーブレットクラスとJSPでインスタンスを共有することのできる、スコープにていて書いてみます!

スコープ

スコープとはインスタンスを保存できる領域のこと。
サーブレットクラスで生成したインスタンスを、他のサーブレットクラスやJSPで利用するためにスコープを使用する。
サーブレットクラスでインスタンスをスコープという入れ物に入れて、他のサーブレットクラスやJSPでスコープに入っているインスタンスを取り出す。
今回は3つのスコープについて書きます。
無題の図形描画.jpg

リクエストスコープ

リクエストごとに生成されるスコープ。このスコープに生成したインスタンスはレスポンスが返されるまで利用することができる。

リクエストスコープにインスタンスを保存する方法
request.setAttribute("属性名",インスタンス)

リクエストスコープの使い方

Animalクラス
変数(animal)、ゲッター(getAnimal)、セッター(setAnimal)を用意。

Animal.java

public class Animal implements Serializable {
    private String animal;

    public void setAnimal(String animal) {
        this.animal = animal;
    }

    public String getAnimal {
        return this.animal;
    }
}

Animalクラスのインスタンスを生成して、セッターで変数に値を入れる。
その後リクエストスコープにインスタンスを保存。

Main.java

public class Main extends HttpServlet {
    protected void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException,IOException {
        Animal animal = new Animal();
        animal.setAnimal("猫");
        //animalという属性名で保存
        request.setAttribute("animal",animal);

        //フォワード
        RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/Animal.jsp");
        dispatcher.forward(request,response);
    }
}

JSPファイルでリクエストスコープからインスタンスを取得。
取得方法
取得するインスタンスの型 変数名 = (取得するインスタンスの型)request.getAttribute("属性名");

取得後はゲッターを使用して、画面上に猫と表示させている。
Animal.jsp

<%@ page language="java" contentType="text/html"; charset="UTF-8" pageEncoding="UTF-8" %>
<%@ page import="model.Animal" %>
<!--リクエストスコープからインスタンスを取得して変数に格納-->
<% Animal animal = (Animal)request.getAttribute("animal"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>動物</title>
</head>
<body>
<p><%= animal.getName() %></p> <!--猫と表示される-->
</body>

セッションスコープ

リクエストスコープはリクエストを跨いで使用することはできない。一度レスポンスを返すと、リクエストスコープの中のインスタンスは消えてしまう。
無題の図形描画.jpg
リクエストを跨いでもインスタンスが消えないようにするためには、セッションスコープを利用する。
セッションスコープに保存したインスタンスの有効期限は開発者が決めることができる。
無題の図形描画.jpg

セッションスコープの使い方

javax.servlet.http.HttpSessionインスタンスを使用して、セッションスコープを操作する。
HttpSession session = request.getSessino();
session.setAttribute("属性名",インスタンス);

Main.java

public class Main extends HttpServlet {
    protected void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException,IOException {
        Animal animal = new Animal();
        animal.setAnimal("猫");
        //HttpSessionインスタンスの取得
        HttpSession session = request.getSessino();
        //セッションスコープに保存
        session.setAttribute("animal",animal);

        //フォワード
        RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/Animal.jsp");
        dispatcher.forward(request,response);
    }
}

取得方法
取得するインスタンスの型 変数名 = (取得するインスタンスの型)session.getAttribute("属性名")
Animal.jsp

<%@ page language="java" contentType="text/html"; charset="UTF-8" pageEncoding="UTF-8" %>
<%@ page import="model.Animal" %>
<!--セッションスコープからインスタンスを取得して変数に格納-->
<% Animal animal = (Animal)session.getAttribute("animal"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>動物</title>
</head>
<body>
<p><%= animal.getName() %></p> <!--猫と表示される-->
</body>

セッションスコープ内のインスタンスを削除

session.removeAttribute("属性名")

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

セッションスコープはユーザーごとのインスタンスを保存するもの。セッションスコープは全員で共有したいインスタンスを保存できる。Webアプリケーションが終了するまで利用することができる。

アプリケーションスコープの使い方

ServletContext application = this.getServletContext();
application.setAttribute("属性名",インスタンス);

Main.java

public class Main extends HttpServlet {
    protected void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException,IOException {
        Animal animal = new Animal();
        animal.setAnimal("猫");
        //ServletContextインスタンスの取得
        ServletContext application = this.getServletContext();
        //アプリケーションスコープに保存
        application.setAttribute("animal",animal);

        //フォワード
        RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/Animal.jsp");
        dispatcher.forward(request,response);
    }
}

取得方法
取得するインスタンスの型 変数名 = (取得するインスタンスの型)application.getAttribute("属性名")
Animal.jsp

<%@ page language="java" contentType="text/html"; charset="UTF-8" pageEncoding="UTF-8" %>
<%@ page import="model.Animal" %>
<!--アプリケーションスコープからインスタンスを取得して変数に格納-->
<% Animal animal = (Animal)application.getAttribute("animal"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>動物</title>
</head>
<body>
<p><%= animal.getName() %></p> <!--猫と表示される-->
</body>

アプリケーションスコープ内のインスタンスを削除

application.removeAttribute("属性名")

以上、3つのスコープについて書かせていただきました:slight_smile:
何か指摘点があれば、よろしくお願いいたします!

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?