Servletでのページ遷移(転送)

ページを遷移するほかの方法を見てみましょう。違うページに転送するには、RequestDispatcherインタフェースのforwardメソッドを利用します。次の手順で利用します。

1.HttpServletResponseオブジェクトのgetServletContextメソッドでServletContextオブジェクトを取得する。
2.ServletContextオブジェクトのgetRequestDispatcherメソッドでRequestDispatcherオブジェクトを取得する。その際、引数に転送先のページのパスをセットする。
3.RequestDispatcherオブジェクトのforwardメソッドで転送する。

○ ファイル

プロジェクトに次のようなServletを追加してください。

パッケージ名 test.servlet
クラス名 TransferTest
スーパークラス名 javax.servlet.http.HttpServlet

サンプルダウンロード

○ プログラム

doGetメソッドを追加して、次のようにプログラムを入力してください。

TransferTest.java

  1. package test.servlet;
  2. import java.io.IOException;
  3. import javax.servlet.RequestDispatcher;
  4. import javax.servlet.ServletContext;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. @WebServlet("/transfertest")
  11. public class TransferTest extends HttpServlet {
  12.     @Override
  13.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  14.         //サーブレットコンテキストを取得する
  15.         ServletContext sc = this.getServletContext();
  16.         
  17.         //リクエストディスパッチャーオブジェクトを取得する
  18.         RequestDispatcher rd = sc.getRequestDispatcher("/JSPTest.jsp");
  19.         
  20.         //違うページに転送する
  21.         rd.forward(req, resp);
  22.     }
  23. }

○ 実行結果

次のURLを入力して実行してみましょう。

http://localhost:8080/WebApp/transfertest

実行結果
実行結果

○ 解説

19行目で、getServletContextメソッドを使ってServletContextオブジェクトを取得しています。そして22行目で、先ほど取得したServletContextオブジェクトのgetRequestDispatcherメソッドを使ってRequestDispatcherオブジェクトを取得しています。その際に、転送先のページのパスを引数に指定します。今回はJSPTest.jspに転送するためにパスを指定しました。その後、25行目にあるRequestDispatcherオブジェクトのforwardメソッドで転送を行います。その際、引数にHttpServletRequestオブジェクトと、HttpServletResponseオブジェクトを指定します。結果として指定したページに遷移します。

転送は次の手順で遷移します。

転送の仕組み
転送の仕組み

この手順ではページを遷移するときに、表示したいページの処理へサーバー内部で移動し、その結果を応答として返します。その結果、Webブラウザーの要求アドレスは変わらずに違うページの結果が表示されます。この方法を用いることで、サーバーがWebブラウザーから受け取った情報のオブジェクトを、そのまま違うページで処理することができ、柔軟な処理を記述することが可能になります。

前へ   次へ