まるなな サーブレットとJSP 7:)
今回は
7章〜
リクエストスコープについて
第6章で学んだフォワード転送は処理の連携はできるがデータの連携ができない!
これだとサーブレットクラスの処理結果をJSPファイルで出力できない・・・
サーブレットクラスで生成したインスタンスをJSPファイルで利用するにはスコープ(インスタンスを保存できる領域)を利用する
スコープを経由させてサーブレットクラスとJSPファイルの間でインスタンスを共有したり受け渡すことが可能になる
スコープには4種類ある
・ページスコープ
・リクエストスコープ
・セッションスコープ
・アプリケーションスコープ
種類によって保存したインスタンスの有効期限が異なる
スコープにはインスタンスだけが保存できる
基本データ型変数はインスタンスではないのでスコープに保存できない
(この場合はラッパークラスを使用する)
基本的にJavaBeansと呼ばれるクラスのインスタンスを保存する
(Javaのクラスの独立性を高め部品として再利用しやすくするためのルールまたはそのルールを守っているクラスのこと)
JavaBeansのルール
①直列化可能
②クラスはpublicでパッケージに所属する
③publicで引数のないコンストラクタを持つ
④フィールドはカプセル化されている
⑤命令規則に従ったgetter/setterを持つ
getter/setterの命令規則
getter
・メソッド名はgetから始め、以降の単語の先頭の文字は大文字
ただし戻り値の型がbooleanの場合はisからはじめる
・引数はないが戻り値はフィールド
setter
・メソッド名はsetから始め、以降の単語の先頭の文字は大文字
・引数は1つでフィールドに設定する値を受けとる。戻り値なし
JavaBeansのプロパティとはインスタンスの属性のこと
これはgetterまたはsetterを作ることでうまれる
リクエストスコープはリクエストごとに生成される
保存したインスタンスはレスポンスが返されるまで利用できる
リクエストスコープにインスタンスを保存するにはHttpServletRequestインスタンスのsetAtrribute()メソッドを使用する
第1引数はスコープに保存するインスタンスの管理用の名前(属性名)を指定(スコープに保存したインスタンスを取得する際必要)
リクエストスコープ内のインスタンスを取得する場合
HttpServletRequestのgetAttribute()メソッドで取得
JSPファイルでリクエストスコープを使用する場合暗黙オブジェクトrequestを使用
リクエストスコープではできないことがある
・リクエストスコープの正体のHttpServletRequestインスタンスはレスポンスが返されると同時に消滅する
・そのときリクエストスコープに保存していたインスタンスも消える
・だからリクエストスコープに保存したインスタンスは次回のリクエストでは取得できない
つまりリクエストをまたいでインスタンスを共有できない
それから
転送前に一度レスポンスを行うからリダイレクト元でリクエストスコープに保存したインスタンスはリダイレクト先では取得できないから注意!
第7章はこんなかんじ
JavaBeansのこととか
p193とかp194とか
あいまいだから何度か作ったり読んだりする
課題が少し長くて複雑だから何度もやって覚える
次は8章セッションスコープ〜