课堂笔记----Playframe work

Play 工程目录结构

web_app                         根目录                
|   sbt                         SBT Unix 批处理脚本用于启动sbt-launch.jar 
|   sbt.bat                     SBT Windows 批处理脚本用于启动sbt-launch.jar 
|   sbt-launch.jar              SBT 启动的Java可执行类库
|
+---app                         Play Web 应用全部代码所在目录
|   |
|   +---             控制器代码所在目录
|   |       Application.scala   默认控制器代码
|   |
|   \---                   视图(Play Scala HTML模板) 代码所在目录
|           main.scala.html     主模板文件
|           index.scala.html    首页模板文件
|
+---conf                        Play 配置文件所在目录
|       application.conf        应用配置文件
|                        应用入口路由文件,所有的HTTP请求将通过该文件转发到指定的Scala对象处理
|
+---logs                        日志目录
|       application.log         应用运行日志
|
+---project                     SBT工程文件
|       build.properties        保存所需的SBT版本信息,通常无需更改
|       Build.scala             主要的工程配置文件
|       plugins.sbt             告知SBT本工程所需要的插件以及下载位置
|
+---public                      存储一切直接发送给浏览器的资源文件
|   |
|   +---images                  图像文件,如JPEG、PNG、GIF等
|   |
|   +---javascripts             JavaScript脚本文件
|   |
|   \---stylesheets             CSS样式表文件
|
\---target                      存放编译后的可执行代码和编译时的中间代码

一切从 routes 开始

Play 的应用入口为 conf/routes 文件,该文件定义了全部Play应用中URL对应的动作(Action),如当浏览器请求访问 http://localhost:9000/ ,Play 应用将会返回一个页面,此时routes文件应定义成如下形式:

GET     /                           controllers.Application.index

PS:"/"为根目录,get方式是根目录下的方法。


理解Play Framework控制代码 (Controller)

上文的routes定义//index.html对应了Application.scala代码中的index方法来显示网页内容:

//所有的控制代码按Play规范均归入controllers包
package controllers

//导入Play应用开发所需的类库
import play.api._
import play.api.mvc._
import play.api.templates._

//Application全局对象实例化,因此使用Object来声明Application并继承Play的Controller类
object Application extends Controller {

//定义index方法,任何routes文件中指定调用的方法,必须返回Action对象来处理HTTP请求
    def index = Action {
      //任何Action对象必须获得反返回的Result对象
      //Ok继承于Result对象,所以返回Ok表示其包含的内容为HTTP 200 OK状态
      //在Scala最后一行代码可以无需使用return来返回结果
      //因此下面最后一行代码等同于 return Ok(views.html.index("首页","首个Play Web应用!"))
      Ok(views.html.index("首页","第一个Play Web应用!"))
    }

}

PS:routes文件里的最下方已经自动定义了方法将去controller找


由此可知Play Web应用的调用顺序和关系为:

浏览器 ( http://localhost:9000/ )-> Play 框架 (conf/routes) -> 对应的Controller代码 (app/controllers/Application.scala) -> 对应的返回Action (def index = Action {…}) 的方法 -> 对应的可返回Result的代码 (OK(…)) -> 要返回的正文内容 ( “…” 纯文本 或 Html(“…) HTML格式) 。

Play Framework模板 (View)

Play的模板在HTML基础上直接基于Scala语言,模板文件通常存放在/app/views目录下,文件须以“.scala.html”双扩展名命名。Play的每个模板文件其实都是一个Scala代码,均需要通过Scala编译器检查其类型与语法,并编译成.class可执行的JVM二进制文件。

编译时Play首相会将.scala.html的Play模板文件自动生成为.scala的源代码文件,如 /app/views/index.scala.html的模板文件将会生成/target/scala-2.9.1/src_managed/main/views/html/index.template.scala文件,该文件将会继而被Scala编译器编译成index.class。

首先看一下index.scala.html文件:

@(title: String, message: String)
@* 模板入参,两个参数均为String类型,分别命名为title和message *@

@* 调用main.scala.html模板,传入参数title *@
@main(title) {
    @* 输出参数message *@
    <p>@message</p>
    <a href="#">Scala语言与Play框架入门教程</a>
}

在Play的模板中@符号代表跟随其后的代码为Scala语言代码,由于最终任何.scala.html文件都将转换成Scala语言代码,在编写Play模板时也可以理解为编写Scala语言代码,一个模板文件可以理解为一个对象,因此需要传入参数时就必须在模板文件的第一行定义都需要哪些入参以及这些入参的名字和类型。服务器端的代码注释写法为: @* 注释内容 *@

转自http://blog.newitfarmer.com/scala/play/14475/repost-scala%E8%AF%AD%E8%A8%80%E4%B8%8Eplay%E6%A1%86%E6%9E%B6%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B-%E5%88%9D%E7%A8%BF

你可能感兴趣的:(java,windows,控制器,根目录,课堂)