Play 2.0 文档 - 入门 -- 针对Scala开发者

原创
2012/03/19 09:55
阅读数 22W

安装 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的高级应用

展开阅读全文
加载中
点击加入讨论🔥(8) 发布并加入讨论🔥
打赏
8 评论
6 收藏
1
分享
返回顶部
顶部