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

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

関連記事

JVMの基本アーキテクチャと各サブシステム等の概要説明について

(0)目次&概説 (1) 記事の目的 (2) Javaのアーキテクチャ概要・概観 (3) JVMのアーキテクチャ概要  (3-1) JVMの概観  (3-2) JVMの主要サブシステム1:Class …

JavaのMapの種類や特徴について(HashMap/LinkedHashMap/TreeMap)

<目次> (1) JavaのMapの種類や特徴について(HashMap/LinkedHashMap/TreeMap)  (1-1) Mapとは?  (1-2) Mapの種類や特徴   (1-2-1) …

Spring Bootでpom.xmlに「Unknown error」が出た時の対処方法について

  <目次> (1) Spring Bootでpom.xmlに「Unknown error」が出た時の対処方法について  (1-1) 発生状況  (1-2) 原因  (1-3) 対処法①(非 …

Tomcatのコネクションプールの設定手順

<目次> (1) Tomcatのコネクションプールの設定手順  (1-1) コネクションプールとは?  (1-2) コネクションプールの設定手順   (1-2-1) context.xmlの記述    …

JavaScriptの必須チェックのサンプルプログラム

  <目次> (1) JavaScriptの必須チェックのサンプルプログラム  (1-1) 構文  (1-2) サンプルプログラム (1) JavaScriptの必須チェックのサンプルプログ …

  • English (United States)
  • 日本語
Top