接前文:http://www.cnblogs.com/Kassadin/p/4343682.html
目前為止,我們已經研究了Play Framework的體系結構以及Web應用程序的工作原理。本來今天的內容是想討論一下REST架構和Restful Web Service的,正在我學習相關姿勢准備開坑之時,我突然想起了當年學習JSP的情景。想當年剛學JSP的時候,第一次的作業是寫一個登錄頁面,現在學了Play Framework,不妨把當年的作業重寫一遍,於是今天討論的內容就是:使用Play Framwork開發登錄頁面。
1.需求定義
基本需求:基於Play Framework開發一個web登錄頁面(version1)
業務流程:
(1)用戶在網頁輸入用戶名和密碼
(2)服務器驗證用戶名,密碼
(3)根據驗證結果,跳轉到新的頁面,並顯示驗證結果信息。
特殊說明:
(1)為了簡化需求,該版本的用戶名和密碼寫死在程序中,在下一個版本(version2)中,用戶名和密碼信息將存儲在數據庫中。
(2)在學習了Web Service之后,可以發布一個login web service(version3),這樣通過提供服務,可以方便其他平台調用,實現Android端登錄功能(version4)
(3)version2-4會在本系列之后陸續更新
2.項目實戰
2.1 新建項目
首先切換到工作目錄下,通過終端建立新項目:
activator new 模板選擇:5.play-java 輸入項目名稱:login cd login
這樣,我們就建立了一個叫login的新項目,選擇了java作為編程語言;(scala版本我也試着寫了一下,雖然功能實現了,但是有一部分代碼我也不能講的十分清楚,因此就不放在這里了)
2.2 修改conf/routes文件
現假設我要打開的登錄頁面url是:http://localhost:9000/login, 當客戶在瀏覽器輸入這個url時,我們必須在routes定義該GET方法的action,具體而言就是要在routes文件里加入如下代碼:
我們將這個GET請求交給Application中的login方法處理,由於現在改方法還沒有定義,我們現在需要定義該方法。
2.3 修改controller
在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文件。
2.4 定義view
在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。這樣我們的表單就定義好了。
2.5 第一次測試
下面我們測試一下目前的工作成果;終端輸入activator run,打開服務器;在瀏覽器端輸入url:http://localhost:9000/login,顯示如下頁面:
目前為止,一起順利,當然當你點提交時會報錯如下:
錯誤的原因很簡單,我們還沒有定義表單POST的Action,於是我們繼續。
2.6 添加routes
2.7 添加controller
在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頁面,並顯示登陸成功;如果判斷錯誤就返回登陸界面,並提示重新輸入。
2.8 添加view
在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>
2.9 測試運行
終端輸入activator run打開服務器,並在瀏覽器輸入http://localhost:9000/login進行測試。
【1】正確的輸入
【2】錯誤的輸入
測試結果符合預期,開發結束。
3.后記
到此為止,我們的登錄頁面(version1)就算是完成了,當然了這個項目還非常的簡陋,在今后的版本中會進行逐步完善,敬請期待。
使用Play Framework進行Web開發,應該抓住MVC模式這個基本思想,只要掌握了這個基本思想,很快就能用Play Framework開發出Web頁面。
下次我們將回歸正題,探討另一個非常核心的主題:REST架構與基於Play的Restful Web Service