收藏 分享(赏)

Play_framework最新教程.doc

上传人:精品资料 文档编号:11220520 上传时间:2020-02-20 格式:DOC 页数:22 大小:1.14MB
下载 相关 举报
Play_framework最新教程.doc_第1页
第1页 / 共22页
Play_framework最新教程.doc_第2页
第2页 / 共22页
Play_framework最新教程.doc_第3页
第3页 / 共22页
Play_framework最新教程.doc_第4页
第4页 / 共22页
Play_framework最新教程.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、2012 年最新整理的 Play framework 框架学习文档Play framework 框架学习文档 .1一、什么是 Playframework.3二、playframework 框架的优点 .4三、Play FrameWork 开发入门 .51、准备工作 52、新建项目 53、环境变量配置 74、MVC 模型 .8app/controllers9app/models9app/views95、应用程序布局 9app 目录 .9.class 文件在哪儿? .9public 目录 .10conf 目录 .10lib 目录 .106、创建简单的 helloworld 程序 10运行应用 11

2、创建 FORM.15提供更好的 URL.18自定义布局 19添加验证 19自动化测试 21一、什么是 PlayframeworkPlay Framework 是一个功能完整的 Java Web 开发框架。采用 RESTful 架构设计,简便灵活。Play Framework 使用 MVC 模式作为 Web 层,集成 Hibernate 管理持久层,Play Framework 还使用一个基于 Groovy 的模板引擎。 Play Framework 让开发者无须重新编译打包发布应用,即可看到修改后的效果,方便开发人员调试应用。 Play Framework 采用了无状态模型,是一个真正意义上的

3、“无共享”系统,能够在多个服务器上部署多个 Play Framework 的实例,所有实例都不会互相干扰。 Play Framework 采用了 Groovy 作为模板引擎,让表示层真正做到了开发高效简洁 Play Framework 拥有精确的错误定位机制,当错误发生的时候,可以精确的定位到错误代码的位置。 Play Framework 的速度很快,启动快,运行的速度也十分快。注:RESTful 架构:R EST (REpresentation State Transfer) 描 述 了 一 个 架 构 样 式 的网 络 系 统 , 比 如 web 应 用 程 序 。 它 首 次 出 现 在

4、 2000 年 Roy Fielding 的 博 士 论 文中 , 他 是 HTTP 规 范 的 主 要 编 写 者 之 一 。REST 指 的 是 一 组 架 构 约 束 条 件 和 原 则 。 满 足 这 些 约 束 条 件 和 原 则 的 应 用 程 序 或 设 计就 是 RESTfulWeb 应 用 程 序 最 重 要 的 REST 原 则 是 , 客 户 端 和 服 务 器 之 间 的 交 互 在 请 求 之 间 是无 状 态 的 。 从 客 户 端 到 服 务 器 的 每 个 请 求 都 必 须 包 含 理 解 请 求 所 必 需 的 信 息 。 如 果 服 务器 在 请 求 之

5、间 的 任 何 时 间 点 重 启 , 客 户 端 不 会 得 到 通 知 。 此 外 , 无 状 态 请 求 可 以 由 任 何可 用 服 务 器 回 答 , 这 十 分 适 合 云 计 算 之 类 的 环 境 。 客 户 端 可 以 缓 存 数 据 以 改 进 性 能 。另 一 个 重 要 的 REST 原 则 是 分 层 系 统 , 这 表 示 组 件 无 法 了 解 它 与 之 交 互 的 中 间 层 以 外的 组 件 。 通 过 将 系 统 知 识 限 制 在 单 个 层 , 可 以 限 制 整 个 系 统 的 复 杂 性 , 促 进 了 底 层 的 独立 性 。当 REST 架 构

6、 的 约 束 条 件 作 为 一 个 整 体 应 用 时 , 将 生 成 一 个 可 以 扩 展 到 大 量 客 户 端的 应 用 程 序 。 它 还 降 低 了 客 户 端 和 服 务 器 之 间 的 交 互 延 迟 。 统 一 界 面 简 化 了 整 个 系 统 架构 , 改 进 了 子 系 统 之 间 交 互 的 可 见 性 。 REST 简 化 了 客 户 端 和 服 务 器 的 实 现 。详 细 介 绍 : http:/ 模块引擎:Groovy 是一种新兴的 Java 2 平台语言。Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有代码。目前的 Groovy 版本是

