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のsynchronizedとは?ある場合とない場合のサンプルPGを比較付き

<目次> (1) Javaのsynchronizedとは?ある場合とない場合のサンプルPGを比較付き  (1-1) synchronizedの概要  (1-2) synchronizedの構文  (1 …

WARファイルの作成方法について(Eclipse利用あり、なしの2パターン)

  <目次> (1) WARファイルの作成方法について(Eclipse利用あり、なしの2パターン)  (1-1) 方法①:Eclipseを使ってWARファイルを作る方法  (1-2) 方法② …

JavaScriptのMapとは?基本的な使い方やサンプルプログラムをご紹介

<目次> (1) JavaScriptのMapとは?基本的な使い方やサンプルプログラムをご紹介  (1-1) 概要・構文  (1-2) サンプルプログラム   ●JavaScriptのサンプル   ● …

Javaで正規表現の使い方をご紹介+サンプルプログラム付き

<目次> (1) Javaで正規表現の使い方をご紹介  (1-1) 正規表現とは?  (1-2) Javaでの正規表現の使い方  (1-3) サンプルプログラム (1) Javaで正規表現の使い方をご …

JSP/Servletで必須入力チェックを実装する方法+サンプルプログラムや操作動画も紹介

<目次> (1) JSP/Servletで必須入力チェックを実装する方法  (1-1) 必須入力チェックの概要   (1-1-1) 全体の処理フロー   (1-1-2) 必須入力チェック部分の処理フロ …

  • English (United States)
  • 日本語
Top