Servlet/JSP 第9回ではServletのMVCモデルの学習を進めていきます。
前回、MVCモデルのそれぞれの役割やどういう動きをしているのかを学習しました。
コントローラーのServletクラスからJSPファイルに処理結果の表示を依頼する必要がありました。
それを実現できるのが、今回解説する「フォワード」になります。
「フォワード」を使用することで、出力処理の担当をJSPファイルに任せられるという仕組みです。
フォワード
フォワードは、RequestDispatcherインスタンスのfoward()メソッドで行います。
フォワードの指示
RequestDispatcher dispatcher =
request.getRequestDispatcher("フォワード先JSPファイルのパス")
dispatcher.forward(request,response);
フォワード先にはJSPファイルだけではなく、同じWebアプリケーションに属しているServlerクラスであれば指定できます。
・JSPファイル・・・webappからのパス
・Servletクラス・・・URLパターン
JSPファイルへの直接リクエストを禁止する
MVCモデルを採用してWebアプリケーションを作ると、ブラウザからリクエストされるのは、基本的にServletクラスになります。JSPファイルはServletクラスからフォワードされて動くのが前提となる為、ブラウザから直接呼び出されるとエラーや不具合が発生することがあります。
そこで、フォワード先としてしか利用しないJSPファイルは、ブラウザから直接のリクエストを防ぐには、JSPファイルの配置場所に注意しましょう。
ブラウザは「WEB-INF」ディレクトリ配下のファイルを直接リクエストできません。
上の画像のJSPファイルをフォワード先として指定する場合
RequestDispatcher dispatcher =
request.getRequestDispatcher("WEB-INF/jsp/〇〇〇.jsp")
dispatcher.forward(request,response);
※〇〇〇.jspの〇〇〇には拡張子jspのファイル名が入ります。
フォワードの動作
それでは実際にフォワードの動作を確認するプログラムを作ってみましょう。
今回作成するアプリケーションは、リクエストしたサーフレットクラスからフォワードされたJSPファイルがHTMLを出力し、それをブラウザに表示します。
次のサーブレットクラスとJSPファイルを作成し、組み合わせます。
- FowardServlet.java:リクエストを処理するコントローラー
- foward.jsp:「フォワード結果」画面を出力するビュー
package servlet;
import java.io.IOException;
import jakarta.servlet.RequestDispatcher;
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("/ForwardServlet")
public class ForwardServlet extends HttpServlet{
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
//フォワード
RequestDispatcher dispatcher = request.getRequestDispatcher("WEB-
INF/jsp/forward.jsp");
dispatcher.forward(request, response);
}
}
結果画面
実行方法
- 「http://localhost:8080/Forward1/ForwardServlet」にブラウザでリクエスト
- 「ForwardServlet.java」をEclipseで実行する
まとめ
今回のServletクラスはJSPファイルにフォワードするだけの処理となります。ブラウザにはフォワードされたJSPファイルが出力する内容が表示されます。
前回学習したコントローラーから出力処理の担当をJSPファイルに任せられるという仕組みを意識しながらプログラムの流れを理解しましょう。
コメント