簡單易懂的現代魔法——Play Framework攻略3


接前文: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文件里加入如下代碼:

image

我們將這個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("請輸入用戶名和密碼:"));
    }
}

image

代碼中login方法將定向到login視圖,而此時login視圖還沒有定義,於是我們需要在app/views中新建login.scala.html文件。

2.4 定義view

image

在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,顯示如下頁面:

image

目前為止,一起順利,當然當你點提交時會報錯如下:

image

錯誤的原因很簡單,我們還沒有定義表單POST的Action,於是我們繼續。

2.6 添加routes

image

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));
        }

    }
}

image

該方法第一部分用於接收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】正確的輸入

imageimage

【2】錯誤的輸入

imageimage

測試結果符合預期,開發結束。

3.后記

到此為止,我們的登錄頁面(version1)就算是完成了,當然了這個項目還非常的簡陋,在今后的版本中會進行逐步完善,敬請期待。

使用Play Framework進行Web開發,應該抓住MVC模式這個基本思想,只要掌握了這個基本思想,很快就能用Play Framework開發出Web頁面。

下次我們將回歸正題,探討另一個非常核心的主題:REST架構與基於Play的Restful Web Service


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM