Javaで遊ぶための紹介

1。概要

このイントロチュートリアルの目的は、Play Frameworkを探索し、それを使用してWebアプリケーションを作成する方法を理解することです。

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

2.Playフレームワークのセットアップ

Play Frameworkの公式ページにアクセスして、最新バージョンのディストリビューションをダウンロードしましょう。このチュートリアルの時点で、最新はバージョン2.7です。

Play Java Hello Worldチュートリアルのzipフォルダーをダウンロードし、ファイルを便利な場所に解凍します。このフォルダーのルートには、アプリケーションの実行に使用できるsbt実行可能ファイルがあります。または、公式ページからsbtをインストールすることもできます。

ダウンロードしたフォルダからsbtを使用するには、次のようにします。

cd /path/to/folder/ ./sbt run

現在のディレクトリでスクリプトを実行しているため、。/構文を使用していることに注意してください。

sbtをインストールすると、代わりにそれを使用できます。

cd /path/to/folder/ sbt run

このコマンドを実行すると、「(サーバーが起動しました。Enterキーを使用して停止し、コンソールに戻ります…)」というステートメントが表示されます。これは、アプリケーションの準備ができていることを意味します。したがって、// localhost:9000に移動すると、Playのウェルカムページが表示されます。

3.Playアプリケーションの構造

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

すぐに簡単な例に挑戦したい場合は、次のセクションにスキップしてください。

これらは、典型的なPlayFrameworkアプリケーションにあるファイルとフォルダーです。

├── 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。アプリのディレクトリ

このディレクトリには、Javaソースコード、Webテンプレート、およびコンパイルされたアセットのソース(基本的に、すべてのソースとすべての実行可能リソース)が含まれています。

アプリのディレクトリは、MVCアーキテクチャ・パターンの一部をパッケージ化し、それぞれがいくつかの重要なサブディレクトリを、含まれています。

  • モデル–これはアプリケーションビジネスレイヤーです。このパッケージ内のファイルは、おそらくデータベーステーブルをモデル化し、永続レイヤーにアクセスできるようにします。
  • ビュー–ブラウザにレンダリングできるすべてのHTMLテンプレートがこのフォルダに含まれています
  • コントローラーコントローラーがあるサブディレクトリ。コントローラは、API呼び出しごとに実行されるアクションを含むJavaソースファイルです。アクションは、HTTPリクエストを処理し、HTTPレスポンスと同じ結果を返すパブリックメソッドです。
  • アセット–CSSやjavascriptなどのコンパイル済みアセットを含むサブディレクトリ。上記の命名規則は柔軟であり、app / utilsパッケージなどのパッケージを作成できます。app / com / baeldung / controllersという名前のパッケージをカスタマイズすることもできます

また、特定のアプリケーションで必要に応じて、オプションのファイルとディレクトリも含まれています。

3.2。パブリックディレクトリ

パブリックディレクトリに保存されているリソースは、Webサーバーによって直接提供される静的アセットです。

このディレクトリには通常、画像、CSS、JavaScriptファイル用の3つのサブディレクトリがあります。すべてのPlayアプリケーションで一貫性を保つために、このようなアセットファイルを整理することをお勧めします。

3.3。confディレクトリ

confディレクトリには、アプリケーション構成ファイルが含まれています。application.confは、我々はPlayアプリケーションの構成プロパティのほとんどを出してあげるところです。ルートでアプリのエンドポイントを定義します。

アプリケーションに追加の構成ファイルが必要な場合は、このディレクトリに配置する必要があります。

3.4。LIBのディレクトリ

LIBのディレクトリには、オプションで、管理されていないライブラリの依存関係が含まれています。ビルドシステムで指定されていないjarがある場合は、このディレクトリに配置します。それらはアプリケーションのクラスパスに自動的に追加されます。

3.5。build.sbtのファイル

build.sbtのファイルは、アプリケーションのビルドスクリプトです。ここに、テストライブラリや永続性ライブラリなど、アプリケーションの実行に必要な依存関係を一覧表示します。

3.6。プロジェクトのディレクトリ

SBTに基づいてビルドプロセスを構成するすべてのファイルは、プロジェクトディレクトリにあります。

3.7。ターゲットディレクトリ

このディレクトリには、ビルドシステムによって生成されたすべてのファイル(たとえば、すべての.classファイル)が含まれます。

ダウンロードしたPlayFramework Hello Worldの例のディレクトリ構造を確認して調べたので、例を使用してフレームワークの基本を確認できます。

4.簡単な例

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

サンプルプロジェクトをダウンロードしてビルドする代わりにsbtnewコマンドを使用してPlayFrameworkアプリケーションを作成する別の方法を見てみましょう

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

sbt new playframework/play-java-seed.g8

For this one, we'll need to have installed sbt already as explained in Section 2.

The above command will prompt us for a name for the project first. Next, it will ask for the domain (in reverse, as is the package naming convention in Java) that will be used for the packages. We press Enter without typing a name if we want to keep the defaults which are given in square brackets.

The application generated with this command has the same structure as the one generated earlier. We can, therefore, proceed to run the application as we did previously:

cd /path/to/folder/ sbt run

The above command, after completion of execution, will spawn a server on port number 9000 to expose our API, which we can access through //localhost:9000. We should see the message “Welcome to Play” in the browser.

Our new API has two endpoints that we can now try out in turn from the browser. The first one – which we have just loaded – is the root endpoint, which loads an index page with the “Welcome to Play!” message.

The second one, at //localhost:9000/assets, is meant for downloading files from the server by adding a file name to the path. We can test this endpoint by getting the favicon.png file, which was downloaded with the application, at //localhost:9000/assets/images/favicon.png.

5. Actions and Controllers

A Java method inside a controller class that processes request parameters and produces a result to be sent to the client is called an action.

A controller is a Java class that extends play.mvc.Controller that logically groups together actions that may be related to results they produce for the client.

Let's now head over to app-parent-dir/app/controllers and pay attention to HomeController.java.

The HomeController‘s index action returns a web page with a simple welcome message:

public Result index() { return ok(views.html.index.render()); }

This web page is the default index template in the views package:

@main("Welcome to Play") {  }

As shown above, the index page calls the main template. The main template then handles the rendering of the page header and body tags. It takes two arguments: a String for the title of the page and an Html object to insert into the body of the page.

@(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   

Let's change the text in the index file a little:

@main("Welcome to Baeldung") {  }

Reloading the browser will give us a bold heading:

Welcome to Play Framework Tutorial on Baeldung!

We can do away with the template completely by removing the render directive in the index() method of the HomeController so that we can return plain text or HTML text directly:

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

After editing the code, as shown above, we'll have only the text in the browser. This will just be plain text without any HTML or styling:

REST API with Play by Baeldung

We could just as well output HTML by wrapping the text in the header tags and then passing the HTML text to the Html.apply method. Feel free to play around with it.

Let's add a /baeldung/html endpoint in routes:

GET /baeldung/html controllers.HomeController.applyHtml

Now let's create the controller that handles requests on this endpoint:

public Result applyHtml() { return ok(Html.apply("")); }

When we visit //localhost:9000/baeldung/html we'll see the above text formatted in HTML.

We've manipulated our response by customizing the response type. We'll look into this feature in more detail in a later section.

We have also seen two other important features of the Play Framework.

First, reloading the browser reflects the most recent version of our code; that's because our code changes are compiled on the fly.

Secondly, Play provides us with helper methods for standard HTTP responses in the play.mvc.Results class. An example is the ok() method, which returns an OK HTTP 200 response alongside the response body we pass to it as a parameter. We've already used the method displaying text in the browser.

There are more helper methods such as notFound() and badRequest() in the Results class.

6. Manipulating Results

We have been benefiting from Play's content negotiation feature without even realizing it. Play automatically infers response content type from the response body. This is why we have been able to return the text in the ok method:

return ok("text to display");

And then Play would automatically set the Content-Type header to text/plain. Although this works in most cases, we can take over control and customize the content type header.

HomeController.customContentTypeアクションの応答をtext / htmlにカスタマイズしてみましょう。

public Result customContentType() { return ok("This is some text content").as("text/html"); }

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

setheadersと同様のことができます。

public Result setHeaders() { return ok("This is some text content") .as("text/html") .withHeader("Header-Key", "Some value"); }

7.結論

この記事では、PlayFrameworkの基本について説明しました。Playを使用して基本的なJavaWebアプリケーションを作成することもできました。

いつものように、このチュートリアルのソースコードはGitHubから入手できます。