安装 Play 2.0
准备工作
运行Play框架,需要JDK6或以上版本。
如果你使用MacOS,已内建支持Java。如果你使用Linux,确保你安装了SUN JDK或OpenJDK(非gcj,大多数Linux发布版默认安装的版本)。如果你使用的是Windows,只需下载并安装最新的JDK安装包。
确保java和javac在你的环境变量中(你可以通过shell命令行中执行java -version和javac -version检查)。
下载二进制包
下载 Play 2.0 二进制包并解压到具有读写权限的目录。(运行play將会在 play 目录中写入一些文件,因此避免解压到/opt,/usr/local等你需要特殊写权限的目录。)
添加play脚本于环境变量中
通常,你应该將框架的安装目录加入系统环境变量中。在UNIX系统中,类似:
export PATH=$PATH:/path/to/play20
Windows中,你也需要相应的设置到全局环境变量中。
在UNIX中,保确play脚本具有可执行权限。
检查play命令是否可用
$ play help
如果安装正常,你将会看到如下基本帮助信息:
新建应用
=======
使用 play 命令新建应用
新建应用最容易的方式就是使用 play new 命令。
它將询问一些信息:
- 应用名称(仅用于显示,名称將会用于稍后的一些信息)
- 应用的模版,你可以选择基于Java的模版或基于Scala的模版,或者默认模版。
注意,此时选择的模版不意味着你將来你不能更换其它语言。例如你可以选择默认Java模版而將来使用Scala开发。
一旦应用创建,你可以再次使用play命令进入 Play2.0 控制台。
不安装Play而新建项目
你也可以用 sbt 新建项目,而不必安装Play。
但首先得安装 sbt 0.11.2。
仅需为新项目新建一个目录,并使用两步配置你的 sbt
在project/plugins.sbt,添加:
// The Typesafe repository
resolvers += "Typesafe repository " at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
addSbtPlugin("play" % "sbt-plugin" % "2.0")
确保替换上图的 2.0 为你想使用的确切版本。如果你想使用snapshot版本,你需要特别的resolver:
// Typesafe snapshots
resolvers += "Typesafe Snapshots " at "http://repo.typesafe.com/typesafe/snapshots/"
在project/Build.scala中:
import sbt._
import Keys._
import PlayProject ._
object ApplicationBuild extends Build {
val appName = "My first application "
val appVersion = "1.0"
val appDependencies = Nil
val main = PlayProject (
appName , appVersion , appDependencies , mainLang = SCALA
)
}
你可以在该目录中启动:sbt
sbt將加载项目和解析依赖。
解剖 Play 2.0 应用结构
标准应用布局
Play应用的标准布局保持尽量简洁。一个标准的应用布局看起来像这样:
app → Application sources
└ assets → Compiled asset sources
└ stylesheets → Typically LESS CSS sources
└ javascripts → Typically CoffeeScript sources
└ controllers → Application controllers
└ models → Application business layer
└ views → Templates
conf → Configurations files
└ application.conf → Main configuration file
└ routes → Routes definition
public → Public assets
└ stylesheets → CSS files
└ javascripts → Javascript files
└ images → Image files
project → sbt configuration files
└ build.properties → Marker for sbt project
└ Build.scala → Application build script
└ plugins.sbt → sbt plugins
lib → Unmanaged libraries dependencies
logs → Standard logs folder
└ application.log → Default log file
target → Generated stuff
└ scala-2.9.1
└ cache
└ classes → Compiled class files
└ classes_managed → Managed class files (templates, ...)
└ resource_managed → Managed resources (less, ...)
└ src_managed → Generated sources (templates, ...)
test → source folder for unit or functional tests
app/目录
app包含了所有的可执行工件:Java和Scala源代码,模版和將被编译的assets源文件。
app目录中有三个标准包目录,代表MVC的每类工件模式:
app/controllers
app/models
app/views
你当然也可以定义自已的包,如:app/utils。
注意,Play 2.0 中,控制器,模型和视图的包名已无硬性限制,可以定制了(如以com.yourcompany开头)。
有个可选的app/assets目录用于存放待编译的Less和CoffeeScript源文件。
public/目录
静态资源存放的目录,可被Web服务器直接处理。
目录被分为三个标准的子目录,images,stylesheets,javascript。你应该像这样组织你的静态资源,保持一致性。
刚刚新建的应用,/public將映射给 /assets URL路径,但你可以轻易的改变亦或使用几个不同的子目录来存放。
conf/ 目录
conf目录包含应用的配置文件。有两个主要的配置文件:
application.conf 应用的主配置文件,包含标准的配置参数
routes 路由定义文件
如果想为应用添加可选配置项,可以向application.conf添加。
如果某个库需要特别的配置文件,确保它位于conf目录下。
lib/ 目录
lib目录是可选的,包含脱管的库依赖,如那些脱离构建系统,想手动管理的JAR文件。放入该目录下,它们会自动
加入类路径中。
project/ 目录
project 包含了sbt构建定义符:
plugins.sbt 定义项目使用的插件
Build.scala 项目构建脚本
target/ 目录
target目录包含了所有由构建系统生成的文件。可据此得知生成了那些文件:
classes/ 包含所有编译后的类文件(包括Java和Scala)。
classes_managed/ 仅包含由框架管理的class文件(如路由和模版引擎生成的文件)。將它做为一个外部类文件
夹加入你的IDE项目中,將会很有用。
resources_managed/ 包含生成的资源文件,特别是如Less CSS 和 CoffeeScript的编译结果。
src_managed/ 包含编译的源文件,如被模版引擎生成的Scala源文件。
.gitignore文件
编译生成的文件应该被你的版本控制系统忽略。参照如下的.gitignore配置:
logs
project/project
project/target
target
tmp
使用play2.0控制台
启动控制台
play 2.0 拥有一个基于 sbt 的开发控制台,可以管控play应用的整个开发周期。
要启动控制台,进入一个已存在的play项目,运行play脚本:
$ cd /path/to/any/application
$ play
获取帮助
输入 play help 获取基本帮助信息:
[My first application] $ help play
以开发模式运行项目
以开发模式运行当前项目,输入 run :
[My first application] $ run
开发模式中,服务器將以自动重载特性启动,意味着每次请求,Play將重新检查项目并编译必要的文件。如有必要,应用將自动重启。
如有任何编译错误,將在浏览器中直接显示。
想停止服务器,输入Ctrl+D,將退回到Play控制台。
编译
在Play 2.0 中,你也可以不用启动服务器而进行预编译。使用 compile 命令:
[My first application] $ compile
启动交互控制台
输入 console將进入Scala交互控制台,测试你的Scala代码:
[My first application] $ console
调试
启动控制台的时候,你也可以请求Play启动一个JPDA调试端口。稍后可以用Java debugger连接。使用play debug命令:
$ play debug
JPDA端口就绪时,JVM將打印调试日志:
Listening for transport dt_socket at address: 9999
注意:使用 play debug ,JPDA將socket绑定于9999端口。你也可以设置JPDA_PORT环境变量改变端口,如使用set JPDA_PORT=1234。
使用sbt特性
Play控制台也不过是一个平常的sbt控制台,因此你可以使用sbt特性,如解发执行.
如运行 ~compile
[My first application] $ ~ compile
编译行为將会在每次你改变源文件的时候触发。
如果使用 ~run
[My first application] $ ~ run
编译行为將在开发服务器启动后触发。
类似的你也可以运行 ~test,便于你每次修改源文件后自动测试。
[My first application] $ ~ test
直接使用 play 命令
你也可以直接使用play命令,无须启动play控制台。如输入play run:
$ play run
[info] Loading project definition from myFirstApp/project
[info] Set current project to My first application
--- (Running the application from SBT, auto-reloading is enabled) ---
[info] play - Listening for HTTP on port 9000...
(Server started, use Ctrl+D to stop and go back to the console...)
应用將直接启动。当输入Ctrl+D后,將退回到OS的控制台。
强制清理
如果某些东西出错,你认为sbt缓存已经错误,可以在OS命令行中使用 clean-all 命令,清理所有生成的目录。
$ play clean-all
配置你喜欢的IDE
使用Play开发是简单的。你甚至不需要一个特别的IDE,Play自动编译和刷新修改过的文件,仅使用一个简单的文本编辑器也未尝不可。
然而,使用一个先进的Java或Scala IDE,可以提高生产力,如自动完成,重构和调试。
Eclipse
生成配置文件
Play针对生成eclipse配置文件单独提供了一个命令。將一个Play项目转成Eclipse项目,使用 eclipsify 命令:
[My first application] $ eclipsify
你还需通过File/Import/General/Existing project导入Eclipse工作区:
你可以使用 play debug run 启动应用,稍后使用JPDA 启动器在任何的启动会话中连接。停止调试会话不会导致服务器停止。
提示:你可以通过 ~run 运行应用,可使改变的文件直接编译。这种方式,可以监听view目录下的模版,并自动编译改变的文件。如果你使用正常的 run 运行,你则需要每次刷新浏览器。
如果你做了比较重要的更新,如改变类路径,使用 eclipsify 重新生成配置文件。(还需要刷新eclipse工程)
提示:在团队协作中,不要提交eclipse配置文件!
生成的配置文件包含了框架安装路径的绝对引用。这与你的本地安装环境密切相关。团队协作中,每个开发者必须自行维护他的Eclipse配置文件。
IntelliJ
生成配置文件
Play为生成Intellij IDEA工程配置单独提供了一个命令。將一个Play项目转成IDEA模块,使用 idea 命令:
[My first application] $ idea
稍后你需要將应用导入工程(File->New Module->Import existing Module)
提示:There is an Intellij IDEA issue regarding building Java based Play2 apps while having the scala plugin installed. Until itʼs fixed, the recommended workaround is to disable scala plugin.
调试,首先添加调试配置:
打开 Run/Debug 配置对话框,点击 Run -> Eclipse 配置
添加远程配置,选择 Remote
配置:
Set a name
Transport : Socket
Debugger mode: Attach
Host: localhost
Port: 9999
Select module you imported
关闭对话框 - 单击 Apply
以调试模式启动play
$ play debug
將打印:
Listening for transport dt_socket at address: 9999
设置一些断点。运行该应用(必须在终端中运行 play debug)。最后,访问http://localhost :9000。IntelliJ將在断点处中断。
如果你做了比较重要的更新,如改变类路径,使用 idea 重新生成配置文件。
Netbeans
生成配置文件
现阶段,Play未提供内置的Netbeans项目生成支持。但你可以通过Netbeans sbt插件生成一个Netbeans Scala工程。
首先编辑 plugins.sbt 文件:
```
// Comment to get more information during initialization
logLevel := Level.Warn
resolvers ++= Seq(
DefaultMavenRepository,
“Typesafe Repository” at “http://repo.typesafe.com/typesafe/releases/",
”remeniuk repo“ at ”http://remeniuk.github.com/maven"
)
addSbtPlugin(“play” % “sbt-plugin” % “2.0-RC2”)
libraryDependencies += “org.netbeans” %% “sbt-netbeans-plugin” % “0.1.4”
```
运行:
$ play netbeans
示例应用
在Play2.0发行包中,提供了一些使用Java和Scala开发的示例应用。这是查看代码和示例的很好起点。
示例应用程序位于你的Play安装目录的 samples/ 子目录下。
Hello World
这是一个最基本的应用,展示了Play的一些特性:
编写控制器和actions
路由和解析路径
Linking to public assets.
使用模版引擎
表单验证
电脑库存
这是一个基本的CRUD示例,底层使用JDBC连接。它展示了:
访问JDBC数据库,在Java中使用Ebean,在Scala中使用Anorm。
分页表格和CRUD表单。
集成CSS框架(Twitter Bootstrap)。
Twitter Bootstrap 需要一个有别于Play2.0提供的默认表单助手的不同表单布局,因此该示例还演示了集成自定义表单构造的示例。
表单
一个假设的表单应用,展示了表单的不同使用用例. 它演示了 :
编写包含验证的复杂表单
处理表单的动态重复值
ZenTasks
该示例展示了基于ajax的应用。这会是一个持续改进的项目,我们计划在后续版本中加入新特性。目前你可以学到:
集成授权与验证
使用Ajax与JavaScript解析路由
集成编译 - LESS CSS 和 CoffeeScript
CometClock
这是一个非常简单的Comet演示,推送从服务器端给浏览器推送clock事件,使用forever-frame技术。他演示了怎样:
创建Comet连接
使用 Akka actors (使用Java版本)
编写自定义 Enumerators (Scala版本).
WebSockets 聊天室
一个聊天室应用,使用WebSocket构建。采用BOT方式,在同一聊天室的会谈,他演示了:
WebSocket 连接
高级Akka应用.
Comet 监测
一个监测Play服务器性能的手机移动应用 . 他过演示了 :
Enumerators 和 Enumeratees的高级应用