7、 1.6.3,在 Java 1.4 和 Java 5 平台上都能使用,也能在 Java 6 上使用。Groovy 是 JVM 的一个替代语言 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。注意:不是指 Groovy 替代 java,而是指 Groovy 和 java 很好的结合编程 是一个基于 Java 虚拟机的敏捷 动态语言。 构建在强大的 Java 语言之上 并 添加了从 Python,Ruby 和 Smalltalk 等语言中学到的 诸多特征。 为 Java 开发者提供了 现代最流行的编程语言特性,而且学习成本很低

8、(几乎为零)。 支持 DSL(Domain Specific Languages 领域定义语言)和其它简洁的语法,让你的代码变得易于阅读和维护。 Groovy 拥有处理原生类型,面向对象以及一个 Ant DSL,使得创建 Shell Scripts变的非常简单。 在开发 Web,GUI,数据库或控制台程序时 通过 减少框架性代码 大大提高了开发者的效率。 支持单元测试和模拟(对象) ,可以 简化测试。 无缝集成 所有已经存在的 Java 对象和类库。 直接编译成 Java 字节码,这样可以在任何使用 Java 的地方 使用 Groovy。 Groovy 的一个好处是,它的语法与 Java 语言

9、的语法很相似。虽然 Groovy 的语法源于 Smalltalk 和 Ruby 这类语言的理念,但是可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。 (在这点上,Ruby 与 Groovy 不同,因为它的语法与 Java 语法差异很大。 ) 许多 Java 开发人员非常喜欢 Groovy 代码和 Java 代码的相似性。从学习的角度看,如果知道如何编写 Java 代码,那就已经了解 Groovy 了。 Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。 (有时候会少很多!)二、playframework 框架的优点1

10、) 修改代码及时生效!编辑 java 文件,保存,刷新浏览器,即可看到效果!无须编译,部署,重启服务器。2) 全栈式集成 Hibernate,OpenID,Memcached还有强大的插件系统,提供了创建一个酷炫的 web 应用所需要的一切。3) 无状态模式4) Play 是一个真正的“Share nothing”的系统。适合 REST,通过在多台服务器运行同一个应用的多个实例,可以很容易地实现容量扩展。5) 快速的解决错误当发生错误时,Play 会向你准确展示源代码中产生问题的那一行代码,即使是发生在模板中。6) 高校的模块系统一个简单的基于 Groovy 作为表达式语言的模块系统。它提供了

11、模块的继承,包含和标签的功能。7) 有趣CLASSPATH: .;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;JAVA_HOME: C:JDK(jdk 安装路径)4、MVC 模型Play 应用遵循 Web 架构使用的 MVC 架构模式。它将应用分离到不同的层中:表现层(Presentation)和模型层(Model) 。表现层进一步分为视图(View)和控制器(Controller)。 Model 是应用所处理信息的领域表述(Domain-Specific Representation)。绝大多数应用使用持久化机制如数据库存储数据。但是 MVC 并

12、没有特别提到数据访问层,因为它属于下层,由模型封装。 View 将模型渲染成适合交互的表单,通常是用户界面。一个模型可有多个不同目的视图。Web 应用中,View 通常以 HTML,XML 或 JSON 形式呈现,也可能是二进制的 Chart。 Controller 处理事件(通常是用户动作),并对模型做相应改变。Web 应用中,事件通常是 HTTP 请求:Controller 监听 HTTP 请求,从其中提取数据,如查询字符串参数,请求头,然后改变下层模型对象。 Play 将此三层分在 app 目录下的不同 package 中。app/controllers一个 Controller 就是一

