Javaで遊ぶための紹介

1概要

このイントロチュートリアルの目的は、Playフレームワークを調べて、それを使ってWebアプリケーションを作成する方法を教えることです。

Playは、コードがJVM上でコンパイルされ実行されるプログラミング言語用の生産性の高いWebアプリケーションフレームワークです。主にJavaとScalaです。最新のWebアプリケーション開発に必要なコンポーネントとAPIを統合しています。

2 Play Frameworkのセットアップ

Playフレームワークのhttp://playframework.com/download[official page]にアクセスして、最新バージョンのディストリビューションをダウンロードしてください。このチュートリアルの時点では、最新のバージョンは2.5です。

これは、binフォルダ内に activator というスクリプトを含む小さなスターターパッケージをダウンロードします。このスクリプトは、さまざまなコンポーネントが必要になったときに、フレームワークの残りの部分を段階的にセットアップします。

簡単にするために、コンソールから実行するために activator PATH 変数に追加する必要があります。

3プレイアプリケーションの解剖学

このセクションでは、Playアプリケーションがどのように構造化されているのか、そしてその構造内の各ファイルとディレクトリが何のために使用されているのかをよりよく理解します。

簡単な例にすぐに挑戦したい場合は、次のセクションに進んでください。

アプリディレクトリ

このディレクトリには、アプリケーションソースとすべての実行可能リソースが含まれています。 Javaのソースコード、Webテンプレート、コンパイルされたアセットのソースは、私たちのAPIの中核部分です。

そこにはいくつかの重要なサブディレクトリが含まれています。それぞれのサブディレクトリには、MVCアーキテクチャパターンの一部、およびオプションのファイルとディレクトリが含まれています。

  • モデル - これはアプリケーションのビジネスレイヤであり、この中のファイル

packageはおそらく私たちのデータベーステーブルをモデル化し、私たちがアクセスできるようにします 永続化レイヤー views ** - このパッケージはにレンダリングすることができるHTMLテンプレートを含みます

ブラウザ controllers ** - コントローラがあるサブディレクトリ。

コントローラは、実行されるアクションを含むJavaソースファイルです。 API呼び出しごとに。アクションはHTTPを処理するパブリックメソッドです。 HTTPレスポンスと同じリクエストと結果を返す assets ** - CSSなどのコンパイル済みアセットを含むサブディレクトリ

とJavaScript。上記の命名規則は柔軟で、独自のパッケージを作成することができます。 app/utils パッケージ。パッケージの名前付け app/com/baeldung/controllers もカスタマイズできます。

binディレクトリ

アプリケーションを実行するために使用するアクティベータスクリプトが含まれています。

run とは別に、 clean compile test などの他のユーティリティメソッドも提供しています。

confディレクトリ

アプリケーションを設定する場所。それは2つの最も重要なファイルを含みます。

application.conf ファイルは、ログ記録、データベース接続、サーバーが実行されているポートなどを設定する場所です。

routes ファイルは、HTTP URLからコントローラのアクションへのアプリケーションの経路とマッピングを定義する場所です。

  • プロジェクトディレクトリ **

SBT(Scala Build Tool)に基づいてビルドプロセスを構成するファイルが含まれています。

パブリックディレクトリ

ブラウザにレンダリングするためのCSS、javascript、画像ファイルなどのパブリックアセットが含まれています。

テストディレクトリ

このディレクトリにはPlayアプリケーションのためのユニットテストと統合テストスイートが含まれています。

build.sbtファイル

アプリケーション構築スクリプト。

4簡単な例

このセクションでは、Webアプリケーションの非常に基本的な例を作成し、それを使用してPlayフレームワークの基本について理解します。

フレームワークのスケルトンを設定したことを思い出してください。したがって、新しいコマンドを初めて実行するときには、Playはコマンドを実行するためにすべての関連する依存関係をダウンロードする必要があります。これは私達のインターネット接続によってはかなり時間がかかるかもしれません。

次回同じコマンドを実行するときには、Playが必要なものを用意するので、新しいものをダウンロードする必要はなく、コマンドをより速く実行することができます。

コマンドプロンプトを開き、選択した場所に移動して次のコマンドを実行しましょう。

activator new webapp play-java

上記のコマンドは、Javaテンプレートから webapp という新しいWebアプリケーションを作成します。同じように、Scala開発者は play-java の代わりに play-scala を使うでしょう。

コンソールプロセスが完了した後に webapp ディレクトリを確認すると、以下のようなディレクトリ構造が表示されます。

リンク:/uploads/Capture-1.png%20755w[]

前のセクションと同様に、これで理解できたはずです。それぞれのディレクトリと webapp のファイルを個別に調べました。

コンソールから cd webapp ディレクトリに入れて、新しいアプリケーションを実行します。プロジェクトルートから次のコマンドを実行します。

activator run

上記のコマンドは、実行完了後、ポート番号 9000 でサーバーを起動し、 http://localhost:9000 をロードすることでアクセスできるAPIを公開します。次のページがブラウザに読み込まれます。

リンク:/uploads/Capture-1-1.png%201332w[]

私たちの新しいAPIには、ブラウザから順番に試すことができる4つのエンドポイントがあります。最初にロードしたものは、すでに気づいたかもしれないので webapp のスタートアップドキュメントをロードするルートエンドポイントです。

2つ目は、 http://localhost:9000/message からアクセスでき、 Hi! メッセージが表示されます。

3番目の http://localhost:9000/count は、このエンドポイントに到達するたびに増加する整数をロードします。

http://localhost:9000/assets の最後のファイルは、パスにファイル名を追加してサーバーからファイルをダウンロードするためのものです。まだサーバー上にファイルが作成されていないため、有益なエラーページが読み込まれます。

** 5アクションとコントローラ

アクションは基本的に、リクエストパラメータを処理してクライアントに送信される結果を生成するコントローラクラス内のJavaメソッドです。

コントローラは play.mvc.Controller を拡張するJavaクラスで、クライアントに対して生成される結果に関連する可能性のあるアクションを論理的にグループ化します。

webapp/app/controllers に行き、 HomeController.Java CountController.Java に注目しましょう。各アクションには単一のアクションが含まれています。

HomeController のindexアクションは、スタートアップチュートリアルのあるWebページを返します。このWebページはビューパッケージのデフォルトのインデックステンプレートであり、テキストがそれに渡されてページの上部に表示されます。

テキストを少し変更しましょう。

public Result index() {
    return ok(index.render("REST API with Play by Baeldung"));
}

ブラウザでページを再読み込みします。

リンク:/uploads/Capture-2-1024x497-1.png%201024w[]

テンプレートを完全に廃止して、制御できるものと興味のあるものだけを処理することができます。

public Result index() {
    return ok("REST API with Play by Baeldung");
}

その場合、リロードすると、ブラウザにはこのテキストだけが表示されます。HTMLやスタイルは必要ありません。

REST API with Play by Baeldung

HTMLのような独自のテキストをヘッダーの <h1> </h1> タグにラップして、適切な結果を再読み込み時に受け取ることもできます。自由に試してください。しかしキャッチがあります!どれどれ。

CountController は、組み込みアクションカウンターを使用して、countアクションを使用して /count エンドポイントがヒットした回数の状態を維持します。

public Result count() {
    return ok(Integer.toString(counter.nextCount()));
}

少しカスタマイズしましょう。

public Result count() {
    return ok("<h1>API hit count:" + Integer.toString(
    counter.nextCount())+"</h1>").as("text/html");
}

リロードすると、小さな整数を取得するのではなく、HTMLヘッダーの書式設定を含む大きなテキストが表示されます。

レスポンスタイプをカスタマイズしてレスポンスを操作しました。この機能については、後のセクションで詳しく説明します。

Playフレームワークの他の2つの重要な機能も見ました。

まず、私たちの コードの変更はオンザフライ でコンパイルされ、ブラウザを再読み込みすると私たちのコードの最新版が反映されます。

第二に、Playは play.mvc.Results クラスで標準のHTTPレスポンスのためのヘルパーメソッドを提供します。例えば、OK HTTP 200レスポンスをレスポンスボディと一緒に返す ok() メソッドは、パラメータとしてそれに渡します。

pageNotFound() badRequest() など、このようなヘルパーメソッドがさらにあります。これらについては、次のセクションで説明します。

6. 結果を操作する

私たちは、Playのコンテンツネゴシエーション機能からも気付かずに恩恵を受けています。 Playはレスポンスボディからレスポンスコンテンツタイプを自動的に推測します。私たちは戻ってきました:

return ok("text to display");

そしてPlayは自動的にContent-Typeヘッダを text/plain に設定します。制御を引き継ぎ、これをカスタマイズできます。

CountController.count アクションのレスポンスを text/html にカスタマイズしました。

public Result count() {
    return ok("<h1>API hit count:"+Integer.toString
      (counter.nextCount()) + "</h1>").as("text/html");
}

私たちはスーパークラスの response() メソッドを使って同じことをすることができたでしょう。

response().setContentType("text/html");
return ok("html formatted text");

このパターンはあらゆる種類のコンテンツタイプにまたがっています。ヘルパーメソッド ok に渡すデータの形式に応じて、 text/html text/plain または application/json に置き換えることができます。

レスポンスヘッダを設定する必要がある場合でも、 response() ヘルパーメソッドが便利です。

response().setHeader("headerName","value");

Play.mvc.Results クラスは、 ok() ヘルパーメソッドとは別に、 ActionsおよびControllers セクションで見たように、 pageNotFound() などの標準HTTP応答用の他のヘルパーメソッドを提供します。

7. 結論

この記事では、Play Frameworkの基本を探りました。また、Playを使って基本的なJava Webアプリケーションを作成することもできました。

完全なソースコードを入手するには、https://github.com/eugenp/tutorials/tree/master/play-framework[GitHubについて]を参照してください。