简单易懂的现代魔法——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文件里加入如下代码:
我们将这个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