ルーティング

ルーティングについて

SimpleController4Jでフロントコントローラ(DispatcherServlet)からディスパッチをされ、 実行される処理を記述するには、コントローラとなるクラス・メソッドに以下のアノテーションを記述します。

  • Controllerアノテーション(@Controller)
  • Routeアノテーション(@Route)

@Controllerアノテーション

SimpleController4Jで、ディスパッチ先となる「コントローラ」と認識されるためには、 @Controllerアノテーションをクラスに記述します。
例としては以下のようになります。

/**
 * コントローラサンプル
 */
@Controller
public class UserController {
	〜 メソッド定義など 〜
}

@Routeアノテーション

コントローラとして認識されるクラスに定義されるメソッドがフロントコントローラ(DispatcherServlet)から実行されます。
@Routeアノテーションで以下の情報を定義します。

  • ルーティングパス
  • HTTPメソッド

「[コンテキスト]/user」のリクエストパスで、HTTPメソッドが「GET」となるメソッドの定義は 以下のようになります。

/**
 * サンプルコントローラ
 */
@Controller
public class UserController {

	@Route(path = "/user", method = Method.GET)
	public void getUser(HttpServletRequest request, HttpServletResponse response)
					 	  throws IOException {
		PrintWriter out = response.getWriter();
		out.println("getUser execute!");
	}
}
■ 実行結果
CW-02:build XXX$ curl localhost:8080/SimpleControllerSample/user
getUser execute!

リクエストパスは、任意のパスを定義して頂ければ、クライアントからのリクエストパスと@Routeアノテーションの path属性がマッチするメソッドが実行されます。
リクエストパスのマッチングに加えて、HTTPメソッドのマッチングが判定されますが、SimpleController4Jで サポートするHTTPメソッドは以下になります。

  1. GET
  2. POST
  3. PUT
  4. DELETE
  5. OPTIONS
  6. TRACE

また、クラスに@Routeアノテーションを記述して起点となるリクエストパスを設定し、個々のメソッドで それ以降のパスを設定することも出来ます。

/**
 * ユーザ登録コントーラ
 */
@Controller
@Route(path = "/userRegist")
public class UserRegistController {

	/**
	 * 初期表示
	 */
	@Route(path = "/init", method = Method.GET)
	public void init(HttpServletRequest request, HttpServletResponse response)
					 throws ServletException, IOException {
		// 初期表示処理を実装します
	}

	/**
	 * 確認画面
	 */
	@Route(path = "/confirm", method = Method.POST)
	public void confirm(HttpServletRequest request, HttpServletResponse response)
						throws ServletException, IOException {
		// 確認画面処理を実装します
	}

	/**
	 * 完了画面
	 */
	@Route(path = "/complete", method = Method.POST)
	public void complete(HttpServletRequest request, HttpServletResponse response)
						 throws ServletException, IOException {
		// 完了画面処理を実装します
	}
}

  1. 「[コンテキスト]/userRegist/init」のリクエストパスでinitメソッドが実行されます
  2. 「[コンテキスト]/userRegist/confirm」のリクエストパスでconfirmメソッドが実行されます
  3. 「[コンテキスト]/userRegist/complete」のリクエストパスでcompleteメソッドが実行されます
また、Routeアノテーションのmethod属性を省略した場合は、全てのHTTPメソッドを指定したのと同義です。

静的リソースファイル

拡張子付きのファイルが、クライアントからリクエストされた場合は、静的リソースファイルとして、 ファイルコンテンツがそのままクライアントに返却されます。
Controllerアノテーション・Routeアノテーションで指定するルーティングパスには、拡張子を指定してはいけません。

コントーラ戻り値

コントローラ(ディスパッチされた実行メソッド)が戻り値を返却すると、その戻り値(通常は文字列です)が DispatcherServletによってクライアントに返却されます。
以下に例として、テンプレートファイルを読み込んでクライアントに返却する処理を示します。

/**
 * サンプルコントローラ
 */
@Controller
@Route(path = "/sample")
public class SampleController {

	@Route(path = "/template", method=Method.GET)
	public String templateMethod(ServletContext context) throws IOException {
		StringBuilder builder = new StringBuilder();
		Files.readAllLines(Paths.get(context.getRealPath("/WEB-INF/template/sample.tpl")), StandardCharsets.UTF_8)
			 .forEach(s -> builder.append(s));

		return builder.toString();
	}
}
■ 実行結果
CW-02:build XXX$ curl localhost:8080/SimpleControllerSample/sample/template
<!DOCTYPE html><html lang="ja"><head>	<meta charset="utf-8">	<title>SimpleTemplate4j sample</title></head><body>	<h1>SimpleTemplate4j sample</h1></body></html>

ご意見・ご感想・バグ報告

×

SimpleController4Jへのご意見やご感想がございましたら、メッセージをお願い致します。
また、SimpleController4Jを使用して頂きまして、バグがございましたらご連絡を頂けると助かります。
皆様からのご意見・ご感想をもとに、SimpleController4Jを改善・拡張をしていきたいと考えております。
皆様からのメッセージは当方で確認をしておりますが、仕事をしながらの開発となる為、すぐにご返信・対応をすることが 出来ない場合がございます。何卒ご容赦ください。

タイトル
メールアドレス
内容