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

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

関連記事

エラー「Project ‘XXXX’ is missing required library: ‘XXXX.jar’」の原因と対処法

<目次> (1) エラー「Project ‘XXXX’ is missing required library: ‘XXXX.jar’」の原因と対処法 …

getParameterとgetAttributeの違いやJSPからServletへの値の受け渡し

<目次> (1) getParameterとgetAttributeの違いやJSPからServletへの値の受け渡し  (1-1) 前半:request.getParameterについて   ●概要 …

Javaのthisとは?コンストラクタで引数を与えている場合・メソッド引数に使われる場合もご紹介

<目次> (1) Javaのthisとは?コンストラクタに出現する場合やメソッド引数に使われる場合もご紹介  (1-1) thisとは?  (1-2) 用途1:自分自身を指定【重要】  (1-3) 用 …

Servlet/JSPで日本語文字が「???」になる問題とFilterの活用について

(0)目次&概説 (1) 事象 (2) 原因 (3) 対処方法1  (3-1) フィルタクラスの新規作成  (3-2) フィルタクラスへのコード追加  (3-3) 疎通確認テスト (4) 対処方法2 …

TomcatでEclipseを使う際にserver.xmlを編集しても上書きされる事象の対処方法

<目次> (1) TomcatでEclipseを使う際にserver.xmlを編集しても上書きされる事象の対処方法  (1-1) 発生状況・エラーメッセージ  (1-2) 原因  (1-3) 対処法 …

  • English (United States)
  • 日本語
Top