Play包含了它自己的服务器和构建环境。
1、获取Play、搭建Play环境
从http://playframework.org下载最新版的Play 2发行文件,抽取ZIP文件。Play的唯一要求就是要安装了JDK,1.6或更高版本。将此目录加到你的PATH环境变量中去。
打开命令行,输入play。
2、创建并运行一个空应用
一个Play应用就是一个目录,它里面包含了一个特定的结构,Play用此结构来找到配置、代码以及任何其他它需要的资源。此结构是用play new命令来完成的。
在命令行中输入 play new hello。按提示去做即可。
然后是运行此项目:
$ cd hello
$ play run
3、Play应用结构
play new 命令创建了一个默认的应用,带有基本的结构,包括一个最小的HTTP路由配置文件、一个Controller类用于处理HTTP请求,一个view模板、jQuery,以及一个默认的CSS样式表。
.gitignore
app/controllers/Application.scala
app/views/index.scala.html
app/views/main.scala.html
conf/application.conf
conf/routes
project/build.properties
project/Build.scala
project/plugins.sbt
public/images/favicon.png
public/javascripts/jquery-1.7.1.min.js
public/stylesheets/main.css
test/ApplicationSpec.scala
test/IntegrationSpec.scala
此目录结构对所有的Play应用都很常见。其中的顶级目录将文件进行了如下分组:
■ app—Application source code
■ conf—Configuration files and data
■ project—Project build scripts
■ public—Publicly accessible static files
■ test—Automated tests
【用~run来立刻编译修改过的文件
如果你用run命令启动了你的应用,Play将会在它接收到下一个HTTP请求时编译你的修改。要尽快开始编译,就是当文件被改了后,你应当改用 ~run 命令。】
4、访问应用
访问默认的欢迎页:http://localhost:9000/。它就是某种hello world例子——它展示了一个运行的应用,输出了一些东西,让你看清楚各种东西都是如何组合在一起。它就是一个最少量的代码实际地像你展示了此web框架。
5、加一个controller类
编辑app/controllers/Application.scala,将它的index方法换成下面的:
def index = Action {
Ok("Hello world")
}
这个定义了一个action方法,它生成了一个HTTP OK响应带文本内容。现在刷新一下,你会看到输出了Hello world。
为什么这是行的呢,就是因为在conf/routes这个HTTP路由配置文件中有一行将GET / HTTP请求映射到了一个方法调用:
GET / controllers.Application.index()
6、添加一个编译错误
如果你犯错了,那输出更有趣。在action方法中,去掉Hello world后的引号,保存文件,重新加载页面,你会看到一个友好的编译错误。
修复此错误,保存文件,再加载。Play动态重新加载修改,因此你不必每次做了修改就手动构建。
7、加一个HTTP请求参数
这仍然不是一个合适的web应用示例,因为我们没有使用HTTP或HTML。现在我们往这个controller中加一个新的action方法,并带一个字符串参数:
def hello(name: String) = Action {
Ok("Hello" + name)
}
修改conf/routes路由配置文件,将一个不同的URL映射到你的新方法上,带一个HTTP请求参数叫n:
GET /hello controllers.Application.hello(n: String)
在浏览器中访问:http://localhost:9000/hello?n=Play!
注意查询字符串参数 n 匹配在routes文件中声明的参数名。
8、添加一个HTML页面模板
最后,为了完成这个首个示例,我们需要一个HTML模板,因为你通常是用web应用框架来生成web页面,而不是纯文本文档。那么创建一个文件 app/views/hello.scala.html,内容如下:
@(name: String)
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<h1>Hello <em>@name</em></h1>
<body>
</html>
这是一个Scala模板。第一行定义了参数列表,此例中也就是name这个参数——并且该HTML文档中包含了一个HTML em 标签,它的内容是一个Scala表达式——就是name参数的值。一个模板就是一个Scala函数定义——Play会将其转换成普通的Scala代码并编译。3.5.4节(我指的是Play for Scala这本书)会解释模板是如何成为Scala函数的。
要使用此模板,你需要在hello action方法中渲染它来生成HTML输出。一旦Play将此模板转换成一个Scala对象叫views.html.hello,这意味着调用了它的apply方法。你之后用此渲染的模板作为一个字符串值来返回一个Ok结果:
def hello(name: String) = Action {
Ok(views.html.hello(name))
}