
今回は…
転送
というテーマでお送りします。

吸収が早い事に、最近 気づきました。
今回も、楽しみです。宜しくお願いします。

よく噛む事だと、最近 気づきました。
健康状態を良くして、Javaの勉強も頑張ります。
今回も、よろしくお願いします。
目次
【1】 リクエスト転送
① サーブレットの処理
前回まで見てきた、サーブレットの処理では
Webブラウザから リクエスト が送られると…
対応する サーブレットの doGet() メソッドまたは
doPost() メソッドが起動されます。
そして、内部的に 処理を行って
最終的に レスポンスの生成をして…
それが Webブラウザに返される というものでした。
今回は、このリクエストを
…という事を 見ていきましょう。
② 転送の流れ
流れは、このようになります。
❶ Webブラウザからの リクエスト が送られます。
❷ 対応する サーブレットA の doGet() メソッドまたは
doPost() メソッドが起動され内部的に処理を行います。
❸ そして、別のサーブレットB にリクエストを転送します。
他のサーブレットに 残りの処理を任せる感じです。
❹ サーブレットB の doGet() メソッドまたは
doPost() メソッドが起動され 内部的に処理を行った後…
レスポンスの生成を行います。
❺ 最終的に レスポンスは Webブラウザに送られます。

どうして、わざわざ転送なんて、するんですか?

証拠かも知れませんね。良いですね…。
③ 転送の意味
さて、転送する意味ですね。
今のところは、プログラムが小さいので
1つのサーブレットで処理したほうが簡単ですね。
そして、段々と処理が複雑化してくると
分割したほうが、考えやすくなります。
転送は、Webコンテナと協力して動作する
Webアプリの 「 処理分割の手法 」 なのです。
のちのち、プログラムが大きくなってくると
効果を実感できると思います。
今のところは、こういう方法があるんだ…
という感じで 考えておきましょうか…。

楽しみにして、転送の基本を学びます。
④ リクエスト転送2ステップ
では、続いて リクエスト転送
2ステップを見ていきましょう。
❶ 転送オブジェクトの取得
引数で受け取った request オブジェクトの
getRequestDispatcher() メソッドを使って…
RequestDispatcher型のオブジェクトを取得します。
転送のために必要なオブジェクトと考えましょう。
getRequestDispatcerに渡す引数は
転送先の URLパターンです。
❷ 転送処理
❶ で取得した RequestDispatcher型のオブジェクト
(ここでは dispatcher という変数名を使っていますが)の…
forward()メソッドを呼び出します。
ここで、forward()メソッドに渡す引数は…
doGet() または doPost() で受け取った引数を
そのまま渡すこととなります。
【2】 リクエストスコープ
① リクエストスコープとは
リクエストスコープは
サーバの中に確保される データ保存領域です。
そして、このリクエストスコープは…
リクエストを受けてから、レスポンスを返すまで
利用可能となります。
リクエストスコープに データが保存れる時には
必ず「属性名」と「値」がセットになっています。
この例では、name という属性名 で
「たかはし」という値が保存されて…
gender という属性名で
「男」という値が保存されます。
イメージ的には、変数名と その値 という感じです。

リクエストを受けてから、レスポンスを返すまで 利用可能な
リクエストスコープは、どんな時に使うんですか?

そして、これは 先程の リクエスト転送と
組み合わせて 使う事が多いんです。
② リクエスト転送 と リクエストスコープ
リクエスト転送の中で、リクエストスコープを
使う流れは、こんな感じです。
❶ Webブラウザからの リクエスト が送られます。
❷ 対応する サーブレットA の doGet() メソッドまたは
doPost() メソッドが起動され内部的に処理を行います。
❸ 転送先で 必要なデータを リクエストスコープに格納します。
❹ そして、別のサーブレットB にリクエストを転送します。
❺ 転送先 のサーブレットB では、必要なデータを
リクエストスコープから取得します。
❻ サーブレットB は、内部的に処理を行った後…
レスポンスの生成を行います。
❼ 最終的に レスポンスは Webブラウザに送られます。
という流れになるのです。
こんな感じで、大丈夫そうですか…?

基本をバッチリ学んでおきます。
③ リクエストスコープ利用方法
❶ データを格納する場合
引数で受け取った request オブジェクトの
setAttribute() メソッドを呼び出して格納します。
setAttribute() に渡す引数 は
属性名(String型), 値(Object型) です。
指定した属性名のデータが存在した場合
上書きします。
❷ データを取得する場合
引数で受け取った request オブジェクトの
getAttribute() メソッドを呼び出して 取得します。
getAttribute() に渡す引数は 属性名(String型)で
戻り値は 値(Object型) です。
結果は (Object型) ですので 元のデータ型に
ダウンキャストして使用します。
取得した戻り値の左側に () 丸括弧で 元のデータ型を
記述してキャストします。
また、指定した属性名のデータが存在しない場合の
戻り値は null となります。
【まとめ】
別のサーブレットに 転送できる。
データ保存領域。
✅ 保存期間は
リクエストを受けてから
レスポンスを返すまで。
✅ 主に、リクエスト転送と
組み合わせて活用する。


今回も、ご覧いただき、ありがとうございます。