`
asuo
  • 浏览: 4042 次
  • 性别: 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

如果你习惯使用功能齐全的像EclipseNetBeans你当然可以使用它的Java IDEPlay!开发,您可以有一个像TextmateEmacs或其他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代码变更后,只要在浏览器中刷新页面看到修改。现在我们将开始代码博客应用。您可以继续使用文本编辑器或打开一个像EclipseNetBeansJava 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.*;
 
@Entity
public 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);
    }
 
}

 

 

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

 

 

@Test
public 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();
}

现在进行测试

@Test
public 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.*;
 
@Entity
public 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 楼 850075610 2013-07-01  
这个是不是没写完啊?没看到翻页的选项啊……

相关推荐

    playframework 框架学习之路 1

    在“Playframework框架学习之路 1”中,我们可能要探讨这个框架的基础概念、安装过程以及如何创建一个简单的应用。下面将详细介绍Play Framework的关键知识点。 1. **快速开发**: Play Framework以其快速开发能力而...

    playframework做的demo

    在这个“playframework做的demo”项目中,我们可以深入探讨Play Framework的一些核心特性,以及如何利用它来构建一个博客系统。 1. **路由(Routes)**:在Play Framework中,路由文件定义了URL模式到控制器方法的...

    playframework部分介绍及部分功能简介,小实例一个

    1. **模块化结构:** Play Framework 的设计原则之一是模块化,这使得开发者可以轻松地添加或移除功能,根据项目需求定制框架。它包含了诸如模板引擎、JSON处理、数据库集成等模块。 2. **异步编程模型:** 与传统...

    Learning Play!Framework 2

    3. **项目初始化**:使用 `play new` 命令来创建一个新的 Play! 项目。 4. **配置文件**:通过编辑 `conf/application.conf` 文件可以设置项目的配置参数,如数据库连接等。 #### 四、核心概念与组件 1. **路由**...

    OMToolkit介绍(3) :Web Framework 实现

    在本篇博客“OMToolkit介绍(3):Web Framework 实现”中,作者将深入探讨该工具如何帮助开发者更高效地实现Web框架的功能。 在Web开发中,框架的选择和使用往往对项目的进度和维护性起到关键作用。OMToolkit旨在为...

    java开源博客学习好帮手 数据库都有

    5. Web框架:为了快速开发Web应用,Java社区有多种成熟的Web框架,如Spring Boot、Struts、Play Framework等。这些框架可以帮助开发者更高效地构建后端逻辑,处理HTTP请求,以及与数据库交互。 6. 前端技术:一个...

    sfx:在play scala中编写的Portfolio Manager应用程序

    【标签】:“JavaScript”:尽管项目主要使用Scala和Play Framework,但JavaScript可能在客户端脚本中被用来增强用户体验,例如实现动态交互效果、表单验证或者与服务器端进行异步通信(Ajax)。 【压缩包子文件的...

    castillo:一个 Play ScalaJS React 应用程序来管理课程组合和研讨会活动

    这个项目利用了现代Web开发的三大技术栈:Play Framework、ScalaJS和ReactJS,为用户提供了一个高效且用户友好的平台。在深入探讨这些技术之前,我们先简要了解一下它们的基本概念。 **Play Framework** Play ...

    moko365_android-framework-design-porting

    **标题**:“moko365_android-framework-design-porting” - 这个标题表明了文档的主要内容是关于Android框架的设计及其移植到新平台的过程。 **描述**:“jollen的培训教程。如何porting android的一个入门培训。...

    java eclipse gef

    标题 "Java Eclipse GEF" 指的是使用Java语言在Eclipse环境中开发图形编辑框架(Graphical Editing Framework...通过深入理解这些知识点,并结合实际项目经验,开发者可以创建出功能强大、用户体验良好的图形编辑工具。

    due-soldi

    这个项目可能是一个开源或私有的软件,用于创建、管理和发布个人博客内容。作为一个专业的 IT 大师,我们可以深入探讨 Scala 语言以及如何构建这样的博客系统。 Scala 是一种多范式编程语言,它融合了面向对象和...

    Strues2的全部jar包

    Struts2是一个基于MVC(Model...不过,随着技术的发展,Struts2的使用已经逐渐减少,更多现代的Web框架如Spring Boot和Play Framework等正在成为主流。但了解Struts2对于理解MVC框架的工作原理和历史发展仍然很有价值。

    一步一步学习Revel Web开源框架.pdf

    1. **创建项目**:使用命令`revel new myapp`创建一个新的Revel项目。 2. **运行项目**:使用`revel run myapp`启动项目,然后在浏览器中访问`http://localhost:9000`查看效果。 #### 四、Revel的核心组件 1. **...

    C# API文档资料

    在学习和使用C# API时,除了官方文档,还可以参考社区资源,如Stack Overflow、GitHub上的开源项目、技术博客等,这些地方往往有丰富的实战经验和解决方案。同时,持续关注.NET Framework或.NET Core的新版本更新,...

    Jmaat:我的个人网站

    1. **Scala / Play 2.3**:Play Framework是一个开源的Web应用框架,基于Java和Scala。这里提到的是Play的2.3版本,这是一个稳定且广泛使用的版本,支持MVC(模型-视图-控制器)架构模式,便于开发RESTful API和现代...

    JAVA 框

    1. **Web框架**:如Spring MVC、Struts、Play Framework和JSF(JavaServer Faces),它们主要用于构建动态网站应用,提供请求处理、视图渲染和业务逻辑管理等功能。 2. **企业级应用框架**:Spring框架是其中的佼佼...

    C#开发Android应用实战-使用Mono for Android和.NET C#(PDF中文扫描版下载,吾乐吧软件站分享)

    这个框架的核心是.NET Micro Framework和Mono运行时,它将.NET Framework的关键部分移植到了Android平台,使得开发者可以充分利用.NET的强大功能,同时享受到跨平台开发的便利。 本书的核心内容可能包括以下几个...

    [VB.NET源码]循环播放avi文件

    .NET Framework自带了Windows Media Player控件,可以方便地在VB.NET程序中嵌入,并实现媒体播放。通过控件的属性、方法和事件,可以实现avi文件的播放、暂停、停止等功能。 4. **循环播放**: 循环播放是指视频...

    自己编写的webFrame,是不是与webwork有点像呢?

    通过分析作者的Web框架,可以对比WebWork或其他知名框架(如Spring MVC、Struts、Play Framework等),理解它们的设计理念和实现差异,这对于提升自己的Web开发技能非常有帮助。同时,分析源码也是深入学习软件工程...

    Android服务器端交互服务器端源码

    这通常涉及到后端语言如Java(Spring Boot、Play Framework等)、Python(Django、Flask等)、Node.js(Express.js等)的使用,以及数据库操作(如MySQL、MongoDB、SQLite等)。 在开发过程中,安全问题不容忽视,...

Global site tag (gtag.js) - Google Analytics