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