CodeZine(コードジン)

特集ページ一覧

Javaで軽快に使える「軽量フレームワーク」特集
~本格的なRoRスタイルフレームワーク「Play!」(1)

第7回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/01/20 14:00

目次

routesによるマッピング

 それにしても、なぜクラス名はApplicationなのでしょう。またルートにアクセスすると、なぜindexアクションが呼び出されたのでしょうか。他の名前ではいけないのでしょうか。

 その秘密は、「conf」フォルダにある「routes」ファイルにあります。このファイルを開くと、次のように記述されていることが分かります(#で始まるコメントは省略しました)。

GET	/	Application.index
GET	/public/	staticDir:public
*	/{controller}/{action}	{controller}.{action}

 これは、アクセスされた場所に関する情報を記述したものです。それぞれざっと意味を説明しておきましょう。

  • GET / Application.index:これは、/へのアクセスはApplication.indexを呼び出すことを示しています。これにより、ルート(/)にアクセスすると、Applicationクラスのindexが実行されていたのです。
  • GET /public/ staticDir:public:これは、/public/へのアクセスは、静的ディレクトリのpublicにあるファイルが呼び出されることを示しています。これを記述することにより、/public/は(プログラムが呼び出されるのではなく)直接ファイルがそのまま表示されるようになります。
  • * /{controller}/{action} {controller}.{action}:最後にあるのは、ワイルドカード(*)を使い、それ以外のすべての場合に、「/コントローラー/アクション」という形でアクセスされたら、コントローラークラスのアクションメソッドを呼び出すようにしています。例えば、先ほどのApplicationクラスのindexアクションは、正しくは「http://localhost:9000/application/index」とアクセスするのです。これで、Application内のindexが実行されます。

 このように、routesに記述されたマッピング情報により、アクセスした場所と呼び出されるメソッドやファイルの関係が設定されていたのです。

フォームの送信

 では、このindexアクションを書き換えて、Web利用の基本である「フォームを使ったデータの送受」からやってみることにしましょう。他のアクションを定義してもよいのですが、ここではindex自身にPOST送信して処理させることにしましょう。

 まず、コントローラークラスのメソッドの修正からです。Applicationクラスのindexメソッドを次のように修正しましょう。

public static void index(String val) {
	String msg = "";
	if (request.method.equals("POST")) {
		msg = "こんにちは、" + val + "さん。";
	} else {
		msg = "お名前をどうぞ。";
	}
	render(msg);
}

 ここでは「request.method」という値を取得し、それがPOSTであるかどうかで異なる処理を行わせています。ここでは、「request.mothod」というものの値を調べ、それによって分岐を行っています。このmethodは、HTTPプロトコルによる送信メソッドの名前を返すものです。分かりやすくいえば、「GETかPOSTかを調べるもの」と考えればよいでしょう。

 この値がPOSTだった場合には、送られてきた値を使ってテキストを作成します。ここでは引数にString valと指定がされています。これは「valというテキスト値のパラメータが送られてくる」ということを意味します。このようにアクションメソッドの引数を用意しておくことで、特定のパラメータで送られてくる情報が分かるというわけです。

 こうして用意した変数msgを、renderする際に引数に渡します。これにより、valの値がレンダリングされるテンプレート側で利用できるようになります。

テンプレートとルートの修正

 では、index.htmlのテンプレートを修正しましょう。今回は、indexメソッドのrenderで渡された値をページ内に表示させます。また肝心のフォームも用意が必要です。

#{extends 'main.html' /}
#{set title:'Home' /}

<div>${msg}</div>
<form method="post" action="@{Application.index}">
	<input type="text" name="val" />
	<input type="submit" value="送信" />
</form>

 main.htmlをextendsしているため、追加する表示だけを作ればいいことが分かります。今回は、indexアクションのrender時に引数として渡された変数msgの値が、${msg}と記述して書き出されるようにしています。

 その下には、フォームが用意されています。基本的には普通のフォームと同じですが、actionの設定が「action="@{Application.index}"」とされています。これにより、Applicaitonのindexアクションが指定されるようになります。

 これで完成ですが、実はもう1つやっておくべきことがあります。それは、routesファイルへの追記です。indexは、ルート(/)にアクセスするようにしてありますので、action="@{Application.index}"もルートにアクセスされます。そこで、ルートにPOSTで送信された場合にも、Application.indexにマッピングされるように記述を追加しておきます。

POST	/	Application.index

 このようにファイルに追記をしてください。これで完成です。なお、このroutesへの追記は通常は必要ありません。

 完成したらブラウザからアクセスしてみましょう。入力フィールドが現れるので、ここに適当に書いて送信すると、メッセージが表示されます。

テキストを書いて送信するとメッセージが表示される。
テキストを書いて送信するとメッセージが表示される。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Javaで軽快に使える「軽量フレームワーク」特集

もっと読む

著者プロフィール

  • 掌田 津耶乃(ショウダ ツヤノ)

    三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。 ※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開中。またGoogle+プロフィールはこちら。

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5