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
- package test.servlet;
- import java.io.IOException;
- import javax.servlet.RequestDispatcher;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- @WebServlet("/transfertest")
- public class TransferTest extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- //サーブレットコンテキストを取得する
- ServletContext sc = this.getServletContext();
- //リクエストディスパッチャーオブジェクトを取得する
- RequestDispatcher rd = sc.getRequestDispatcher("/JSPTest.jsp");
- //違うページに転送する
- rd.forward(req, resp);
- }
- }
○ 実行結果
次のURLを入力して実行してみましょう。
http://localhost:8080/WebApp/transfertest
○ 解説
19行目で、getServletContextメソッドを使ってServletContextオブジェクトを取得しています。そして22行目で、先ほど取得したServletContextオブジェクトのgetRequestDispatcherメソッドを使ってRequestDispatcherオブジェクトを取得しています。その際に、転送先のページのパスを引数に指定します。今回はJSPTest.jspに転送するためにパスを指定しました。その後、25行目にあるRequestDispatcherオブジェクトのforwardメソッドで転送を行います。その際、引数にHttpServletRequestオブジェクトと、HttpServletResponseオブジェクトを指定します。結果として指定したページに遷移します。
転送は次の手順で遷移します。
この手順ではページを遷移するときに、表示したいページの処理へサーバー内部で移動し、その結果を応答として返します。その結果、Webブラウザーの要求アドレスは変わらずに違うページの結果が表示されます。この方法を用いることで、サーバーがWebブラウザーから受け取った情報のオブジェクトを、そのまま違うページで処理することができ、柔軟な処理を記述することが可能になります。