【Java】フォワードを使ってサーブレットからサーブレットに遷移する

Java

今回の記事ではfowardメソッドを使ってサーブレットからサーブレットに処理を遷移する方法についてコードを用いながら解説していきます。

サーブレットからサーブレットに遷移するためのfowardメソッド

サーブレットからサーブレットに遷移するためにはfowardメソッドを利用することで実装することができます。

fowardメソッドをRequestDispatcherインターフェースのオブジェクトを取得する必要があります。

そしてRequestDispatcherインターフェースのオブジェクトはサーブレットのdoGetメソッドやdoPostメソッドの引数として受け取っているHttpServletRequestオブジェクトのgetRequestDispatcherメソッドを呼び出すことで取得することができます。

具体的には次のようなコードでfowardメソッドを利用することができます。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	// fowardメソッドを使ってサーブレットからサーブレットに遷移する
	RequestDispatcher rd = request.getRequestDispatcher("/遷移先のサーブレットのパス");
	rd.forward(request, response);
}

サンプルプログラム

では実際のサンプルプログラムで確認してみましょう。
今回作成するプログラムは次のような流れで処理を遷移させます。

  1. servlet-to-servlet.htmlからServlet1を呼び出す
  2. Servlet1からServlet2を呼び出す
  3. Servlet2からservlet-to-servlet-result.htmlを呼び出して画面を表示する

この2番が今回のメインのサーブレットからサーブレットに処理を遷移する箇所になります。
今回はServlet1とServlet2でコンソールに文字列を表示して、処理が遷移していることを確認します。

servlet-to-servlet.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>サーブレットからサーブレットへフォワードして遷移する</title>
</head>
<body>
	<form action="Servlet1" method="get">
		<input type="submit" value="Servlet1からServlet2に遷移する">	
	</form>
</body>
</html>

Servlet1.java

package uhablog;

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;

/**
 * Servlet implementation class Servlet1
 */
@WebServlet("/Servlet1")
public class Servlet1 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// コンソールに文字列を出力する
		System.out.println("Servlet1の処理");
		
		// fowardメソッドを使ってServlet2に処理をうつす
		RequestDispatcher rd = request.getRequestDispatcher("/Servlet2");
		rd.forward(request, response);
	}

}

Servlet2.java

package uhablog;

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;

/**
 * Servlet implementation class Servlet2
 */
@WebServlet("/Servlet2")
public class Servlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// コンソールに文字列を出力する
		System.out.println("Servlet2の処理");
		
		// fowardメソッドを使って、htmlを画面に表示する
		request.getRequestDispatcher("/servlet-to-servlet-result.html").forward(request, response);
	}

}

servlet-to-servlet-result.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>フォワード結果</title>
</head>
<body>
	<h1>Servlet1からServlet2へ遷移しました</h1>
</body>
</html>

コードが書けたら、サーバーを立ち上げて、servlet-to-servlet.htmlを表示します。

ボタンを押すと次の画面に遷移します。

コンソールを確認して次のように出力されていたらうまくサーブレットからサーブレットへ処理が遷移しています。

Servlet1の処理
Servlet2の処理

以上がサーブレットからサーブレットに処理を遷移させる方法でした。

このブログでは初心者の方向けにJavaでWebアプリを開発する手順をサンプルコード付きで解説した記事があります。
独学でJavaのWebアプリを開発できるようになりたい!という方は挑戦してみてください!

また、独学だけでエンジニアになれるのか不安だなーという方にはTech Academyの無料メンター相談がおすすめです。
無料でプロのエンジニアにキャリアや学習プランについて相談することができます。
詳しくはこちらの記事を参考にしてみてください。

コメント

タイトルとURLをコピーしました