Play Framework Web开发简介

在研究kafka过程中需要用到kafka的管理平台, 但这个管理平台用sbt进行编译,并且使用了 Play Framework框架进行开发,因此查阅了资料, 发现了下面很好的相关教程

从文章中获取 部分信息如下, 全部信息请到 原文的论坛处获取:http://www.scala-china.net/discuz/forum.php?mod=viewthread&tid=2376&extra=page%3D2

在博客前面已经介绍过两个用于开发Web应用的框架,采用PHP开发的Yii 开发教程 和基于纯Java的Vaadin Web开发教程 ,此外还有基于Ruby的Ruby on Rail 和基于.Net 的 ASP.NET MVC4 ,其中Ruby on Rail 和 ASP.NET MVC 教程已经非常多,也不准备再重复这些教程。

本 篇开始介绍Play Framework ,它也是一个用来开发Web应用的开发框架,可以使用Java和Scala,但本教程将使用Scala作为开发语言,Scala语言比较新,但它已经成为 我最喜欢的语言之一,如果你喜欢使用Java,PHP,Perl,C#或者JavaScript那么你一定也会喜欢上Scala, 它集中了这些语言的优点,同时除了支持面对象的编程外,它还是一种函数式编程语言(Functional programming),支持扩展,你可以根据需要扩展Scala语言,这是一般的开发语言所不支持的。

Play Framework 基于Akka (并行应用开发包,这个开发包的一个显著特定是基于Actor模型,并行运算是这个某些的基本特点,可以避免由于一般多线程开发不正确使用同步或互锁造成 的程序死锁等问题)。采用MVC模型(非常类似于ASP.NET MVC4),缺省支持REST和JSON,支持编译CoffeeScript和LESS代码。 支持数据库编程,并且可以和Slick(类似于LINQ的数据库接口)。开发可以使用Eclipse ,Intellij IDEA或是Sbt(Typesafe 自带的编译工具)。

本教程采用Eclipse 开发环境配合sbt 工具开发。

下面简单介绍一下Play Framework开发环境的搭建,(Windows开发环境)。

安装好之后,注意把这些命令行所在的目录添加的系统环境变量PATH中,然后到到命令行中执行

play new myFirstPlayApp

在提示选择语言(Java或Scala)选择 Scala

然后进入 新创建myFirstPlayApp ,运行 play run ,如果编译成功,将显示下面类似的消息,表示新创建的Web应用运行在端口 9000

打开浏览器 输入地址http://localhost:9000,如果显示如下页面,将表示开发环境已经就绪,后面文章将介绍这个例子。

 

相信Scala 语言会逐渐普及开来,Play Framework 也会得到广泛的应用,目前使用Play Framework的一些著名网站有 Linked In

 

注:本博客的一个新的别名 http://www.scala-playframework.com ,之后可能会作为专门介绍Scala和Play Framework的中文技术论坛。

 

Play应用标准的目录结构

app                      → 应用的源码
└ assets                → 可以编译的Asset源码
└ stylesheets        → 通常为Less代码
└ javascripts        → 通常为CoffeeScipts代码
└ controllers           → 应用的controllers类定义
└ models                → 应用的Model类定义
└ views                 → UI模板
conf                     → 配置文件
└ application.conf      → 主应用配置文件
└ routes                → 路由定义
public                   → 公开的Asset定义
└ stylesheets           → CSS文件
└ javascripts           → Javascript文件
└ images                → Image文件
project                  → sbt配置文件(用来编译项目)
└ build.properties      → sbt 项目属性定义
└ Build.scala           → 应用编译脚本定义
└ plugins.sbt           → sbt插件定义
lib                      → 应用使用的库文件(不由sbt管理的其它库)
logs                     → 日志目录
└ application.log       → 缺省的应用日志文件
target                   → 编译生成的文件目录
└ scala-2.10.0
└ cache
└ classes            → 编译过的class文件
└ classes_managed    → Managed class 文件 (模板等, ...)
└ resource_managed   → Managed 资源(less, ...)
└ src_managed        → 生成的源码(模板, ...)
test                     → 单元测试或功能测试代码目录

app目录

app目录包含了所有可运行代码或资源:Scala代码,UI模板和Less代码,CoffeeScript代码, app通常包含下面三个子目录:对于与MVC的三个部分:

  • app/controllers
  • app/models
  • app/views

