プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

リクエストスコープ(setAttribute・getAttribute・EL式)

■リクエストスコープの概要

・リクエストごとに生成されるスコープ
・リクエストスコープに保存されたインスタンスはレスポンスが返されるまで利用可能
・フォワード元とフォワード先の間でインスタンスの共有が可能
・スコープに保存できるのはインスタンスだけで、基本的にはJavaBeansクラスのインスタンスを保存する
※JavaBeansの解説に関してはこちら→JavaBeans
 
 


①リクエストスコープにインスタンスを保存

【基本構文】


request.setAttribute("属性名", インスタンス);

※インスタンスの型はオブジェクト型
 
 


 

②リクエストスコープのインスタンスを取得

【基本構文】


request.getAttribute("属性名");

※元の型にキャストする必要があるので注意が必要
 
 


 

③リクエストスコープの使用例(getAttribute)

・リクエストスコープに保存するインスタンスの元となるJavaBeansクラス


package model;

import java.io.Serializable;

public class Model implements Serializable {
	private String name;
	private int age;

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

	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
}

 
・リクエストスコープにインスタンスを保存するサーブレットクラス


package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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.Model;

/**
 * Servlet implementation class mainController
 */
@WebServlet("/mainController")
public class MainController extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public MainController() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//JavaBeansクラスのインスタンスを作成
		Model model = new Model();
		model.setName("田中");
		model.setAge(25);

		//リクエストスコープに保存
		request.setAttribute("model", model);

		//main.jspにフォワード
		RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/jsp/result.jsp");
		rd.forward(request, response);
	}
}

 
・リクエストスコープを出力するJSPファイル


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!-- 取得するインスタンスのクラスをインポート -->
<%@ page import="model.Model" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>リクエストスコープ</title>
</head>
<body>
	<!-- リクエストスコープのインスタンスを取得し、元の型であるModel型にキャスト -->
	<% Model model = (Model)request.getAttribute("model"); %>

	<!-- ゲッターメソッドで変数の値を取得 -->
	<%= model.getName() %>
	<%= model.getAge() %>
</body>
</html>

 
 


 

④リクエストスコープの使用例(EL式)

※③で解説した方法のうち、JSPファイルでリクエストスコープのインスタンスを取得する場合、EL式によって簡素化可能
 
【基本構文】


${属性名.プロパティ}

 
【EL式を使用すると下記記述が不要になる】
・取得するインスタンスのクラスをインポート
・リクエストスコープのインスタンスを取得し、元の型であるModel型にキャスト
 
 
以下クラスは変更なし
・リクエストスコープに保存するインスタンスの元となるJavaBeansクラス
・リクエストスコープにインスタンスを保存するサーブレットクラス
 
 
・リクエストスコープを出力するJSPファイル


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>リクエストスコープ</title>
</head>
<body>
	<!-- EL式でmodelインスタンスのnameプロパティとageプロパティを取得し、出力 -->
	${model.name}
	${model.age}
</body>
</html>