JSP スコープ/リクエストスコープ


スコープ

  • [x]スコープとは
    インスタンスを保存できる領域

  • [x]スコープに保存できるのはインスタンス「だけ」

  • [x]スコープにはString、Integerなど通常クラスの
    インスタンスを保存できるが、基本的には「JavaBeans」と呼ばれる
    クラスのインスタンスを保存する

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

■リクエストスコープからインスタンスを取得
取得するインスタンスの型 名前 =
&nbsp (取得するインスタンスの型) request.getAttribute("属性名")

■setAttributeメソッド
リクエストに新しい属性名と値を
セットすることが出来る

■getAttributeメソッド
追加した属性を取り出す
指定された名前の属性値を Object として返す
getAttribute()API

■ServletRequest
ServletRequestインターフェースAPI

JavaBeans リクエストスコープ例

▪️Test15Servlet.java

package javabeans;

import java.io.IOException;
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("/Test15Servlet")
public class Test15Servlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Test15Beans t15b = new Test15Beans("湊", 24);
        request.setAttribute("t15b", t15b);
        Test15Beans t = (Test15Beans) request.getAttribute("t15b");

    }

}

▪️Test15Beans.java

package javabeans;
import java.io.Serializable;

public class Test15Beans implements Serializable{
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;

    public Test15Beans() {

    }

    public Test15Beans(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }



}

▪️Test15Servlet.java 実行結果

JSPファイルでリクエストスコープを使用する例

▪️Human2Servlet.java

//Controller
//ブラウザからの応答・要求を受け付けるサーブレット
package servlet;

import java.io.IOException;

import javax.servlet.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.Human2;

@WebServlet("/HumanServlet")
public class Human2Servlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Human2 human = new Human2("湊", 23);
        // setAttributeメソッド
        // →リクエストに新しい属性名と値をセットすることができる
        request.setAttribute("human", human); // ここでリクエストスコープに保存

        // フォワード
        RequestDispatcher dispatcher = request.getRequestDispatcher("/Test13Jsp.jsp");
        dispatcher.forward(request, response); // フォワードを行う
    }
}

▪️Human2.java

//Model
package model;

import java.io.Serializable;

public class Human2 implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private int age;

    public Human2() {

    }

    public Human2(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

▪️Test13Jsp.jsp

<!-- View -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="model.Human2"%>
<%
    //ここでリクエストスコープを受け取る
    //getAttributeメソッド
    //→追加した属性を取り出す
    Human2 human = (Human2) request.getAttribute("human");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPでリクエストスコープ</title>
</head>
<body>
    <p>
        <%=human.getName()%>さんは<%=human.getAge()%>歳です
    </p>
</body>
</html>

▪️Human2Servlet.java

▪️ファイル構成