1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JSP Forward

Last updated at Posted at 2016-02-09

Forward

MVCモデルで開発する時、
コントローラ(C)が処理結果の表示をビュー(V)に依頼する際に、
サーブレットクラス(C)からJSPファイル(V)を利用する必要がある。

▪️フォワードの構文
RequestDispatcher dispatcher =
      request.getRequestDispatcher("フォワード先");
dispatcher.forward(request,response);
※「javax.servlet.RequestDispatcher」をimportする必要がある。

英語:dispatch 発送する,急送する,急いで派遣する

ServletからJSPへフォワード

▪️forward.jsp(WEB-INF/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>

▪️ForwardServlet.java(servletパッケージ)

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 {
		RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/forward.jsp");
		dispatcher.forward(request, response);
	}

}

▪️ForwardServlet.java 実行結果 フォワード例①
スクリーンショット 2016-02-09 14.11.06.png

ServletからServletへフォワード

▪️RedirectServlet.java 例②

//サーブレット
//フォワード
package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.RequestDispatcher;

@WebServlet("/RedirectServlet")
public class RedirectServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		RequestDispatcher dispatcher = request.getRequestDispatcher("/Test05Servlet");
		dispatcher.forward(request, response);
	}
}

▪️Test05Servlet.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.*;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//Test02ServletはURLパターン

@WebServlet("/Test05Servlet")
public class Test05Servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public Test05Servlet() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// HTMLを出力
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Forward</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>フォワード</h1>");
		out.println("フォワードされたページです");
		out.println("<p></p>");
		out.println("</body>");
		out.println("</html>");
		response.setContentType("text/html; charset=UTF-8");
		// 実行結果のHTMLを出力する処理(サーブレットクラスでHTMLを出力する処理)
		PrintWriter out1 = response.getWriter();
		out1.println("<html>");
		out1.println("…");
		out1.println("</html>");
		// getWriter().append("Served at: ").append(request.getContextPath());
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

▪️RedirectServlet.java 実行結果
http://localhost:8080/Test05/RedirectServlet
スクリーンショット 2016-02-10 16.03.52.png

▪️JSPファイルを直接リクエストできないようにする方法
JSPファイルを「WEB-INF」ディレクトリ以下に配置する
ブラウザはこのディレクトリ以下に配置されたファイルを直接リクエストできない

ServletからJSPへフォワード

▪️Test10Servlet.java

//ServletからJSPへフォワード
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("/Test10Servlet")
public class Test10Servlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// フォワード
		RequestDispatcher dispatcher = request.getRequestDispatcher("/Test10Jsp.jsp");
		dispatcher.forward(request, response);
	}

}

▪️Test10Jsp.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>
	<h2>フォワード</h2>
</body>
</html>

▪️Test10Servlet.java 実行結果
スクリーンショット 2016-02-17 14.32.34.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?