接前文:http://www.cnblogs.com/Kassadin/p/4343682.htmlhtml
目前爲止,咱們已經研究了Play Framework的體系結構以及Web應用程序的工做原理。原本今天的內容是想討論一下REST架構和Restful Web Service的,正在我學習相關姿式準備開坑之時,我忽然想起了當年學習JSP的情景。想當年剛學JSP的時候,第一次的做業是寫一個登陸頁面,如今學了Play Framework,不妨把當年的做業重寫一遍,因而今天討論的內容就是:使用Play Framwork開發登陸頁面。java
基本需求:基於Play Framework開發一個web登陸頁面(version1)web
業務流程:數據庫
(1)用戶在網頁輸入用戶名和密碼編程
(2)服務器驗證用戶名,密碼瀏覽器
(3)根據驗證結果,跳轉到新的頁面,並顯示驗證結果信息。服務器
特殊說明:架構
(1)爲了簡化需求,該版本的用戶名和密碼寫死在程序中,在下一個版本(version2)中,用戶名和密碼信息將存儲在數據庫中。app
(2)在學習了Web Service以後,能夠發佈一個login web service(version3),這樣經過提供服務,能夠方便其餘平臺調用,實現Android端登陸功能(version4)編程語言
(3)version2-4會在本系列以後陸續更新
首先切換到工做目錄下,經過終端創建新項目:
activator new 模板選擇:5.play-java 輸入項目名稱:login cd login
這樣,咱們就創建了一個叫login的新項目,選擇了java做爲編程語言;(scala版本我也試着寫了一下,雖然功能實現了,可是有一部分代碼我也不能講的十分清楚,所以就不放在這裏了)
現假設我要打開的登陸頁面url是:http://localhost:9000/login, 當客戶在瀏覽器輸入這個url時,咱們必須在routes定義該GET方法的action,具體而言就是要在routes文件里加入以下代碼:
咱們將這個GET請求交給Application中的login方法處理,因爲如今改方法尚未定義,咱們如今須要定義該方法。
在app/controllers/Application.java文件的Application類內新增靜態方法login,該方法將定向到login視圖,並將參數傳遞給View
public class Application extends Controller { public static Result index() { return ok(index.render("Your new application is ready.")); } public static Result login() { return ok(login.render("請輸入用戶名和密碼:")); } }
代碼中login方法將定向到login視圖,而此時login視圖尚未定義,因而咱們須要在app/views中新建login.scala.html文件。
在app/views中新建login.scala.html文件,這樣便於controller中login方法定義的跳轉頁面一致,即可以完成跳轉。如今編寫頁面html代碼以下:
@(loginmessage:String) <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>login</title> </head> <body> <h2>@loginmessage</h2> <form method="post" name="login"> 用戶名:<input type="text" name="username"> 密碼:<input type="password" name="password"> <input type="submit" value="提交"> </form> </body> </html>
在view中,咱們定義了一個變量loginmessage用於接收login Action提交過來的參數:請輸入用戶名和密碼;接着,咱們定義了一個表單,提交方式爲POST,表單中包含用戶名和密碼2個input。這樣咱們的表單就定義好了。
下面咱們測試一下目前的工做成果;終端輸入activator run,打開服務器;在瀏覽器端輸入url:http://localhost:9000/login,顯示以下頁面:
目前爲止,一塊兒順利,固然當你點提交時會報錯以下:
錯誤的緣由很簡單,咱們尚未定義表單POST的Action,因而咱們繼續。
在app/controllers/Application.java文件的Application類內新增靜態方法loginPost,該方法用於接收post請求參數,進行登陸判斷,並定向到新頁面。
public class Application extends Controller { public static Result index() { return ok(index.render("Your new application is ready.")); } public static Result login() { return ok(login.render("請輸入用戶名和密碼:"));} public static Result loginPost() { DynamicForm requestData = Form.form().bindFromRequest(); String username = requestData.get("username"); String password = requestData.get("password"); String result; if(username.equals("kirigiri") && password.equals("123456")) { result = "登陸成功"; return ok(post.render(result)); } else { result = "用戶名或密碼錯誤,請從新輸入"; return ok(login.render(result)); } } }
該方法第一部分用於接收POST來的表單數據,第二部分用於登陸判斷,咱們默認正確的用戶名爲:kirigiri,密碼爲:123456;若是表單輸入正確則跳轉到post頁面,並顯示登錄成功;若是判斷錯誤就返回登錄界面,並提示從新輸入。
在app/views中新建post.scala.html文件,代碼以下:
@(loginresult:String) <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <h2>@loginresult</h2> </body> </html>
終端輸入activator run打開服務器,並在瀏覽器輸入http://localhost:9000/login進行測試。
【1】正確的輸入
【2】錯誤的輸入
測試結果符合預期,開發結束。
到此爲止,咱們的登陸頁面(version1)就算是完成了,固然了這個項目還很是的簡陋,在從此的版本中會進行逐步完善,敬請期待。
使用Play Framework進行Web開發,應該抓住MVC模式這個基本思想,只要掌握了這個基本思想,很快就能用Play Framework開發出Web頁面。
下次咱們將回歸正題,探討另外一個很是核心的主題:REST架構與基於Play的Restful Web Service