what's play framework


`Play`是一个高效的 java 或者 scala 的 web 框架. 它整合集成了组件和各种现代 web 开发中的 API.

Play 是一个基于轻量级, 无状态, web 友好的架构以及它可预见特性和针对可扩展 web 应用的最小化资源消耗( cpu, 内存等). 这些都得益于它的` reactive` 模型. 基于` Akka` 的` Stream`.

# 安装 play

先决条件 java 版本`>=1.8`

`Play` 它其实来自于一系列的基本 Maven 管理的库. 所以你可以使用任何 java 的编译工具来编译一个 Play 的工程.

首先我们要通过使用` Lightbend Activator` 来安装 Play.

这个`Activator`可以被看做是` sbt plus 模板`. 它集成了` sbt`(一个编译工作)和下载了很多的`工程模板`. (就和一些 java 工程里的项目结构一样.) 还有一个 web 接口用来管理这些工程. 模板可以是例子, 他们可以是你项目的种子来供你开始自己的项目.

`Activator` 来自于一系列的种子模板. 推荐从[` play-scala`](https://www.lightbend.com/activator/template/play-scala) 或者[` play-java`](https://www.lightbend.com/activator/template/play-java) 开始.

##下载 Activator


Activator 是做一个一个单独的归档文件来分发的. 通过 https://playframework.com/download 这里可以下载到离线的版本, 它一开始有点大, 但是意味着你完全可以不用担心其他的依赖了.

###解包 Activator

在你可以写的目录解包这个文件, 然后将它添加你的 Path中.

## 创建项目

Activator 来自于一系列不同的`种子`, 他们可以被用作通过 play-scala 或者 play-java 的项目. 你同样可以创建工程通过模板Activator 的 web 接口或者直接通过命令行来完成.

通过命令行' Activator ui` 命令来打开一个web 的页面, 通过它一步步完成一个项目的初始构建. 默认的端口是`8080`.

## 访问内置的教程

## 开始 Play

play 支持 develop 模式,可以让你及时看到编辑的效果.

# 恭喜完成!


# 创建一个新的工程

## 通过 Activator 的命令来创建新工程

这个` Activator` 命令可以用来创建新的` play` 工程, Activator 能够让你通过选择不同的模板来创建工程,作为普通的 Play 工程, 通常我们使用的模板就是` play-scala`(scala 语言)或者`play-java`(java 语言). 其实这里不一样选了那个语言之后就不能够再修改了. 你可以通过 play-java 创建一个工程,之后添加 scala 的代码进去,完全没有问题.


- 创建一个普通的 play scala 应用:

> activator new my-first-app play-scala

- 创建一个普通的 play java 应用:

> Activator new my-first-app play-java


## 通过 Activator ui 来创建应用

> activator ui

## 不用 Activator 来创建应用

同样我们可以不借助 Activator 就能够创建应用, 通过 `sbt`直接来创建.

> 如果没有安装sbt 先安装

创建一个工程目录, 然后添加一个 sbt 构建脚本文件, 添加2个条件:

> plugins.sbt


```
// The Typesafe repository
resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/maven-releases/"

// Use the Play sbt plugin for Play projects
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.x")

```

这里注意 sbt 的版本, 请对应自己当前使用的版本


> project/build.properties

```
sbt.version=0.13.11
```

注意版本


> build.sbt

- 如果是 play-java

```
name := "my-first-app"

version := "1.0"

lazy val root = (project in file(".")).enablePlugins(PlayJava)
```


- play-scala


```
name := "my-first-app"

version := "1.0.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayScala)
```


然后命令行

```
cd project directory
sbt
```

# 学习使用 play 终端

## 启动终端

play 终端就是一个开发的终端, 它是基于 `sbt`用来管理当前的 play 应用, 可用于完整的开发周期, 想要登录这个终端就直接到工程目录下,执行` Activator`

```
cd my-first-app
activator
```

## 获取帮助

通过` help` 这个命令来获取基础的帮助信息, 另外还可以获取特定的命令的帮助信息

> help run


## 启动开发模式的 server

直接` run`, 这个模式下服务器会启动自动加载功能,也就是说每一个请求 play 都会 check 当前应用是否被修改,如有就重新编译文件, 而且可以自动重启.通过 `ctrl+d` 可以退出应用.

## 编译

在 play 的终端下,直接` compile` 可以编译应用.

## test

> test

## 启动互动命令行

> console

## 调试

> activator -jvm-debug 9999

## 使用 sbt 的特色

play 终端本事就是 sbt 的终端, 完全可以使用 sbt 的 功能, 如触发执行如:

> $ ~ compile

这个就会触发编译在每次修改了源文件之后.

> $ ~ run

这个就会服务器执行的时候每次自动编译.

还有

> $ ~  test


当然除了上面的方式, 你完全可以直接通过 activator 来执行 play 的命令:

> $ activator ~run



# 配置你喜爱的 IDE

skip~~

```
To create a Play application:

Open New Project wizard, select Activator under Scala section and click Next.
Select one of the templates suitable. For the basic empty application you can select Play Scala Seed. The full list of templates can be found on Lightbend Activator templates page.
Enter your project’s information and click Finish.
You can also import an existing Play project.

To import a Play project:

Open Project wizard, select Import Project.
In the window that opens, select a project you want to import and click OK.
On the next page of the wizard, select Import project from external model option, choose SBT project and click Next.
On the next page of the wizard, select additional import options and click Finish.

```



# Play 项目解析

## 一个 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
build.sbt                → Application build script
conf                     → Configurations files and other non-compiled resources (on classpath)
 └ application.conf      → Main configuration file
 └ routes                → Routes definition
dist                     → Arbitrary files to be included in your projects distribution
public                   → Public assets
 └ stylesheets           → CSS files
 └ javascripts           → Javascript files
 └ images                → Image files
project                  → sbt configuration files
 └ build.properties      → Marker for sbt project
 └ plugins.sbt           → sbt plugins including the declaration for Play itself
lib                      → Unmanaged libraries dependencies
logs                     → Logs folder
 └ application.log       → Default log file
target                   → Generated stuff
 └ resolution-cache      → Info about dependencies
 └ scala-2.11
    └ api                → Generated API docs
    └ classes            → Compiled class files
    └ routes             → Sources generated from routes
    └ twirl              → Sources generated from templates
 └ universal             → Application packaging
 └ web                   → Compiled web assets
test                     → source folder for unit or functional tests
```



- `app/` 目录

这个目录包含了所有的可执行文件, java 或者 scala 源代码文件, 这里有3个包, 分别作为 MVC 的组件存在:

	- app/controllers
	- app/models
	- app/views

当前你完全可以添加自定义的包, 如`app/utiles` 等.

- `public/` 目录

这下面都是静态的资源文件.


-'conf/' 目录, 这里存放配置文件, 主要的配置文件有` application.conf` 和` route` 关于路由的配置

- `lib/` 目录,

- 'build.sbt' 文件, 这个是项目的主要构件声明的定义文件, 通常就在根目录, 同时你还可以通过` project/` 目录下的`. scala` 文件来定义


- `project/`目录, 这个命令包含了2个构件配置文件

  - `plugins.sbt`
  - `build.properties`


- `target/` 目录, 这个目录包含了通过构件之后的所有文件,

  - `classes/`
  - `classes_managed/`
  - `resource_managed/`
  - `src_managed/`
  - `web/` 这个是通过` sbt-web` 生成的一系列 web 需要文件如` app/assets` 或者` public` 目录.

- 典型的`. gitignore` 文件

## 默认的的 sbt 模块结构

同样你也可以使用默认的由` sbt` 或者` maven` 生成的项目结构.


ok 基本上目前介绍到了所欲的初级入门内容, [接下来就是看详细的教程了.](https://www.playframework.com/documentation/2.5.x/Tutorials)