連載
» 2013年05月09日 18時00分 公開

Javaの常識を変えるPlay framework入門(4):Play frameworkのコントローラの使い方を理解する (3/3)

[長谷川智之,ビーブレイクシステムズ]
前のページへ 1|2|3       

routesファイル

 routesファイルとはWebブラウザからのリクエストを解析し適切なコントローラのメソッドを呼び出すための指標となるファイルです。このファイルからPlay frameworkは受け取ったリクエストをどのControllerクラスのメソッドに渡すのかを決定しています。

 routesファイルのフォーマットは、左から以下の構成になっています。

  • GETやPOSTなどのHTTPメソッド
  • アプリの遷移先のURI
  • URIに関連付いたControllerクラスのメソッド
GET     /top                        controllers.Uranai.showTop()
POST    /name                       controllers.Uranai.showNameResult()
GET     /type/:id                   controllers.Uranai.showType(id :Integer)

 では、このroutesファイルが持つHTTPメソッド、URI、Controllerクラスメソッドについて見ていきましょう。

HTTPメソッド

 このroutesで許可されているHTTPメソッドはGET、POST、PUT、DELETE、HEADですが、WebブラウザによってはGETおよびPOSTしか許可していない場合がありますので、基本はGETとPOSTのみで実装した方が良いでしょう。WebブラウザによってはAjaxなど使わない限りPUT、DELETE、HEADをGETとして解釈されることがあります。

 また、routesにGETで定義しているリンク先にPOSTでアクセスした場合や、その逆の場合はエラーになります。

例:POST /nameをGETでアクセスした場合

URIとControllerのメソッド

 Play frameworkではURIを指定してそれに関連するControllerクラスのメソッドを定義しています。URIの中には今回の「:id」のように引数として指定でき、それをControllerクラスのメソッド引数として渡すことも可能です。

 Controllerのメソッドの引数の型を指定することでURIの引数にある程度の制限をすることもできます。例えば、showTypeの引数はIntegerのため文字列を入れるとエラーになります。

 またURIには、正規表現で同じメソッドに対して不特定多数のURIに対応することも可能です。その辺りが気になる方は、英文ですがPlay frameworkの公式サイトの解説を参照してください。

 またGETメソッドの場合、URIの「?」以降のパラメータをControllerメソッドの引数として指定することも可能です。例えばroutesを下記のように修正して、Controllerのメソッドにも引数を追加すれば同じ結果を得ることができます。

GET     /type/:id                   controllers.Uranai.showType(id :Integer, name: String)

 最後に注意点として、routesファイルではURIの最後にスラッシュ「/」の有無によってリンク先は別物と認識されます。例えば、今回の場合は「http://localhost:9000/top/」でアクセスするとエラーになります。

Controllerクラス

 HTTPメソッドとURIが決まれば、最後にControllerクラスを継承したクラスを作成します。そして、routesファイルで定義したメソッドの実装を行います。メソッドの実装の際には以下の規約に従ってください。

  • Staticメソッドであること
  • 戻り値としてplay.mvc.Resultを返すこと

 ここでサンプルを見て気付いた方もいるかと思いますが、すでにControllerクラスには戻り値のResultを返すメソッドが用意されています。

 例えば、正常なレスポンスである「200」のステータスを返すメソッドとしてok()メソッドがあります。代表的なものとして下記のものがあります。

メソッド HTTPレスポンスのステータス 概要
ok() 200 OK
badRequest() 400 BAD REQUEST
forbidden() 403 FORBIDDEN
notFound() 404 NOT FOUND
internalServerError() 500 INTERNAL SERVER ERROR

 これらのメソッドは正確にはControllerクラスの親クラスに当たるplay.mvc.Resultsで定義されています(参照:Play frameworkの公式サイト)。

 また、今回のサンプルでは使いませんでしたが、指定したHTMLを描画する以外にもリダイレクトすることも可能です。興味がある方はPlay frameworkの公式サイト(英文)の解説を参照してください。

次回は、Play frameworkのRESTについて

 今回まではJavaをメインに使ったPlay frameworkでのMVCパターンについて学びました。次回はPlay frameworkが得意とするソフトウェア・アーキテクチャの概念である「REST」について紹介していく予定なので、楽しみにしてください。

著者プロフィール

長谷川 智之(はせがわ ともゆき)


2008年より、株式会社ビーブレイクシステムズに在籍。

基本的にはどんな問題があるか分からない新しい技術より、問題点をクリアした使い慣れた技術の方を好む保守派。しかし、最近のヤングでナウな新世代の考えに乗り遅れてきたため、新しい技術にも手を出し始める


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。