リダイレクト

Revised: 27th/Oct./2002

前節ではRequestDispatcherクラスのforward(), include()メソッドを使いました。ここでは全く別の仕組みとしてsendRedirect()メソッドを紹介しましょう。

リダイレクトとは

Java のリダイレクトとは、クライアントに別リソースへの再要求を促すものです。一般に、リダイレクトの応答を受け取ったクライアントは、自動的に指定されたリソースへの要求を発行します。ウェッブページで言えば、「別のページへ飛ぶ」という動作になります。最初の要求/応答のトランザクションと、リダイレクト先への要求/応答のトランザクションは、まったく別のものです。

forward() では、一つの要求/応答の処理の過程を、サーバ内で別リソースに振り分けて伊いたのに対して、sendRedirect() では、クライアント/サーバ間で、二組のまったく独立した要求/応答のやり取りを必要とします。このため、フォワードでは、転送先に要求/応答オブジェクトを渡せたのに対して、リダイレクトでは、リダイレクト先に要求/応答オブジェクトを渡すことができません。つまり、一回目の要求オブジェクトに対してセットしたオブジェクトは、二回目の要求オブジェクトには含まれずに失われてしまいます。また、二組の要求/応答の通信が必要なリダイレクトよりも、サーバ内の処理で完結するフォワードのほうが高速であり、データの損失の危険性もありません。

サーブレットからJSPへのリダイレクト

環境設定

前節と同じリソースを使います。ドキュメント・ルートは "C:\java\dispatchers" であり、サーバのコンテキスト・ルート "/dispatching" になるように設定しています。未設定の場合は、前節に戻って設定してください。

Tomcat の server.xml に次の行が挿入されているはずです(server.xml の絶対パスは、デフォルトでは "C:\Program Files\Apache Tomcat 4.0\conf\server.xml" になっているはずです)。

        <!-- Dispatching Examples Context -->
        <Context path="/dispatching" docBase="C:/java/dispatchers" debug="0"
                 reloadable="true" crossContext="true"/>

また、ドキュメントルート配下のディレクトリ構造は次のようになっているはずです。

C:\java\dispatchers以下のディレクトリ構造
図: C:\java\dispatchers 以下のディレクトリ構造

サーブレットのソースコード

"C:\java\dispatchers\WEB-INF\classes" に次のファイルを作成してください。

RedirectingServlet.java:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RedirectingServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
		doPerform(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
		doPerform(request, response);
	}

	public void doPerform(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {

		// 応答をリダイレクト
		response.sendRedirect("/redirectedJSP.jsp");
		
    }
}

JSP のソースコード

これを受け取る JSP は "C:\java\dispatchers\includedJSP.jsp" です。

redirectedJSP.jsp:

<?xml version="1.0" encoding="Shift_JIS" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=Shift_JIS" />
    <title>リダイレクト先</title>
  </head>
  <body>
    <p>この文書はサーブレットからリダイレクトされたJSPによるものです。</p>
  </body>
</html>

コンパイル

例によって、サーブレットをコンパイルするためには、環境変数 CLASSPATH に servlet.jar の絶対パスがセットされている必要があります。"C:\autoexec.bat" (Windows 9x系の場合)やコントロール パネルの「システム」-> 「詳細」-> 「環境変数」(Windows NT系の場合)環境変数に CLASSPATH をセットするか、コマンドラインから一時的にセットしてください。次の二つ目のコマンドは、コマンドラインから一時的に CLASSPATH をセットする場合の例です。本節まで順番に設定してきている方は、既にOSに環境変数を設定しているはずなので、setコマンドによる CLASSPATH の設定は不要です。

C:\>cd C:\java\dispatchers\WBE-INF\classes

C:\java\dispatchers\WBE-INF\classes>set CLASSPATH=C:\Program Files\Apache Group\
Tomcat 4.1\common\lib\servlet.jar;.;%PATH%

C:\java\dispatchers\WBE-INF\classes>javac IncludingServlet.java

実行

ブラウザのアドレス欄に次のように入力してください。

http://localhost/dispachers/IncludingServlet


Copyright © 2002 SUGAI, Manabu. All Rights Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送