简单易懂的现代魔法——Play Framework攻略2
接前文:http://www.cnblogs.com/Kassadin/p/4335908.html
上次講到Play Framework開發(fā)環(huán)境的配置,以及第一個(gè)Hello World程序;本次主要介紹Play Framework的幾個(gè)核心概念。
1. Web應(yīng)用程序的請求響應(yīng)模型
每一個(gè)web開發(fā)者對于HTTP request和HTTP response都可以說是耳熟能詳。實(shí)際上他們對應(yīng)了Web開發(fā)的基本模型:請求-響應(yīng)模型。請求響應(yīng)模型的過程如下:
(1)Web瀏覽器通過HTTP協(xié)議向服務(wù)器端發(fā)送request請求
(2)Web服務(wù)器接收并解析HTTP request請求
(3)Web服務(wù)器將請求分發(fā)給相應(yīng)的邏輯處理程序進(jìn)行處理
(4)Web服務(wù)器將處理結(jié)果形成HTML格式的響應(yīng)體
(5)Web服務(wù)器通過HTTP協(xié)議向?yàn)g覽器端發(fā)送response響應(yīng)
(6)Web瀏覽器顯示HTML響應(yīng)體
請求響應(yīng)模型本質(zhì)上講是HTTP協(xié)議在Web開發(fā)中的應(yīng)用,由于本文的重點(diǎn)不是這里,如需詳細(xì)學(xué)習(xí)該模型,請查閱HTTP協(xié)議相關(guān)書籍和文檔。
2. MVC模式
為什么要提到請求-響應(yīng)模型呢,因?yàn)樗谴竺ΧΦ腗VC模式的基礎(chǔ)。什么是MVC設(shè)計(jì)模式?
M-Model,模型;V-Views,視圖;C-Controller,控制器;MVC模式也就是模型-視圖-控制器模式;許多著名框架如SSH,Ruby on Rails本質(zhì)上講都是基于MVC設(shè)計(jì)模式的產(chǎn)物。同樣的,MVC模式也是Play framework的核心。MVC設(shè)計(jì)模式之所以取得成功,是因?yàn)樗虷TTP協(xié)議的請求-響應(yīng)模型具有一致性。
(1)Controller,控制器
負(fù)責(zé)解析HTTP request并分發(fā)處理HTTP請求,控制器實(shí)現(xiàn)了對Web服務(wù)器程序流程的控制,它決定了由哪個(gè)模塊處理HTTP請求,將請求分發(fā)給哪個(gè)View顯示,請求哪一個(gè)Model以獲取數(shù)據(jù)。它是MVC中業(yè)務(wù)邏輯的核心。
(2)View,視圖
負(fù)責(zé)Web應(yīng)用的顯示邏輯,它主要定義了Web的展現(xiàn)層。
(3)Model,模型
負(fù)責(zé)Web應(yīng)用的數(shù)據(jù)模型,與低層數(shù)據(jù)庫進(jìn)行映射,它主要定義了數(shù)據(jù)邏輯。
MVC設(shè)計(jì)模式實(shí)現(xiàn)了業(yè)務(wù)邏輯和顯示邏輯的分離,進(jìn)而實(shí)現(xiàn)了Web應(yīng)用的高內(nèi)聚性和低耦合性,因而取得了空前的成功。
3. Play Framework基本結(jié)構(gòu)(實(shí)例研究)
本部分我將通過實(shí)際編寫程序來展示Play Framework的幾個(gè)核心概念。
【1】Java or Scala?
Play 2.0框架庫已經(jīng)由Scala編寫,采用Scala編寫Web應(yīng)用相比于Java更加簡潔現(xiàn)代,與框架的吻合度也更好,因此本系列盡量采用基于Scala的模版進(jìn)行講解;當(dāng)然了,框架的思想與語言無關(guān),其實(shí)無論是Java還是Scala可以說都大同小異(針對Play框架來說的,不是說的語言本身),因此,本系列以后可能會附帶介紹Scala的相關(guān)內(nèi)容。
【2】新建項(xiàng)目
【3】項(xiàng)目結(jié)構(gòu)
輸入cd hello進(jìn)入項(xiàng)目
項(xiàng)目結(jié)構(gòu)如上圖1所示,主要包括了5個(gè)主要的文件夾;其中最重要的是app文件夾和conf文件夾。app文件夾主要存放項(xiàng)目代碼,conf文件夾主要存放項(xiàng)目配置文件,public文件夾存放項(xiàng)目公有資源,test文件夾存放測試代碼。
至于其他文件,現(xiàn)在還用不到,等到之后再慢慢研究好了。
現(xiàn)在對我們最為重要的是app文件夾和conf文件。上圖2展示了app文件夾和conf文件夾的內(nèi)部結(jié)構(gòu)。在app文件夾中包含控制器和視圖兩個(gè)子文件夾,這和之前的MVC模式相對應(yīng),而conf文件夾下的routes文件是非常重要的配置文件,直接決定了http request的處理方式。
【4】routes
routes文件的每一行由3部分組成:
(1)第一部分,定義了HTTP請求的類型,如GET,POST等
(2)第二部分,相對路徑
(3)第三部分,對應(yīng)的處理方法(Action)
舉個(gè)例子,當(dāng)瀏覽器以GET方式請求URL:http://localhost:9000/ 時(shí),其請求方式為GET,相對路徑為:/,那么此時(shí)就應(yīng)該將請求轉(zhuǎn)交給controllers.Application.index方法處理。因此,我們來看一下index方法。
【5】app/controllers/Application.scala
該程序是控制器的核心程序,在scala中定義了一個(gè)單例對象Application類,該單例對象包含一個(gè)index方法,該方法調(diào)用Action函數(shù),Action函數(shù)的功能是:執(zhí)行函數(shù)體,并將函數(shù)體相應(yīng)數(shù)據(jù)作為response頭和response體返回給瀏覽器。
[1]Ok. 返回值信息
如圖所示,OK相當(dāng)于response code = 200,作為response頭返回給瀏覽器
[2]views.html.index("Your new application is ready.”)
將字符串作為參數(shù)傳遞給views.html.index視圖模版,視圖模版解析參數(shù)以后,生成HTML代碼,作為response體返回給瀏覽器
【6】app/views/index.scala.html
視圖文件,由HTML+參數(shù)組成,解析相關(guān)參數(shù)可變?yōu)榧冹o態(tài)HTML文件。
現(xiàn)將原視圖文件修改如下:
@(message: String)
<html>
<head>hello Play</head>
<body>
<h1>@message</h1>
</body>
</html>
【7】打開服務(wù)器進(jìn)行測試
輸入activator run打開服務(wù)器
瀏覽器輸入http://localhost:9000/,我們得到了預(yù)期結(jié)果。
4.后記
本次我們主要研究了Play Framework的基本結(jié)構(gòu)和幾個(gè)重要文件的作用,分析了Play Framework的工作過程。
下次我們的主要任務(wù)是實(shí)現(xiàn)有參數(shù)的請求與REST架構(gòu)的討論。
敬請期待:Play Framework之3: REST架構(gòu)與Restful Web Service.
總結(jié)
以上是生活随笔為你收集整理的简单易懂的现代魔法——Play Framework攻略2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。