■フォワード
MVCモデル(※)で開発する場合、コントローラが処理結果の表示をWebブラウザに表示する際に、サーブレットからJSPファイルを実行する必要がある。
このサーブレットからJSPファイルを実行する処理をフォワードと使用することで解決できる。
(※)MVCモデル
MVCモデル | 概要 |
---|---|
モデル(Model) | アプリケーションの主処理を行う。 |
ビュー(View) | 画面の表示を行う。 |
コントローラ(Controller) | 処理の要求をモデルへ依頼し、実行結果をビューに表示するように制御する。 |
MVCモデルざっくりイメージ図

▼フォワードの特徴
・同じアプリケーション内のサーブレットクラスやJSPファイルに処理を移す。
・リクエスト/レスポンスは1往復
・リクエスト元のURLで表示される。
▼JSPファイルへの直接リクエストをさせない
MVCモデルに従ってWebアプリケーションを作成する際は、Webブラウザからリクエストされるのは、基本的にサーブレットのみとする。
以下、Eclipseにて動的Webプロジェクトを作成する場合のディレクトリ配置について説明する。
動的プロジェクトを作成した際、WebContent(もしくはwebapp)ディレクトリ直下にJSPファイルを配置してしまうと、Webブラウザからリクエスト可能となってしまうため、「WEB-INF」配下にJSPファイルを配置する。
・ディレクトリ階層イメージ図

■実装するプログラムの概要
サーブレットクラスを直接リクエストして、JSPファイルを表示させる。
▼フローチャート

▼プログラム仕様
インプット | 処理内容 | アウトプット |
---|---|---|
【URL】(※1) | WEB-INF配下のJSPファイルを実行する。 | 【画面表示】 フォワードアウトプットページ |
(※1)URLは以下の指定する。
/WEB-INF/jsp/output_forward.jsp
▼画面仕様

①タイトルと説明文を表示する。
▼サンプルコード
・サーブレットクラス(ForwardServlet.java)
package servlet;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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("/ForwardServlet")
public class ForwardServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// WEB-INF配下のJSPファイルを実行する
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/output_forward.jsp");
dispatcher.forward(request, response);
}
}
・JSPファイル(output_forward.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>フォワードアウトプットページ</title>
</head>
<body>
<h1>フォワードアウトプットページ</h1>
<p>フォワードサーブレットクラスから呼び出されたページです。</p>
</body>
</html>
▼実行結果
・http://localhost:8080/JspServletSample/ForwardServlet を指定

参考:http://localhost:8080/JspServletSample/WEB-INF/jsp/output_forward.jsp を実行

直接リクエストしてもJSPファイルは見つからない。
コメント