#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が参照される