13、个 Java 类,它的静态公共方法则是动作(Action)。动作是接收 HTTP请求后的 Java 处理入口点。Controller 类实际是面向过程的,非 OO。Action 从 HTTP 请求中提取数据,读或更新 Model 对象,然后返回一个包装成 HTTP 响应(HTTP Response)的结果。app/modelsModel 是一组具有所有 OO 特性的 Java 类。包含数据结构和应用可使用的操作。(译注:即充血模型)。支持通过 JPA 持久化。app/views应用的视图由 Play 的模板系统生成。Controller 从 Model 获取数据,然后使用模板呈现它。此 pac

14、kage 包含 HTML,XML 等模板文件,用作动态生成模型的表述(Representation)。5、应用程序布局app 目录包含所有可执行的工件:Java 源代码和视图模板。其下有三个标准 package,每个代表 MVC的一层。你也能添加你自己的包,如示例的 utils 包。View pacakge 可以在分子 packages: tags 存储应用的 ta。如可重用的模板片段。 一个 Controller 一个 view 目录,按惯例,每个 Controller 的相关模板存储在自己的子目录中。 .class 文件在哪儿?Play 在运行时编译 Java 源代码,并将编译的类缓存在

15、tmpbytecode 目录下。Play 应用的可执行工件时.java 源文件,不是已编译的.class(译注:包括 jar 文件)。public 目录存储静态的、由 Web 服务器直接处理的资源。分为三个子目录:images,stylesheets 和javascripts,分别放图片,css 和 js。conf 目录包含应用的所有配置文件。两个必须文件为: application.conf: 应用主配置文件,包含所有标准的配置选项。 routes:url 路由规则定义文件。 此目录包含在 Java ClassPath 中。lib 目录存放应用依赖的标准 Java 类库。此目录自动添加到 J

16、ava classpath 中。6、创建简单的 helloworld 程序打开 CMD,执行:play new helloworldPlay new 命令在当前路径下创建了一个 helloworld 目录,其中包含一系列文件和目录,重要的如下:app/ 包含应用核心,分为 models,controllers 和 views 目录。.java 生活的地方_conf/包含应用的所有配置。application.conf 应用主配置.routes 定义 url 路由规则,messages 国际化用。lib/ 包含应用依赖的标准.jar 文件。public/包含所有外部可访问的资源:js,css 和

17、 image。test/包含所有应用的测试程序。测试程序基于 JUnit 或 Selenium。注:Play 要求所有文件必须是 UTF-8 编码。等等应用的.class 文件在哪儿。恩,Play 不使用 class 文件而是直接读取 Java 源文件,并使用 Eclipse compiler 编译他们。这导致两件重要的事情。首先运行时 Play 会检查你对源文件所作的变更并自动加载它们。其次,当发生异常时,Play 将创建更好的错误报告并附加相关运行应用在 cmd 中键入 play run helloworld,play 启动 Web Server 并监听 9000 端口打开浏览器键入 ht

18、tp:/localhost:9000/,应用显示了一个缺省的欢迎页现在,看下此页是如何显示的。应用的主入口点配置在 conf/routes 文件中。它定义了应用所有可访问的 URL。打开routes 文件,会看到第一个 route:GET / Application.index它告诉 Play,当/路径收到 GET 请求后调用 Application.indexJava 方法。它是controllers.Application.index 的缩写,因为 controllers 包是隐式的附加的。创建标准 Java 应用时,通常使用一个入口点即 main 方法。Play 应用则有多个,一个 UR

19、L一个。这些方法称为 action 方法。定义 action 方法的类称为 controller。打开 helloworld/app/controllers/Application.java:package controllers;import play.*;import play.mvc.*;import java.util.*;import models.*;public class Application extends Controller public static void index() render();看到 Application 扩展了 play.mvcController

20、 类。它提供了所有 Controller 需要使用的方法,如 index 动作中使用的 render 方法。index 方法定义成 public static void,因为 Controller 永远无需实例化和返回值。 (译注:为了防止被使用者引入状态,并让 Controller 自然、干净而如此设计。但副作用是render 只能通过 throw 扔出结果,用异常当 GOTO,可谓兵行诡道) 。缺省的 index 动作调用 render 方法,通知 Play 渲染一个模板。模板是 app/views 目录下一个简单的 text 文件。此处使用 Application/index.html打

