• 简单易懂的现代魔法——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

  • 相关阅读:
    【C#高级】泛型(一)
    【C#】RGB转CMYK
    C#读写Excel
    H5+MUI上传文件
    完整登录流程包含第三方登录,很详细值得推荐
    [MVC]多文件、超大文件上传
    [SQL Server] 无法连接到本地数据库
    “System.OutOfMemoryException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理
    MVC缓存(二)
    MVC缓存(一)
  • 原文地址:https://www.cnblogs.com/Kassadin/p/4348773.html
Copyright © 2020-2023  润新知