Java
PlayFramework
勉強メモ

Play Framework勉強めも

(参考)勉強してる書籍
https://www.amazon.co.jp/Play-Framework-2%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-Java%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%ABWeb%E9%96%8B%E7%99%BA-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798133922/ref=cm_cr_srp_d_product_top?ie=UTF8

MVCアーキテクチャとは

アプリケーションを「Model」「View」「Controller」の組み合わせとして構築するもの。
「Controller」によって、「Model」「View」を制御する。

Model

・データ管理を行う
・アプリケーションで使用する、データの処理を引き受ける

View

・画面の表示に関する部分を引き受ける

Controller

・アプリケーション全体を制御するもの

Controllerクラスについて

(例)画面作成の処理

package controllers;

import play.*;
import play.mvc.*;

import views.html.*;

public class Application extends Controller {

    public static Result index() {
        return ok(index.render("Your new application is ready."));
/*
①indexインスタンスのrenderメソッドでHTMLクラスのインスタンスを取得。
②okメソッドで、Result型のインスタンスを返す。
*/
    }
}

・renderメソッド:render(引数)
引数を元にwebページのテンプレートをレンダリングするもの。返値はHTMLインスタンス。

アクションとは

アクションとは画面作成するメソッドみたいなもの。
Play アプリケーションが受け取ったリクエストのほとんどは、Action によって処理される。
アクションは play.mvc.Result 型の値を返し、これはクライアントへ送信される HTTP レスポンスを表す。

viewクラスについて

ページの外観を作るクラス。今回は大きく以下2つに分かれている。
main.scala.html
 →ページ全体のレイアウト
index.scala.html
 →indexのActionでコンテンツを表示する

イメージは、indexのActionが呼び出されるとmain.scala.htmlの中にindex.scala.htmlのコンテンツがはめこまれた状態で、レンタリングされる。
ページ全体のレイアウトをmain.scala.html、部分的なデザインをindex.scala.htmlに分けることにより、共通するレイアウトの中で、コンテンツだけ出力出来る。

main.scala.html

@(title: String)(content: Html)//変数の宣言

<!DOCTYPE html>

<html>
    <head>
        <title>@title</title>
        <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">//cssの読み込み
        <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">//ファビコンの読み込み
        <script src="@routes.Assets.at("javascripts/jquery-1.9.0.min.js")" type="text/javascript"></script>//javascriptの読み込み
    </head>
    <body>
        @content//headで読み込んだ内容をbodyで出力する様にしている
    </body>
</html>

・頭文字に@をつけることで、scalaのメソッドを記述出来る。
・Playアプリケーションでは、ファイルはそれぞれ独自に設定されたアドレスで公開される。
 @routes.Assets.atでそれらを読み取る。
(参考)
・linkダグとは:https://saruwakakun.com/html-css/basic/link-rel
・ファビコンとは:http://www.htmq.com/tutorial/28_9.shtml
・viewフォルダにcssファイルを作成すると、テンプレート時にscalaオブジェクトとして自動生成される。

index.scala.html

@(message: String)

@main("Welcome to Play") {//引数はmain.scala.htmlのtitleに入る

    @play20.welcome(message, style = "Java")//main.scala.htmlのbodyに入る

}

@mainは、main.scala.htmlを呼び出すためのもの
・main("Welcome to Play")の"Welcome to Play"は、main.scala.htmlのtitleに入る。
・{}内は、(content: Html)に入る。
・@play20.welcomeはwelcomeページというページを生成するためのもの

routeクラスについて

動作の処理順を記載したファイル。

# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                           controllers.Application.index()
//GETでルートが呼び出された場合は、indexアクションが呼び出される
# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.at(path="/public", file)
//GETでpubliフォルダ内の、どれかのファイルが呼び出された場合は、Assets.atメソッドが呼び出される

・#で始まる文はコメント文

・[Get アドレス 呼び出すメソッド]で、メソッドを呼び出している。

・新しくActionやメソッドを追加した場合は、必ずここに記載する。

処理の流れ

1.Webサーバに対して、getが呼ばれる
2.conf/routesファイルより、Getの"/"についてはAplication.javaのindex()を呼べば良いことがわかる 3.Aplication.javaのindex()が呼ばれる
4.Aplication.javaのindex()で、index.renderが返却される
5.つまり、views/index.scala.htmlが返却される
6.index.scala.htmlは必ずmain.scala.htmlが参照される