21、开 helloworld/app/views/Application/index.html 文件:#extends main.html /#set title:Home /#welcome /其中的内容是 Play tag,类似 JSP taglib.#welcome/tag 生成了之前看到的欢迎消息。#extends/tags 告诉 Play 此模板集成另一个 main.html 的模板.模板继承可用来创建复杂的 web 也并重用公共部分。打开 helloworld/app/views/main.html 模板#get title /#get moreStyles /#get moreScr

22、ipts /#doLayout /看到#doLayout/tag 吗?是 Application/index.html 插入的位置。创建 FORM编辑 helloworld/app/views/Application/index.html 模板#extends main.html /#set title:Home /我们使用符号请求 Play 自动产生调用 Application.sayHello 动作的方法。刷新浏览器。Oops,出错了。因为引用了一个不存在的动作。需要在helloworld/app/controllers/Application.java 中创建:package contr

23、ollers;import play.mvc.*;public class Application extends Controller public static void index() render();public static void sayHello(String myName)render(myName);我们声明了 myName 参数,它会自动映射到 form 提交的 HTTP 请求的 myName 参数。刷新浏览器。输入 name 提交,出现另一个错误.因为 Play 渲染此动作的缺省模板时,没有找到它。我们创建文件helloworld/app/views/Applicat

24、ion/sayHello.html#extends main.html /#set title:Home /Hello $myName ?: guest!Back to form然后刷新:提供更好的 URL看下提交的 url:http:/localhost:9000/application/sayhello?myName=chaos它不够 RESTful。因为 Play 通过缺省规则捕获了此 URL* /controller/action controller.action可以编辑 helloworld/conf/routes 文件在缺省规则前添加一条规则,提供更自然的 hello urlGE

25、T /hello Application.sayHello自定义布局可以修改模板更改布局。编辑 helloworld/app/views/main.html 文件:添加验证给 form 添加一个验证,要求 name 字段必填。我们通过 Play validation 实现。编辑helloworld/app/controllers/Application.java,在 sayHello action 处:public static void sayHello(Required String myName) if (validation.hasErrors() flash.error(“Oops,

26、 please enter your name!“);index();render(myName);并 import play.data.validation.*。Required 告诉 Play 自动检查 myName 字段是否填写。如果验证失败,我们加入一条消息到 flash scope 中并重定向到 index 动作。flash scope允许在重定向时保持消息。编辑 helloworld/app/views/Application/index.html 显示错误消息#extends main.html /#set title:Home /#if flash.error$flash.er

27、ror#/if输入空参数并提交,OK 起作用了。自动化测试Selenium Test在测试模式下运行应用。在 cmd 中输入 play test helloworld。打开浏览器,输入 http:/localhost:9000/tests 启动测试器。执行测试Selenium 测试用例通常写成一个 html 文件。Play 使用 Play 模板引擎生成这些文件。helloworld/test/Application.test.html 文件:* You can use plain selenium command using the selenium tag *#selenium/ Open

28、the home page, and check that no error occuredopen(/)assertNotTitle(Application error)#/selenium此测试打开 home 页,确认响应中没有“Application error” 。让我们来编写自己的测试。编辑测试内容:* You can use plain selenium command using the selenium tag *#selenium/ Open the home page, and check that no error occurredopen(/)assertNotTitl

29、e(Application error)/ Check that it is the formassertTextPresent(The Hello world app.)/ Submit the formclickAndWait(css=inputtype=submit)/ Check the errorassertTextPresent(Oops, please enter your name!)/ Type the name and submittype(css=inputtype=text, bob)clickAndWait(css=inputtype=submit)/ Check t

30、he resultassertTextPresent(Hello bob!)assertTextPresent(The Hello world app.)/ Check the back linkclickAndWait(link=Back to form)/ Home page?assertTextNotPresent(Hello bob!)#/selenium重新执行详见:http:/www.playframework.org/documentation/1.1.1/firstapp注:app 里 controllers 里的所有.java 文件里的所有方法名必须与 View 文件里的所有.html 文件名一样,不然就要指定 html 文件名,如:render(“User/userList.html“, pageObject);proObject 是对象名。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报