当然你可以添加你自己的目录,比如app/utils。此外还有一个可选的标准目录名assets
app/assets ,用来存放可供编译的LESS或CoffeeScript代码

public目录

public目录存放了可以供网页直接访问的资源,比如CSS,图像,JavaScript文件。

conf目录

该目录存放应用的配置文件,主要有下面两种配置:

  • application.conf 应用主配置文件,定义了应用的一些配置参数
  • routes ,路由配置文件

lib目录

主要用来添加一些第三方库文件,这些库主要指一些没有通过sbt或编译脚本定义的库文件。直接把jar文件添加到这个目录下,编译时会直接添加到应用的classpath.

project目录

定义sbt编译项目的定义,包含下面三个文件:

  • plugins.sbt 定义项目使用的插件定义
  • Build.scala 定义项目编译脚本.
  • build.properties 指定编译sbt的版本等.

target目录

包含了编译后生成的一下文件。

如果你使用GIT做为版本管理工具,下面为典型的 .gitingore 文件:
logs
project/project
project/target
target
tmp
dist
.cache
即使你使用IntelliJ IDEA或是Eclipse IDE来开发Play应用,了解Play Console的使用还是非常有用的,Play Console 为一基于sbt的命令行工具,可以用来管理Play应用的开发生命周期。

启动Play Console

使用Play Console前,注意把Play所在目录添加到系统目录中,这样,启动Play Console 非常简单,只需在Play应用所在目录在命令行输入 “play”

play

20130914001

获得Play 命令帮助

你可以输入help play 获得关于Play命令使用的基本方法和命令:
常见的命令如下:
1    play                         Enter the play console
2    help                         Displays this help message or prints detailed help on requested commands (run 'help <command').
3    about                        Displays basic information about sbt and the build.
4    tasks                        Lists the tasks defined for the current project.
5    settings                     Lists the settings defined for the current project.
6    reload                       (Re)loads the project in the current directory
7    projects                     Lists the names of available projects or temporarily adds/removes extra builds to the sessio.
8    project                      Displays the current project or changes to the provided `project`.
9    set                          Evaluates a Setting and applies it to the current project.
10    session                      Manipulates session settings.  For details, run 'help session'.
11    inspect                      Prints the value for 'key', the defining scope, delegates, related definitions, and dependenies.
12    ; <command> (; <command>)*   Runs the provided semicolon-separated commands.
13    ~ <command>                  Executes the specified command whenever source files change.
14    last                         Displays output from a previous command or the output from a specific task.
15    last-grep                    Shows lines from the last output for 'key' that match 'pattern'.
16    exit                         Terminates the build.
17    show <key>                   Displays the result of evaluating the setting or task associated with 'key'.

在开发模式下启动Play应用

使 用run 命令,可以开发模式下启动Play应用,此时一些调整信息可以在屏幕上显示出来,缺省情况下,Play Web应用使用端口9000,如果你修改代码,Play Console会检测到代码变化,在下个请求时会自动重新编译代码或资源,如要必要,还可以重新启动Play应用。如果出现编译错误,那么在浏览器中会显 示错误信息:
20130914002

如果要停止Web服务,可以按Ctrl+D ,此外还可以通过任务管理器,杀死对应的Java进程来停止Web服务。

编译

Compile 命令可以编译Play 源码或是资源(如CoffeeScript代码,LESS代码,Scala代码等),如果出现编译错误,屏幕上显示对应的错误提示:

20130914003

调试命令

如 果你使用Eclipse IDE,你可以使用Eclipse来调试代码,此时需要使用 play debug 启动一个JPDA调试端口,缺省调试端口为 9999,此后可以通过配置Eclipse远程调试指向这个端口,就可以使用Eclipse和其它Java 调试器来调试代码,如果使用IntelliJ IDEA IDE可以自动完成这些配置。

强制清理编译结果

如果你觉得编译的结果出现意想不到的机会,那么你的sbt的缓存可能出现问题,此时可以通过 clean-all 命令强制清除之前的编译结果,然后使用compile 重新编译生成新的编译内容。

此外play Console 基于 sbt 工具,因此你也可以使用sbt 的一些功能 ,比如 ~compile ,~run, ~test等

发表评论