接前文: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

简单易懂的现代魔法——Play Framework攻略3的更多相关文章

  1. 简单易懂的现代魔法——Play Framework攻略4

    接前文:简单易懂的现代魔法——Play Framework攻略3 1.The Object 时隔2个多月,Play Framework系列又更新了,本次的主题是:利用Play Framework实现R ...

  2. 简单易懂的现代魔法——Play Framework攻略1

    哇哈哈,寒假结束啦,于是我又开新坑了....这次的主角可是大名鼎鼎的Play Framework!!那么闲话少说,开始攻略吧! 1.什么是Play Framework? 大名鼎鼎的play frame ...

  3. 简单易懂的现代魔法——Play Framework攻略2

    接前文:http://www.cnblogs.com/Kassadin/p/4335908.html 上次讲到Play Framework开发环境的配置,以及第一个Hello World程序:本次主要 ...

  4. linux内核升级图文攻略(转)

    一.Linux内核概览Linux是一个一体化内核(monolithic kernel)系统.设备驱动程序可以完全访问硬件.Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设置 ...

  5. Moon.Orm3.8技术全攻略

    Moon.ORM技术全攻略  一.绪论 本文主要是针对Moon.ORM的技术的讨论及其使用使用指导.如有其它疑问,请留言.本文主要针对Moon.ORM3.9版本,同时将会对4.0做一个技术预览.本文从 ...

  6. linux内核升级图文攻略

    Linux内核概览 Linux是一个一体化内核(monolithic kernel)系统. 设备驱动程序可以完全访问硬件. Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设 ...

  7. 圣魔大战3(Castle Fantisia)艾伦希亚战记完美攻略

    作为城堡幻想曲系列续作,艾伦希亚战记继承了前作的战棋+养成模式进行游戏. (城堡幻想曲3,纠正大家个错误哦,不是圣魔大战3,圣魔大战是城堡幻想曲2,圣魔大战不是个系列,艾伦西亚战记==艾伦希亚战记,一 ...

  8. 视频聊天插件:AnyChat使用攻略之iOS开发指南

    AnyChat使用攻略之iOS开发指南 这套攻略主要指导刚开始使用AnyChat SDK For iOS的同学,快速搭建SDK环境,和实现音视频开发流程. (需要工程案例文件可联系我们) 在iOS平台 ...

  9. php连接微软MSSQL(sql server)完全攻略

    http://www.jb51.net/article/98364.htm php连接微软MSSQL(sql server)完全攻略 作者:吵吵 字体:[增加 减小] 类型:转载 时间:2016-11 ...

随机推荐

  1. Vim 保存和退出命令

    命令 简单说明 :w 保存编辑后的文件内容,但不退出vim编辑器.这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中. :w! 强制写文件,即强制覆盖原有文件.如果原有文件的访问权限不允 ...

  2. webpack使用webpack-dev-middleware进行热重载

    新手,刚开始学习webpack,想使用webdevserver,但定制性太差,于是研究了一下使用webpack-dev-middleware进行指定. 根据文档https://www.npmjs.co ...

  3. Session原理简述

    Session存在的意义,估计每个用做web开发的人都是了解的,就为了解决HTTP是个无状态协议所带来的问题,不多说了.这里主要想说的是服务端与客户端是如何利用session进行交互的. Sessio ...

  4. mysql数据库表格导出为excel表格

    在本地数据库中操作如下: 由于excel表格的编码是GBK,所以导出时要加一个设置字符编码: select * from 某个表 into outfile 'd:/文件名.xls' CHARACTER ...

  5. Messages.pas里的消息

    一.Windows 消息大全 这张表拷贝自万一兄的帖子:http://www.cnblogs.com/del/archive/2008/02/25/1079970.html 但是我希望自己能把这些消息 ...

  6. hibernate知识点理解

    1.只有业务逻辑层出现的问题? 1.切换数据库麻烦 2.sql编写起来麻烦 3.我们的程序员不需要关注数据库,只希望关心业务本身 2.hibernate的好处 1.程序员只关心业务逻辑,使角色更加清楚 ...

  7. Python数据结构——栈、队列的实现(二)

    1. 一个列表实现两个栈 class Twostacks(object): def __init__(self): self.stack=[] self.a_size=0 self.b_size=0 ...

  8. docker 感性体验

    Docker 1.0正式发布!1.0 版本包含很多新特性,这也是 Docker 的首个产品级的版本.从今天开始,你将会一直听到一个新的概念 —— Docker as a platform ,其组件包括 ...

  9. 关于php框架

    最近学习yii2.0 强哥原班人马开发,不得不看 同时也需要关注一下drupal8和symfony2

  10. IOS开发问题录:如何在Swift中引入Head文件?

    最近在学习IOS开发,从一个简单的登录开始,逐步解决了一个网络访问.获取控件值等问题,遇到了信息加密的问题. 做为IOS的入门者,信息加密需要解决如下几个问题: 1.IOS的MD5加密有没有固定函数, ...