Javaでのプレイの概要
1. 概要
このイントロチュートリアルの目的は、Playフレームワークを調査し、それを使用してWebアプリケーションを作成する方法を理解することです。
Playは、JVM(主にJavaとScala)でコードがコンパイルおよび実行されるプログラミング言語用の生産性の高いWebアプリケーションフレームワークです。 最新のWebアプリケーション開発に必要なコンポーネントとAPIを統合します。
2. PlayFrameworkのセットアップ
Playフレームワークのofficial pageに移動して、最新バージョンのディストリビューションをダウンロードしましょう。 このチュートリアルの時点で、最新はバージョン2.7です。
Play Java Hello Worldチュートリアルのzipフォルダーをダウンロードし、ファイルを便利な場所に解凍します。 このフォルダーのルートには、アプリケーションの実行に使用できるsbt実行可能ファイルがあります。 または、official pageからsbtをインストールすることもできます。
ダウンロードしたフォルダのsbt を使用するには、次のようにします。
cd /path/to/folder/
./sbt run
現在のディレクトリでスクリプトを実行しているため、./構文を使用していることに注意してください。
sbt,をインストールすると、代わりにそれを使用できます。
cd /path/to/folder/
sbt run
このコマンドを実行すると、「(サーバーが起動しました。Enterキーを使用して停止し、コンソールに戻ります…)」というステートメントが表示されます。 これは、アプリケーションの準備ができていることを意味します。したがって、http://localhost:9000に移動して、Playのウェルカムページが表示されます。
3. Playアプリケーションの構造
このセクションでは、Playアプリケーションがどのように構造化されているか、およびその構造内の各ファイルとディレクトリが何に使用されるかについて理解を深めます。
すぐに簡単な例に挑戦したい場合は、次のセクションに進んでください。
これらは、典型的なPlay Frameworkアプリケーションにあるファイルとフォルダーです。
├── app → Application sources
│ ├── assets → Compiled Asset sources
│ │ ├── javascripts → Typically Coffee Script sources
│ │ └── stylesheets → Typically LESS CSS sources
│ ├── controllers → Application controllers
│ ├── models → Application business layer
│ └── views → Templates
├── build.sbt → Application build script
├── conf → Configurations files and other non-compiled resources (on classpath)
│ ├── application.conf → Main configuration file
│ └── routes → Routes definition
├── dist → Arbitrary files to be included in your projects distribution
├── lib → Unmanaged libraries dependencies
├── logs → Logs folder
│ └── application.log → Default log file
├── project → sbt configuration files
│ ├── build.properties → Marker for sbt project
│ └── plugins.sbt → sbt plugins including the declaration for Play itself
├── public → Public assets
│ ├── images → Image files
│ ├── javascripts → Javascript files
│ └── stylesheets → CSS files
├── target → Generated files
│ ├── resolution-cache → Information about dependencies
│ ├── scala-2.11
│ │ ├── api → Generated API docs
│ │ ├── classes → Compiled class files
│ │ ├── routes → Sources generated from routes
│ │ └── twirl → Sources generated from templates
│ ├── universal → Application packaging
│ └── web → Compiled web assets
└── test → source folder for unit or functional tests
3.1. appディレクトリ
このディレクトリには、Javaソースコード、Webテンプレート、およびコンパイル済みアセットのソースが含まれます。基本的には、すべてのソースとすべての実行可能リソースです。
appディレクトリには、いくつかの重要なサブディレクトリが含まれています。各サブディレクトリには、MVCアーキテクチャパターンの一部がパッケージ化されています。
-
models –これはアプリケーションビジネスレイヤーです。このパッケージのファイルは、おそらくデータベーステーブルをモデル化し、永続レイヤーにアクセスできるようにします。
-
views –ブラウザにレンダリングできるすべてのHTMLテンプレートがこのフォルダに含まれています
-
controllers –コントローラーがあるサブディレクトリ。 Controllersは、API呼び出しごとに実行されるアクションを含むJavaソースファイルです。 Actionsは、HTTP要求を処理し、HTTP応答と同じ結果を返すパブリックメソッドです。
-
assets –CSSやjavascriptなどのコンパイル済みアセットを含むサブディレクトリ。 上記の命名規則は柔軟性があり、パッケージを作成できます。 app/utilsパッケージ。 パッケージの名前をカスタマイズすることもできますapp/com/example/controllers
特定のアプリケーションに必要なオプションのファイルとディレクトリも含まれています。
3.2. publicディレクトリ
publicディレクトリに保存されているリソースは、ウェブサーバーから直接提供される静的アセットです。
このディレクトリには通常、画像、CSS、およびJavaScriptファイル用の3つのサブディレクトリがあります。 すべてのPlayアプリケーションで一貫性を保つために、このようなアセットファイルを整理することをお勧めします。
3.3. confディレクトリ
conf ディレクトリには、アプリケーション構成ファイルが含まれています。 Playアプリケーションのほとんどの構成プロパティを配置するapplication.conf is。 アプリのエンドポイントをroutesで定義します。
アプリケーションで追加の構成ファイルが必要な場合は、このディレクトリに配置する必要があります。
3.4. libディレクトリ
libディレクトリはオプションであり、アンマネージライブラリの依存関係が含まれています。 ビルドシステムで指定されていないjarファイルがある場合は、このディレクトリに配置します。 それらはアプリケーションのクラスパスに自動的に追加されます。
3.5. build.sbtファイル
build.sbt fileは、アプリケーションビルドスクリプトです。 ここには、テストライブラリや永続化ライブラリなど、アプリケーションの実行に必要な依存関係がリストされています。
3.6. projectディレクトリ
SBTに基づいてビルドプロセスを構成するすべてのファイルは、projectディレクトリにあります。
3.7. targetディレクトリ
このディレクトリには、ビルドシステムによって生成されたすべてのファイル(たとえば、すべての.classファイル)が含まれます。
ダウンロードしたばかりのPlay Framework Hello Worldサンプルのディレクトリ構造を見て検討したので、サンプルを使用してフレームワークの基礎を理解することができます。
4. 簡単な例
このセクションでは、Webアプリケーションの非常に基本的な例を作成します。 このアプリケーションを使用して、Playフレームワークの基本を理解します。
サンプルプロジェクトをダウンロードしてビルドする代わりに、let’s see another way we can create a Play Framework application, using the sbt new command。
コマンドプロンプトを開き、選択した場所に移動して、次のコマンドを実行しましょう。
sbt new playframework/play-java-seed.g8
これについては、Section 2で説明されているように、sbt をすでにインストールしておく必要があります。
上記のコマンドは、最初にプロジェクトの名前を要求します。 次に、パッケージに使用されるドメイン(Javaのパッケージ命名規則とは逆)を要求します。 角括弧で囲まれたデフォルトを維持したい場合は、名前を入力せずにEnterを押します。
このコマンドで生成されたアプリケーションの構造は、以前に生成されたものと同じです。 したがって、以前と同じようにアプリケーションを実行できます。
cd /path/to/folder/
sbt run
上記のコマンドは、実行の完了後、http://localhost:9000を介してアクセスできるwill spawn a server on port number 9000 to expose our APIです。 ブラウザに「Welcome to Play」というメッセージが表示されます。
Our new API has two endpoints that we can now try out in turn from the browser.最初にロードしたのはルートエンドポイントで、「WelcometoPlay!」を含むインデックスページをロードします。メッセージ。
2番目のhttp://localhost:9000/assets,は、パスにファイル名を追加してサーバーからファイルをダウンロードするためのものです。 このエンドポイントをテストするには、アプリケーションとともにダウンロードされたfavicon.png fileをhttps://localhost:9000/assets/images/favicon.pngで取得します。
5. アクションとコントローラー
要求パラメーターを処理し、クライアントに送信する結果を生成するコントローラークラス内のJavaメソッドは、アクションと呼ばれます。
コントローラは、play.mvc.Controllerを拡張するJavaクラスであり、クライアントに対して生成される結果に関連する可能性のあるアクションを論理的にグループ化します。
それでは、app-parent-dir/app/controllersに移動して、HomeController.javaに注目しましょう。
HomeControllerのインデックスアクションは、簡単なウェルカムメッセージを含むWebページを返します。
public Result index() {
return ok(views.html.index.render());
}
このWebページは、viewsパッケージのデフォルトのindexテンプレートです。
@main("Welcome to Play") {
Welcome to Play!
}
上に示したように、index pageはmainテンプレートを呼び出します。 メインテンプレートは、ページヘッダーと本文タグのレンダリングを処理します。 2つの引数を取ります。ページのタイトルを表すString と、ページの本文に挿入するHtml objectです。
@(title: String)(content: Html)
@* Here's where we render the page title `String`. *@
@title
@* And here's where we render the `Html` object containing
* the page content. *@
@content
indexファイルのテキストを少し変更してみましょう。
@main("Welcome to example") {
Welcome to Play Framework Tutorial on example!
}
ブラウザをリロードすると、見出しが太字になります。
Welcome to Play Framework Tutorial on example!
HomeControllerのindex() メソッドのrender ディレクティブを削除して、プレーンテキストまたはHTMLテキストを直接返すことができるようにすることで、テンプレートを完全になくすことができます。
public Result index() {
return ok("REST API with Play by example");
}
上記のようにコードを編集すると、ブラウザにテキストのみが表示されます。 これは、HTMLやスタイリングのないプレーンテキストになります。
REST API with Play by example
テキストをヘッダー<h1></h1>タグでラップし、HTMLテキストをHtml.applyメソッドに渡すことで、HTMLを出力することもできます。 自由に試してみてください。
routesに/example/htmlエンドポイントを追加しましょう。
GET /example/html controllers.HomeController.applyHtml
次に、このエンドポイントでリクエストを処理するコントローラーを作成しましょう。
public Result applyHtml() {
return ok(Html.apply("This text will appear as a heading 1
"));
}
http://localhost:9000/example/htmlにアクセスすると、上記のテキストがHTMLでフォーマットされているのがわかります。
応答タイプをカスタマイズして、応答を操作しました。 この機能については、後のセクションで詳しく説明します。
また、Playフレームワークの他の2つの重要な機能を見てきました。
まず、ブラウザをリロードすると、コードの最新バージョンが反映されます。これは、code changes are compiled on the fly.が
次に、Playは、play.mvc.Resultsクラスの標準HTTP応答のヘルパーメソッドを提供します。 例として、ok()メソッドがあります。このメソッドは、パラメーターとして渡す応答本文とともにOK HTTP200応答を返します。 ブラウザにテキストを表示する方法はすでに使用しています。
Resultsクラスには、notFound()やbadRequest()などのヘルパーメソッドがあります。
6. 結果の操作
私たちはそれを実現することさえせずにbenefiting from Play’s content negotiation featureでした。 Playは、応答本文から応答コンテンツタイプを自動的に推測します。 これが、okメソッドでテキストを返すことができた理由です。
return ok("text to display");
そして、Playは自動的にContent-Typeヘッダーをtext/plainに設定します。 これはほとんどの場合に機能しますが、制御を引き継いでコンテンツタイプヘッダーをカスタマイズできます。
customize the response for HomeController.customContentType action to text/html:
public Result customContentType() {
return ok("This is some text content").as("text/html");
}
このパターンは、あらゆる種類のコンテンツタイプにまたがります。 okヘルパーメソッドに渡すデータの形式に応じて、text/htmlをtext/plainまたはapplication/jsonに置き換えることができます。
ヘッダーを設定するのと同じようなことができます:
public Result setHeaders() {
return ok("This is some text content")
.as("text/html")
.withHeader("Header-Key", "Some value");
}
7. 結論
この記事では、Play Frameworkの基本について説明しました。 Playを使用して基本的なJavaWebアプリケーションを作成することもできました。
いつものように、このチュートリアルのソースコードはover on GitHubで入手できます。