SimpleController4Jでフロントコントローラ(DispatcherServlet)からディスパッチをされ、 実行される処理を記述するには、コントローラとなるクラス・メソッドに以下のアノテーションを記述します。
SimpleController4Jで、ディスパッチ先となる「コントローラ」と認識されるためには、
@Controllerアノテーションをクラスに記述します。
例としては以下のようになります。
/** * コントローラサンプル */ @Controller public class UserController { 〜 メソッド定義など 〜 }
コントローラとして認識されるクラスに定義されるメソッドがフロントコントローラ(DispatcherServlet)から実行されます。
@Routeアノテーションで以下の情報を定義します。
「[コンテキスト]/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メソッドは以下になります。
また、クラスに@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 { // 完了画面処理を実装します } }
拡張子付きのファイルが、クライアントからリクエストされた場合は、静的リソースファイルとして、
ファイルコンテンツがそのままクライアントに返却されます。
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を改善・拡張をしていきたいと考えております。
皆様からのメッセージは当方で確認をしておりますが、仕事をしながらの開発となる為、すぐにご返信・対応をすることが
出来ない場合がございます。何卒ご容赦ください。
タイトル※ | |
---|---|
メールアドレス | |
内容※ |