JAVA:IT TRICK

リダイレクト(redirect)

サーブレットでの画面遷移はディスパッチ以外にリダイレクトがあります。ここではリダイレクトについて説明します。
  • このエントリーをはてなブックマークに追加
  • Clip to Evernote
  • IT TRICK RSS

サーブレットでの画面遷移はディスパッチ以外にリダイレクトがあります。ここではリダイレクトについて説明します。

リダイレクトはクライアント(ブラウザ)にページが移転したことを伝えると同時に移転先のURLをレスポンスのLocationに設定することで、ブラウザが自動的に新しいURLにアクセスします。言いかえれば、リダイレクトはクライアント(ブラウザ)に「ここにアクセスしてください。」と一度ブラウザに処理を戻すことで画面遷移を行えます。

以下の図ではサーブレットAで最初のリクエストを受け取り、ブラウザに対してページの移転を伝えるレスポンスコード302を返し、それと同時にLocationにサーブレットBのURLを設定しています。ブラウザがこのレスポンスを受け取ると自動的にサーブレットBにアクセスします。最終的にはサーブレットBから返されるレスポンスがブラウザで表示されます。

以下はリダイレクトを使って画面遷移を行うサンプルです。

リダイレクトのサンプル

このサンプルではSample48146Aで最初のリクエストを受け取り、ただ単にHttpServletResponseクラスのsendRedirect()メソッドを使ってSample48146Bにリダイレクトしています。

Sample48146A.java

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Sample48146A extends HttpServlet {

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

		response.sendRedirect(request.getContextPath() + "/48146B");

	}
}

Sample48146Bではブラウザからの2度目のリクエストを受け取り、文字列「Redirect OK」を出力しています。

Sample48146B.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Sample48146B extends HttpServlet {

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

		PrintWriter out = response.getWriter();
		out.println("Redirect OK");

	}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>

	<servlet>
		<servlet-name>48146A</servlet-name>
		<servlet-class>Sample48146A</servlet-class>
	</servlet>

	<servlet>
		<servlet-name>48146B</servlet-name>
		<servlet-class>Sample48146B</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>48146A</servlet-name>
		<url-pattern>/48146A</url-pattern>
	</servlet-mapping>

	<servlet-mapping>
		<servlet-name>48146B</servlet-name>
		<url-pattern>/48146B</url-pattern>
	</servlet-mapping>

</web-app>

このサンプルを実行するとブラウザで「Redirect OK」が表示されます。また、URLを確認してみてください。画面表示後ではURLがSample48146BのURLに変わっています。