フレサーモン難民

備忘録など ほぼ自分向けのまとめ

リクエストスコープ

リクエストスコープとは

リクエストごとに生成されるスコープ。

リクエストスコープに保存したインスタンスの有効期限はレスポンスが返されるまで。リクエストスコープを利用することで、フォワード元とフォワード先とでインスタンスを共有することができるようになる。

リクエストスコープの基本操作

リクエストスコープを表すのは、HttpServletRequestインスタンス。なので、HttpServletRequestインスタンスのメソッドを使うことで、リクエストスコープを操作することができる。

下のコードはJavaBeansインスタンスをリクエストスコープに保存する例、また保存されたインスタンスをリクエストスコープから取得する例のサーブレットのコード。

// スコープに保存するインスタンスを生成
Book book = new Book("ハイペリオンの没落", 784);

// インスタンスをリクエストスコープに保存
request.setAttribute("book", book);

// インスタンスをリクエストスコープから取得
Book b = (Book) request.getAttribute("book");

インスタンスを保存/取得する際の引数にある""で囲まれた名前は、属性名という。属性名はスコープに保存するインスタンスの管理用の名前を表し、インスタンスをスコープから取得する際に必要となる。

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

※第1引数はString型、第2引数はObject型となる
※第2引数にはあらゆるクラスのインスタンスを指定可能

リクエストスコープ内のインスタンスを取得
取得するインスタンスの型 変数名 = (取得するインスタンスの型) request.getAttribute("属性名");

※getAttribute()の戻り値は、取得したインスタンスObject型で返される。
 なので、取得したインスタンスをキャストで元の型に型変換する必要がある。

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

<%@ page language="java" contentType="text/html";
          pageEncoding="UTF-8 %>
<%@ page import="ex.Book" %>
<%
// インスタンスをリクエストスコープから取得
Book b = (Book) request.getAttribute("book");
%>

<!DOCTYPE html>
~省略~
<%= b.getTitle() %>の価格は<%= b.getPrice() %>円です 
~省略~


参照:「スッキリわかるサーブレット&JSP入門 第2版」