跟着Vamei大神-02了解play
来源:互联网 发布:微信水果老虎机源码 编辑:程序博客网 时间:2024/06/06 02:34
HTTP协议是按照“请求-响应”的方式工作。Play框架的核心是用动作(Action)来完成“请求-响应”。一个动作负责处理一种请求。一个项目可能要定义许多动作。复杂的网站,可能要定义上百个动作。所以,Play使用控制器(Controller)和URL路由(URL routing)来组织管理动作。控制器用于给动作分类。URL路由(routes)记录了URL和动作的对应关系。
先做一个简单的demo:
1、在views下新添加一文件dong.scala.html(模板)
模板将视图和数据分开。服务器可以把不同的数据传递给同一个模板,从而产生不同的页面。 Play同样也有一套模板系统。模板的大部分内容都可以用html写,作为视图,而在一些特别的地方,预留给数据参数。在模板中,用Scala语言来调用参数。ok()中接收的是views.html.index.render(),实际上就是app/views/index.scala.html这一模板的render()方法。Play会根据模板,自动生成相应的类。
*** 也可以用import引入views.html.index,而不是使用完整的类路径。
@(message: String,dong:String)表示此页面接受两个参数message和dong都是String。@dong调用参数
注意:在@* *@中加入注释
由于@的特殊功能,为了在模板中显示"@"字符,需要使用@@。
@(message: String,dong:String)<!DOCTYPE html><html> <head> <title>@dong</title> <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")"> <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")"> <script src="@routes.Assets.at("javascripts/jquery-1.9.0.min.js")" type="text/javascript"></script> </head> <body> @message </body></html>2、修改routes文件,添加自己的url映射
GET /dong controllers.Application.dong()
表示get请求,通过/dong(http://localhost:9000/dong),映射到controllers.Application.dong()方法
扩展:(1)GET /record/:id controllers.Application.record(id: Long)
http://localhost:9000/record/1234 1234代表id。http://localhost:9000/record/1234/123是错误的访问不到record的方法
(2)GET /newRecord/*name controllers.Application.newRecord(name: String)
http://localhost:9000/record/1234 和http://localhost:9000/record/1234/123都能到record的方法
这就是:和*的区别,:后面只能有一个/,而*后面可以有多个/。
# Routes# This file defines all application routes (Higher priority routes first)# ~~~~# Home pageGET / controllers.Application.index()# Home dong add by meGET /dong controllers.Application.dong()# Map static resources from the /public folder to the /assets URL pathGET /assets/*file controllers.Assets.at(path="/public", file)3、修改Application文件,添加自己的方法
一个动作必须是一个静态(static)的方法。一个动作返回一个Result类型的对象。ok("Hello World!")返回的就是这么一个Result对象,代表了一个HTTP响应。ok()返回的响应都是200状态,即ok(正常回复)。在这个例子中,响应的主体内容为"Hello World!"。
package controllers;import play.*;import play.mvc.*;import views.html.*;public class Application extends Controller { public static Result index() { return ok(index.render("Your new application is ready.")); } public static Result dong() { return ok(dong.render("dong ge wei wu ","winter")); }}扩展:根据network工具的监视,响应的状态码为200。响应的类型为text/plain。这是ok()生成Result对象时自动决定的。我可以手动控制响应类型,比如将index()的返回语句改为:return ok("Hello World!").as("text/html");
这样,响应的主体类型为html。
除了ok()之外,Play还提供了其他的一些便捷方法,用以生成不同状态的响应。这些方法的名字和状态的名字相同,比如:
return badRequest("bad request"); // 400, 坏请求
return unauthorized("You are forbidden"); // 401, 未授权
return redirect("/new"); // 303, 重新定向
此外,我还可以直接使用status()来说明数字形式的状态码
return status(200, "good");
更多的响应生成方式可参考Results
4、然后访问url:http://localhost:9000/dong
看到如下页面:dong ge wei wu
恭喜你。又成功了。
大神语录:
一个请求进入服务器后,由URL路由引导到正确的动作来处理。URL路由根据请求的方法和URL来识别这一请求,再寻找对应动作。
我还可以用Scala的语法,在模板中实现更复杂的逻辑。比如下面的模板中使用循环:
@(title: String, content: String, lines: List[String])<!DOCTYPE html><html> <header> <title>@title</title> </header> <body> <p>@(content) Start using the template.</p> <ul> @for(line <- lines) { <li>@line</li> } </ul> </body></html>循环是@for实现的。@后面不仅可以是一个对象,还可以是一个完整的Scala语法。
模板中还可以有if选择结构,比如
@if(item) { <p>True</p>} else { <p>False</p>}
感谢Vamei大神,我是winter!
- 跟着Vamei大神-02了解play
- 跟着Vamei大神-01初学play
- 跟着Vamei大神-03play表单
- 跟着Vamei大神-04play数据库
- 跟着大神好好学习
- 了解Play
- 跟着大神练VIM--------二级
- 跟着大神写一个解释器吧
- 跟着洪洋大神学自定义view
- 了解WMI的大神来帮个忙啊
- hdu play on words(大神写的)
- 为何你跟着滴滴D8级前端大神撸代码,技术却依旧原地踏步?
- 一个Google Play的开发者,要了解的一些小事
- 02 VMware play
- play
- play
- Play!
- play
- Kth Smallest Element in a BST
- java web服务器cpu占用过高的处理
- Qt问题综合
- unity5 动画系统Mecanim事件快速入门 区分animation和animator不再混淆
- PL/SQL中cursor(光标/游标)的用法
- 跟着Vamei大神-02了解play
- 疯狂猜歌实现(2)—— 实现唱片布局以及播放动画
- 自定义View时出现:"android.view.InflateException: Binary XML file line报错问题"
- 24点计算 算法
- struts2 标签的使用之一 s:if
- python 退出程序sys.exit 的退出码
- Java基础 之隐藏、复写、遮掩、遮蔽、和重载
- linux(centos)搭建SVN服务器
- 第一期博客征文《我的高效编程秘诀》获奖名单揭晓