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

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

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

○ ファイル

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

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

サンプルダウンロード

○ プログラム

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

  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.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class TransferTest extends HttpServlet {
  10.  @Override
  11.  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  12.   //サーブレットコンテキストを取得する
  13.   ServletContext sc = this.getServletContext();
  14.   //リクエストディスパッチャーオブジェクトを取得する
  15.   RequestDispatcher rd = sc.getRequestDispatcher("/JSPTest.jsp");
  16.   //違うページに転送する
  17.   rd.forward(req, resp);
  18.  }
  19. }

〇 Webアプリケーション設定ファイルの編集

 web.xmlに次の内容を追加してください。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5.   http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  6.   version="3.1">
(そのほかの記述…)
  1.  <servlet>
  2.   <servlet-name>TransgerTest</servlet-name>
  3.   <servlet-class>test.servlet.TransferTest</servlet-class>
  4.  </servlet>
  5.  <servlet-mapping>
  6.   <servlet-name>TransgerTest</servlet-name>
  7.   <url-pattern>/transfertest</url-pattern>
  8.  </servlet-mapping>
  9. </web-app>

○ 実行結果

http://localhost:8080/WebApp/transfertest

実行結果
実行結果

○ 解説

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

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

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

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

前へ   次へ