`
qinya06
  • 浏览: 604634 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

play framework 笔记

阅读更多
Play 学习


指导
学习用Play编写一个Blog,用每章节一步步了解Play 功能。

启动项目
介绍
在本教程中,您将学习用Play 来编写Web应用。该Blog项目,起名为Yabe ,该应用程序示例代码在安装目录下的samples-and-tests/yabe文件夹中。


条件
首先,Play需要运行在Java5或者更高版本的环境上。

运行play需要一些命令,最好使用Unix系统,Windows 同样也需要这些命令。

Play是一个“full stack ”框架,并提供封装了java API和不需要配置JPA,和部署J2EE。

如果你习惯使用功能齐全的像Eclipse或NetBeans你当然可以使用它的Java IDE。Play!开发,您可以有一个像Textmate,Emacs或其他VI的文本编辑工作。这是因为该框架编译管理和部署过程基于本身。

安装Play
安装非常简单。只需下载页面下载了最新的压缩包,解压到任何路径。在Windows操作系统下,安装路行避免存在空格,比如c:\Documents And Settings\user\play,你可以直接放在c:\play下。在环境变量PATH 上配置上Play的安装目录c:\ play;

创建项目
利用Play的命令管理程序,创建一个Play应用程序非常简单。打开一个新的命令行,然后键入:

play new yabe

接着它会提示你输入应用程序的完整名称。输入“'Yet Another Blog Engine'”;




用'play new '命令创建一个新目录yabe/和填充的文件和目录.

目录介绍:

l  app/ 存放一些代码的地方。比如java类或者页面等, mcv框架涉及到的。

l  conf/是存放配置文件的。

l  lib/ 应用所需要用的JAR包。

l  public/是放一些资源文件的地方,比如HTML里的图片,CSS样式,JS脚本文件等。

l  test/ 放置测试模块信息。

注意:Play使用UTF-8字符集,所以我们所有的格式应该使用UTF-8。

当修改了Java类或者页面,在刷新页面时,系统会自动加载它们;还有就是当java类有异常时,Play会确切的定位到发生错误源码的位置.

运行应用程序
在控制台输入

play run yabe


打开浏览器输入 http://localhost:9000看到如下页面.




让我们看看该应用程序是如何显示此页面的。

应用程序的主要切入点是在conf /routes文件。这个文件定义了所有的应用程序访问的URL。如果您打开生成的routes文件,你会看到routes的如下信息':

GET            /                      Application.index



当web服务器都到一个get  /  请求时,他必须调用Application.index 方法, 由于controllers是隐含的,类似在eclipse下的源文件.因此不用写成controllers.Application.index.



当您创建独立的Java应用程序通常使用Main入口定义,例如:

public static void main(String[] args) {  ... }

Play应用程序为每一个url 有几个入口点,我们调用这些’action’,这些’action’定义在特殊的类中,我们称这些为’控制器’.

让我们看看controllers.Application控制器。打开yabe/app/controllers/Application.java源文件:

package controllers; import play.mvc.*; public class Application extends Controller {         public static void index() {               render();        } }     这些控制器是play.mvc.Controller类的扩展, 这个类提供了所有有用的方法,例如render(),我们在index的方法中使用.        Index方法被定义为 'public static void', 如何定义该方法的,你可以看到, 该方法是static的, 因为控制器类从来没有实例化,他 们被标记为public授权调用 url 的 response ,他们总是返 void.

这个默认的index方法很简单, 他调用了render方法, 他告诉 play提供 render一个模板, 生成http响应,使用模板是最常用的方法(担不是唯一的一个).

模板是一个简单的文本文件,在/app/views目录下,如果我们没有指定模板,则默认的使用这个默认的模板在Applicaton/index.htm中.

模板信息如下 /yabe/app/views/Application/index.html:

#{extends 'main.html' /}#{set title:'Home' /} #{welcome /}



模板非常简单,事实上,看到的所有标签,play标签与jsp标签非常相似. 

#{welcome /}  标签通常是用于生产在浏览器中看到的欢迎信息.

#{extends /} 标签 用于模板继承另一个main.html的模板 ,模板允许重复使用  .

打开/yabe/app/views/main.html模板



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">    <head>        <title>#{get 'title' /}</title>                      <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>        <link rel="stylesheet" type="text/css" media="screen"             href="@{'/public/stylesheets/main.css'}" />        <link rel="shortcut icon" type="image/png"             href="@{'/public/images/favicon.png'}" />    </head>    <body>        #{doLayout /}     </body></html>

#{doLayout /} 标签的内容 插入到 index.html

了解控制器是如何自动重新加载我们编辑的文件, 打开yabe/app/controllers/Application.java  在文本编辑器中添加一个错误信息,将render()后的分号去掉



public static void index() {    render()}

跳转到浏览器并刷新页面


修改这个错误,并添加一行打印信息:



public static void index() {      System.out.println("Yop");    render();                 }                             

刷新浏览器的web页面, 控制台重新加载,将原来的jvm代码替换掉, 每一次请求’/’Url 将会在控制台打印”Yop”.

在yabe/app/views/Application/index.html添加一条<h1> 来替换 welecome.

Java代码变更后,只要在浏览器中刷新页面看到修改。现在我们将开始代码博客应用。您可以继续使用文本编辑器或打开一个像Eclipse或NetBeans的Java IDE的项目。

设置数据库
设置数据库, 打开yabe/conf/application.conf  文件, 并将#去掉

db=mem



从注释中我们看到,通过JDBC连接任何数据库,以及配置连接池



现在我们返回到浏览器中刷新页面,Play 会自动启动数据库,并日志中打印:

INFO  ~ Connected to jdbc:hsqldb:mem:playembed

遍历一个数据List
我们将开始写博客的模型。

JPA介绍
JPA是一个Java规范定义了一个标准的API的对象关系映射.

User类
创建一个user类,/yabe/app/models/User.java,如下



package models; import java.util.*;import javax.persistence.*; import play.db.jpa.*; @Entitypublic class User extends Model {     public String email;    public String password;    public String fullname;    public boolean isAdmin;        public User(String email, String password, String fullname) {        this.email = email;        this.password = password;        this.fullname = fullname;    } }

@ Entity注释标记为该类为JPA实体Bean.

通过注解并不是唯一的, 业务对象继承play.db.jpa.Model , 但是继承Model在大多数情况下很好的选择,这样可以减少JPA代码量

编写测试类
我们写一个Junit来测试.

要运行测试,需要特殊的test模式, 停止当前的应用程序, 打开命令行输入



play test yabe




play test 和 play run  命令差不多, 除了加载测试运行模块,还可以直接在浏览器上运行

当运行play应用程序的测试模块,play 会自动切换到测试框架并加载application.conf 相应的文件



打开浏览器输入http://localhost:9000/@tests 查看测试运行, 选择所有默认的测试运行.




我们用JUnit测试, 当看到一个默认的BasicTests.java存在,我们打开/yabe/test/BasicTest.java

import org.junit.*;import play.test.*;import models.*; public class BasicTest extends UnitTest {     @Test    public void aVeryImportantThingToTest() {        assertEquals(2, 1 + 1);    } }



删除默认的测试代码,并创建一个测试,并创建一个用户,并查询该用户,代码如下





@Testpublic void createAndRetrieveUser() {    // Create a new user and save it    new User("bob@gmail.com", "secret", "Bob").save();        // Retrieve the user with bob username    User bob = User.find("byEmail", "bob@gmail.com").first();        // Test     assertNotNull(bob);    assertEquals("Bob", bob.fullname);}

选择BasicTests.java的测试运行,单击开始,检查所有为绿色。






我们需要对User类的方法,检查是否具有指定的用户名和密码的用户存在。让我们把它写并进行测试。



在User.java中添加connect方法

public static User connect(String email, String password) {    return find("byEmailAndPassword", email, password).first();}现在进行测试

@Testpublic void tryConnectAsUser() {    // Create a new user and save it    new User("bob@gmail.com", "secret", "Bob").save();        // Test     assertNotNull(User.connect("bob@gmail.com", "secret"));    assertNull(User.connect("bob@gmail.com", "badpassword"));    assertNull(User.connect("tom@gmail.com", "secret"));}

Post类
package models; import java.util.*;import javax.persistence.*; import play.db.jpa.*; @Entitypublic class Post extends Model {     public String title;    public Date postedAt;        @Lob    public String content;        @ManyToOne    public User author;        public Post(User author, String title, String content) {        this.author = author;        this.title = title;        this.content = content;        this.postedAt = new Date();    } }

我们将编写一个新的测试用例来检查,Post类

在写测试前,将所有的信息清楚.



public class BasicTest extends UnitTest {
分享到:
评论
1 楼 aoliwen521 2010-04-07  
大哥。您这个是在哪里弄的??不全啊。。小弟我希望看到完整的教程,请问哪里弄的?我没搜索到啊。

相关推荐

    play framework 框架个人笔记

    Play Framework 是一个开源的Web应用框架,以Java和Scala为后盾,致力于提供简洁、高效、可测试的开发体验。本文将深入探讨Play Framework的基本概念、常用命令、Eclipse调试方法、模式、控制器、工具包、session...

    play1的文档资料

    "Play Framework 学习笔记(一):初识Play"和"Play Framework 开发入门"为初学者提供了入门指导,涵盖了框架的基本概念和基本操作。"Play! Framework试用手记"则分享了实际使用过程中的经验和心得。 6. **论坛...

    玩框架工具「Play Framework Tools」-crx插件

    要在Play Framework应用程序中启用自动刷新,您需要安装SBT插件。更多信息:https://github.com/jamesward/play-auto-refresh 版本0.0.11和0.0.12 - src文件链接应该在Play 2.2和2.3中工作 版本0.0.9和0.0.10 - ...

    Android开发教程笔记完全版.zip

    完成开发后,应用需要打包成APK并通过Google Play Store或其他分发渠道发布。发布前要遵循Google的开发者政策,进行兼容性测试和性能优化。 以上只是Android开发教程笔记可能涵盖的部分内容,具体的学习过程中还会...

    Play Framework Tools-crx插件

    功能*在更改时自动刷新*打开编辑器以错误笔记要在播放框架应用程序中启用自动刷新,您需要安装SBT插件。更多信息:https://github.com/jamesward/play-auto-refresh版本0.0.11&0.0.12 - SRC文件链接应在播放2.2和...

    play-java-spring:具有Spring依赖项注入的Play框架

    Spring的默认play-java模板眼镜 介绍让Play Framework &lt;2.4与Spring Framework一起使用相对容易: : 。 在Play Framework 2.4中,他们添加了“ ” : Play开箱即用,提供基于JSR 330...笔记可以在上找到另一个Play

    sbt-web-test-js:在playframework(或基于sbt-web的项目)中运行Jasmine测试

    因此,sbt-web-test-js也可以与playframework一起使用。 该插件不直接依赖于sbt-web。 但是,它依赖于sbt-web来编译Coffeescripts并将所有Javascript移到适当的文件夹中。 sbt-web-test-js将一个测试套件分配给一...

    iOS12-CarPlay-Example:在iOS 12及更高版本中使用CarPlay框架的示例

    笔记到目前为止,我已经注意到一些一般性提示: CarPlay主要在“模板”中工作,而不是在“视图”或“控制器”中工作。 这意味着您无法像设计iOS应用程序那样设计CarPlay屏幕,但需要提供随后显示在相关模板中的信息...

    JAVA框架核心技术笔记

    除此之外,Struts、JSF、Play Framework等也是常见的Java Web开发框架,它们各自有独特的优点和适用场景。 在Java笔记中,可能会详细讲解如何使用这些框架,包括配置文件的设置、注解的应用、服务的注入、事务管理...

    源码笔记.rar

    为了简化Web应用的开发,Java提供了多种Web框架,如Spring MVC、Struts2和Play Framework等。这些框架提供了一套规范化的开发流程,帮助开发者快速构建功能丰富的Web应用。在图书商场源码中,可能会看到使用Spring ...

    android基础笔记

    系统库和运行库如SQLite数据库、OpenGL ES图形库、Media Framework等为上层应用提供支持;应用程序框架包括一系列API接口,让开发者能构建可重用组件;应用程序则直接与用户交互,如电话、短信、浏览器等。 二、...

    MONO FOR ANDROID学习笔记全套

    最后,笔记会指导开发者如何打包应用、签名证书、进行测试,以及如何提交应用到Google Play Store和其他第三方应用市场。此外,还会讨论应用版本管理、更新策略和用户反馈的处理。 总之,《Mono for Android学习...

    Mono for Android和MonoDroid学习笔记全套

    10. **发布与打包**:最后,笔记会指导如何生成APK文件,以及如何在Google Play或其他市场发布应用。 这套学习资料全面覆盖了从初学者到进阶开发者所需的知识,无论你是对.NET框架有深厚理解的开发者,还是初次接触...

    RolePlay_Notes:在准军事角色扮演游戏中记笔记的简单方法

    您需要在RP游戏中做笔记吗? 这通常很困难,不是吗? 好吧,不再了! :hammer: 贡献 拉请求是欢迎的。 对于重大更改,请先打开一个问题以讨论您要更改的内容。 :receipt: 特征 :passport_control: 身份识别和许可...

    wdk 驱动编程 笔记

    wdK驱动编程笔记可能包含了一些简单的驱动开发实例,例如创建一个简单的Kernel-Mode Device Driver(KMDD)或User-Mode Driver Framework(UMDF)驱动。这些实例会涵盖驱动的基本结构,如DriverEntry函数、IRP处理...

    郁金香驱动班学习笔记

    2. **驱动分类**:驱动分为内核模式驱动和用户模式驱动,例如Windows Driver Foundation(WDF)中的KMDF(Kernel-Mode Driver Framework)和UMDF(User-Mode Driver Framework)。理解它们的工作原理和应用场景是...

    关于struts1的学习笔记

    尽管Struts1已经相对老旧,但它代表了早期Java Web开发的一种模式,理解其工作原理有助于开发者更好地理解和掌握现代的MVC框架如Spring MVC或Play Framework。同时,对于维护旧项目或者了解Web开发历史也具有重要...

    《IT学习资料》-Java学习过程中笔记的配套代码.zip

    9. **framework**:这个目录可能包含了其他Java框架的示例,比如Spring全家桶的其他组件,或者是Struts、Play等其他框架,有助于拓宽学习者的视野。 10. **java-basic**:基础部分,涵盖了Java语言的基础语法、面向...

    安卓逆向学习笔记(2)

    这篇笔记主要关注的是安卓应用的逆向工程,这是安全分析、漏洞发现以及恶意软件研究等领域的重要技能。逆向工程可以帮助我们理解应用程序的工作原理,查找潜在的安全问题,或者对现有代码进行修改。 首先,让我们...

    笔记-Struts2不完美的知识点整理.pdf

    然而,尽管Struts2有很多优点,随着技术的发展,它也暴露出一些不足,如安全漏洞、性能瓶颈等,这促使开发者寻求其他替代框架,如Spring MVC和Play Framework。尽管如此,理解Struts2的基本原理和工作方式对于理解...

Global site tag (gtag.js) - Google Analytics