Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java JSP/Servlet

Servlet(サーブレット)におけるフォワード(forward)とリダイレクト(redirect)の違い

投稿日:2021年4月23日 更新日:

<目次>

(1) Servlet(サーブレット)におけるフォワード(forward)とリダイレクト(redirect)の違い
 (1-1) フォワード(forward)とは?
 (1-2) リダイレクト(redirect)とは?
 (1-3) まとめ:フォワード(forward)とリダイレクト(redirect)の違い

(1) Servlet(サーブレット)におけるフォワード(forward)とリダイレクト(redirect)の違い

(1-1) フォワード(forward)とは?

●概要

フォワードはサーバ内部で要求されたページを別のページとして応答する処理です。例えば、次の図のように、クライアントから「ページAAA」を要求されたものの、サーバ内で別の「ページBBB」に転送して、そのBBBをレスポンスとして応答するような流れです。

(図111)

通信的にはクライアント←→サーバ間は1往復で完結します(後述のリダイレクトと似ていますが、通信的には異なるフローである)。

●構文&サンプルプログラム

フォワードの構文やサンプルプログラムは下記の別記事にてご紹介しています。
 
 

目次にもどる

(1-2) リダイレクト(redirect)とは?

●概要

対するリダイレクト(redirect)はクライアントからのリクエストに一旦応答するものの、自動的にリダイレクト先のページへのリクエスト(request)を発生させて、リダイレクト先のページを返却(response)する仕組みです。

(図121)

通信的には、図のようにクライアント←→サーバ間の通信が2回発生しており、いわばリダイレクトの処理は「クライアント側」で発生している(自動で発生させている)と言えます。

●構文

リダイレクトはHttpServletResponseクラスの「sendRedirect」メソッドで行う事ができます。

(構文)

response. sendRedirect([リダイレクト先のパス]);

●サンプルプログラム

「JSP①」(初期画面)から「JSP②」((図121)のAAAに相当)をリクエストし、そこから自動で「JSP③」((図121)のBBBに相当)へリダイレクトを行います。
 
・JSP①(初期画面)
(図122)①
 
・JSP②(要求画面)
リクエストを引き継げているか?のチェックのため、画面から入力された値をコンソールで出力します。
 
(図122)②
 
・JSP③(リダイレクト先画面)
リクエストを引き継げているか?のチェックのため、画面から入力された値を画面に表示しようとしています(request.getParameterの部分)。
 
(図122)③
 
(動画)実行結果

 

この動画では、JSP①からJSP②を要求 ⇒ JSP②を返却+JSP③へリダイレクト ⇒ JSP③を返却という流れで画面遷移しており、JSP②までは通常のformのsubmitなのでリクエストの内容(テキストボックスに入力された値など)を引き継げており、右側のコンソールにログ(### ScreenA通過 リクエスト値=XXX)が出力されていますが、JSP③にリダイレクトされた際にはrequest.getParameterでリクエストの値を引き継げなくなっています(※リダイレクトの仕様)

 

目次にもどる

(1-3) まとめ:フォワード(forward)とリダイレクト(redirect)の違い

①リクエスト情報を引き継げるのはforward

画面から入力されたリクエスト値をrequest.getParameter等で取り出せるのはforwardのみです。
 

②URLが遷移先画面に変化するのはredirect

forwardは仕様上、フォワード先の画面のURLに変わりません。例えば次のようなフォワード処理を考えます。
 
JSP①⇒Servlet(JSP②にforward)→JSP②
この時、表示されている画面は「JSP②」ですが、URL的にはServletのURLのままです。これを変えようとすると、クライアントから再度リクエストを送ってもらう必要があり、その場合は「redirect」を使います。
 

③性能的にはforwardの方が優れている

forwardの方がクライアント&サーバ間の通信の往復が少ない上に、redirectはネットワークトラフィック的にはリクエストを2回送る形になり、2回目はサーバの待ち行列の最後になるため、リクエストが渋滞している場合に遅くなる事があります。
 

④外部サイトに遷移する場合はredirect

forwardする先はサーバ内部に限定されます。
 

Adsense審査用広告コード


Adsense審査用広告コード


-Java, JSP/Servlet

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

JavaのBigDecimalの使い方+初期化・四則演算・余り・累乗等の主要用途も紹介

<目的> (1) JavaのBigDecimalの使い方+初期化や四則演算・桁数設定等の主要用途も紹介  (1-1) 宣言の方法  (1-2) 代表的な用途(足し算・引き算・掛け算・割り算)  (1- …

Javaのenumとは?使い方や意味を様々な利用シーンでご紹介(if、for、switch他)

<目次> (1) Javaのenumとは?意味や用途を様々な利用シーンでご紹介   (1-1) enumとは?  (1-2) 構文(enumの定義)  (1-3) 様々なenumの使用例 (1) Ja …

JavaのJDBC接続でjava.sql.SQLRecoverableException: Closed Connectionが発生した時の解決メモ

(0)目次&概説 (1) エラー事象の概要  (1-1) エラーの発生状況  (1-2) エラーメッセージ全文 (2) エラーの原因 (3) エラーの対処方法  (3-1) エラーの修正内容  (3- …

JavaScriptでformをPOSTリクエストでsubmitするプログラムの例

  <目次> (1) JavaScriptでformをPOSTリクエストでsubmitするプログラムの例  (1-1) 概要  (1-2) 構文  (1-3) サンプルプログラム  (1-4 …

JavaのDequeの概要や使い方+サンプルプログラムもご紹介

<目次> (1) JavaのDequeの概要や使い方+サンプルプログラムもご紹介  (1-1) Dequeとは?  (1-2) Dequeを実装したクラス  (1-3) Dequeの使い方  (1-4 …

  • English (United States)
  • 日本語
Top