Servlet/JSP 第10回では前回に引き続きMVCモデルについて解説していきます。
処理を別の処理に転送する方法はフォワードだけではありません。
もうひとつ「リダイレクト」という方法があります。
この記事では、リダイレクトについてコード書いて解説しています。
実際にコードを書きながら、学習を進めてみましょう。
リダイレクトとは
リダイレクトは、ブラウザのリクエスト先を変更して処理の転送を行います。
リダイレクトの流れ
リダイレクトでは画像の流れで処理が進行します。
- ブラウザがリクエストを送ると、サーブレットクラスから「ここにリクエストをしなさい」という命令がレスポンスされる。
- 命令を受けたブラウザは、指示された先に自動的に再リクエストを行う。
- 再リクエストの結果が、ブラウザに表示される。
この画像ではサーブレットクラスへリダイレクトしていますが、ブラウザがリクエストできる先であればどこへでもリダイレクトできます。
リダイレクトの指示
リダイレクトは、HttpServletResponseインスタンスのsendRedirect()メソッドで行います。
リダイレクト先はURLを指定します。ただし、リダイレクト先が同じアプリケーションの場合は、次のようにURLを使用せずにリダイレクト先を指定できます。
リダイレクト先に指定するもの(同じアプリケーションの場合)
- Servletクラスの場合・・・URLパターン
- JSPファイルの場合・・・webappからのパス
URLで指定する例
response.sendRedirect("http://www.sample.com/sample/SampleServlet");
URLパターンで指定する例
response.sendRedirect("SampleServlet");
リダイレクトの動作
リクエストされたServletクラスは、リクエスト受けるとリダイレクトのみを行います。
リダイレクト先は、以前作成したじゃんけんプログラムのServletクラスです。
実行すると、Servletクラスが出力したじゃんけんの結果をブラウザに表示されます。
package servlet;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/RedirectServlet")
public class RedirectServlet extends HttpServlet{
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
//リダイレクト
response.sendRedirect("JyankenServlet");
}
}
結果画面
「RedirectServlet.java」で実行しても結果画面のURLは「JyankenServlet」になっていることに注目してください。
実行方法
- 「http://localhost:8080/example/RedirectServlet」にブラウザでリクエスト
- 「RedirectServlet.java」をEclipseで実行する
まとめ
フォワードとリダイレクトの使い分け
フォワードとリダイレクトには次のような特徴があります。
フォワードの特徴
- 同じアプリケーション内のServletクラスやJSPファイルに処理を移す。
- サーバー側での処理であり、ユーザーには見えません。
- リクエストを処理しているServletクラスやJSPなどから、他のサーブレットやJSPに処理を移す際に使用します。
- ユーザーは最初にリクエストしたURLが表示されたままで、リクエスト/レスポンスの流れはサーバー内部で完結します。
- ブラウザのURLは変化せず、ユーザーには他のページへの移動がわからないようになります。
リダイレクトの特徴
- ブラウザに別のServletクラスやJSPファイルをリクエストさせ、実行し直す。
- ユーザーに新しいURLに移動するよう指示を出します。
- リダイレクト先のURLがブラウザのアドレスバーに表示されます。
コメント