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

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

関連記事

JSP/Servletで画面毎のアクセスカウンターを作成してみた(パート2:ソース解説編)

(1) 仕様について (2) ソースコード  (2-1) AccessCounter2.java   (2-1-1) サンプルPG   (2-1-2) サンプルPG解説  (2-2) DbConnec …

GitHubのWebAPIをコールしてユーザー情報を取得するサンプルプログラムの解説+エラー対応も2例紹介

(0)目次&概説 (1) 目的  (1-1) 記事の目的 (2) APIの概要  (2-1) APIとは?  (2-2) Web APIとは?  (2-3) Web APIの様々な呼び方   (2-3 …

InputStreamやInputStreamReaderやBufferedReaderの機能や役割の違い+速度測定で比較をした結果共有

(0)目次&概説 (1) 記事の目的  (1-1) 目的  (1-2) 前提条件 (2) InputStreamやBufferedReaderとは?  (2-1) 概要  (2-2) InputStr …

JavaのhashCode()で31を掛け算する理由について

<目次> (1) JavaのhashCode()で31を掛け算する理由について  (1-1) ハッシュの計算のソースコード  (1-2) ソースコードに登場する代表的な変数  (1-3) ソースコード …

Javaでcsvファイルに書き込みを行う方法(サンプルプログラム付き)

<目次> (1) Javaでcsvファイルに書き込みを行う方法  (1-1) 構文  (1-2) サンプルプログラム (1) Javaでcsvファイルに書き込みを行う方法 Javaでcsvファイルを生 …

  • English (United States)
  • 日本語
Top