内建的 HTTP 路由器
路由器组件掌管把传入的 HTTP 请求转发到 Action.
一个HTTP 请求可被 MVC 框架看成是一个事件. 这个事主要包含两方面的信息:
- 请求路径 (如
/clients/1542
,/photos/list
), 包括查询字符串 - HTTP 方法 (像 GET, POST, …).
路由定义在 conf/routes
文件中, 它会被编译. 这表明你可以直接在浏览器上看到路由错误信息: 阅读全文 >>
内建的 HTTP 路由器
路由器组件掌管把传入的 HTTP 请求转发到 Action.
一个HTTP 请求可被 MVC 框架看成是一个事件. 这个事主要包含两方面的信息:
/clients/1542
, /photos/list
), 包括查询字符串路由定义在 conf/routes
文件中, 它会被编译. 这表明你可以直接在浏览器上看到路由错误信息: 阅读全文 >>
什么是 Action?
多数的请求被 Play 应用接收到,并由 Action 进行处理
.
一个 play.api.mvc.Action
简单说来就是一个 (play.api.mvc.Request => play.api.mvc.Result)
函数,它处理请求并产生一个 result 发送给客户端.
1 2 3 |
val echo = Action { request => Ok("Got request [" + request + "]") } |
Action 返回一个 play.api.mvc.Result
值, 代表着发送给 Web 客户端的 HTTP 响应. 上面的例子中 Ok
构造了一个 200 OK 的响应,它包含了 text/plain 类型的响应体.
建造一个 Action
play.api.mvc.Action
伴生对象提供有多个帮助方法用于构建 Action 值.
最简单的一个方法是以返回值为 Result
的表达式块作为参数: 阅读全文 >>
用 Play 进行工作其实很简单的. 你甚至不需要一个复杂的 IDE, 因为 Play 会在你对源文件作了修改之后自动编译和刷新, 因此你可以很轻易的使用一个简单的文本编辑器来工作.
然而, 使用一个现代的 Java 或 Scala IDE 或给予你很 Cool 生产效率, 比如即时的编译, 良好的重构和调试功能.
Eclipse
生成配置
Play 提供了一条命令简化了 Eclipse 配置. 为转换一个 Play 应用为有效的 Eclipse 项目, 使用 eclipsify
命令:
无需关联下载依赖的源文件 jars 包:
1 |
[My first application] $ eclipsify |
Unmi 注: 对于一个新建的项目,执行 eclipsify 之后会产生 Eclipse 必须的 .project, .classpath 和 .settings 文件,并且这个命令还会创建 test 和 target 目录。Play 1.x 的 play eclipsify 命令有些不同,它会生成一个 eclipse 目录,里面有三个分别用于运行, 调试和测试用的 launch 文件。 阅读全文 >>
这是一个 HTTP 编程 的大纲, 点击以下链接进入各节内容:
启动控制台
Play 2.0 控制台是基于 sbt 的为开发而准备的控制吧, 它允许你管理整个 Play 应用的开发周期.
要启动控制台, 进入到现有的 Play 应用的目录,然后运行 play
脚本:
Unmi 注: 虽然 sbt 是为 Scala 准备的构建工具,但是即使你创建的应用选的是 Java 语言, 我们仍然是要依赖于 sbt. 在 Play 1.x 的时候不存在 Play 控制台,要么就是直接把应用运行起来了。在 Play 1.x 的项目目录下运行 play 命令只会显示简单的帮助信息。
play 命令进入到当前应用的控制台下,提示符是 [应用的名称] $
1 |
$ cd /path/to/any/application $ play |
标准的应用目录布局
Play 应用的目录布局是标准化的,这样可保持尽量的简单. 一个标准的 Play 应用看起来如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
app → 应用程序源文件 └ assets → 待编译的资源文件 └ stylesheets → 比如放置 LESS CSS 源文件 └ javascripts → 比如放置 CoffeeScript 源文件 └ controllers → 应用的控制器 └ models → 应用的业务层 └ views → 视图模板 conf → 配置文件和其他无需编译的放在 classpath 下的文件 └ application.conf → 主配置文件 └ routes → 路由定义文件 public → 公共资源 └ stylesheets → CSS 样式文件 └ javascripts → Javascript 脚本文件 └ images → 图片 project → sbt 配置文件 └ build.properties → sbt 项目属性配置 └ Build.scala → 应用构建脚本 └ plugins.sbt → sbt 插件配置 lib → 不受管理的库依赖 logs → 标准的日志目录 └ application.log → 默认的日志文件 target → 构建生成的东西 └ scala-2.9.1 └ cache └ classes → 编译生成的类文件 └ classes_managed → 受管理的类文件 (如模板等生成的) └ resource_managed → 受管理的资源文件 (如 Less 等生成的) └ src_managed → 产生的源文件 (如模板等) test → 单元和功能性测试的源文件目录 |
用 play 命令创建一个应用
创建一个新应用最初的方式是用 play new
命令.
1 |
$ play new myFirstApp |
这会询问你一些信息.
Unmi 注: 新版 play new 命令允许你带上目录名,让你在指定的目录下创建应用,在 2.0-beta 版中,只是在当前目录下创建你的应用。运行 play help 看显示的 new 是否是: new [directory] Create a new Play application in the specified directory. 就知道能否指定应用的目录。
并且此时的 play new 命令可以用
1 |
$ play new ~/Desktop/unmi |
这样就会在 ~/Desktop/unmi 目录中创建应用,后面的提示是一样的. 在 ~/Desktop/unmi 目录下有应用所需的 app, conf, public 等目录。
阅读全文 >>
系统要求
为了运行 Play 框架, 你需要 JDK 6 或更新的版本.
假如你正使用 MacOS, Java 已经内置了. 如果你正在使用 Linux, 请确认使用了 Sun 的 JDK 或 OpenJDK (不是 gcj, 它是许多 Linux 发行版的默认 Java 命令). 要是用的是 Windows, 只下载安装最新版的 JDK 安装包即可.
确可 java
和 javac
命令被设置到了当前路径下 (你可以在命令行提示符下通过输入 java -version
和 javac 来检查它
).
下载二进制包
下载 Play 2.0 的二进制包 (选择最新的 2.0 RC 版) 并解压到有读和写权限的目录下. (运行 play
会向安装目录中写入文件, 所以不要安装在 /opt
, /usr/local
或任何你无需设置写入权限的目录中.)
Unmi 注: 当前最新的版本是 2.0.4。 阅读全文 >>
Play 当前版本是 2.0.4,2.0 前的版本通常会称为 PlayFramework,或者 Play!,现在干脆直呼为 Play 了,名气大了些就这样的,似乎越来越显得不可一世了。本人有意更深点了解 Play 框架,所以打算翻译官网 Manual, tutorials & references 一系列资料,并且着重点会先放在基于 Scala 语言的 Play 2.0 的应用。
Play 2.0 是一个高生产率的 Java 和 Scala 的 Web 应用框架,它集成了现代 Web 应用开发所而的组件和 API。
Play 是轻量级的,无状态的,Web 友好的架构,并且是特征可预期的(features predictable)。还借助于它的反应模型(reactive model) 和 Iteratee IO 的使用,让 Play 为高伸缩性的应用最小化了资源消耗(CPU, 内存和线程).
Unmi 注:关于 Iteratee IO, 可参考:Iteratee I/O 和 Scalaz Tutorial: Enumeration-Based I/O with Iteratees
第一步要翻译的内容只想覆盖到以下:
开始使用
Java 的方法不支持多返回值,或者我们想达到返回多个值的效果时,不得不借用数组、列表或对象等来容纳多个值返回给调用者。这样使用起来不怎么优美,特别是为返回多个值而创造一个类成本有点高,如果 Java 也存在像 C# 那样的匿名类倒好。C# 如何使用匿名类返回多个值可参看本文后面的例子。
把 Scala 当作是一种脚本语言,它的灵活性就应该与 Perl 或 Ruby 看齐。Scala 的方法也可以有多个返回值,它实现些种行为,可借助于元组和列表类型,虽然你也可以发掘更多的实现方式,但到目前为止,我还是觉得用元组和列表最简单。
下面给出代码例子,让我们瞧瞧 Scala 如何实现方法多个返回值,并且作为对比我还会贴上 Perl, Ruby 和 C# 可以怎么实现多返回值。我是 Java 的惯用者,不过我一直都未否认,从语言层面 C# 比 Java 要显得优雅的多。
1 2 3 4 5 6 7 |
def foo = (100, "Unmi") //定义方法返回元组 val (num, name) = foo //用元组模式去接收方法 foo 的结果 println(num + ":" + name) //输出为 100:Unmi val values = foo //调用方法的结果直接给元组变量 println(values._1 + ":"+ values._2) //输出同样是 100:Unmi |
方法返回一个元组,里面可以组合任何多个的不同类型的返回值,调用时可以用元组变量或元组模式去接收方法的返回值,用元组模式的方式更好看些,也才能算作真正的多返回值。 阅读全文 >>