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.*;
@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 {
分享到:
相关推荐
在“Playframework框架学习之路 1”中,我们可能要探讨这个框架的基础概念、安装过程以及如何创建一个简单的应用。下面将详细介绍Play Framework的关键知识点。 1. **快速开发**: Play Framework以其快速开发能力而...
在这个“playframework做的demo”项目中,我们可以深入探讨Play Framework的一些核心特性,以及如何利用它来构建一个博客系统。 1. **路由(Routes)**:在Play Framework中,路由文件定义了URL模式到控制器方法的...
1. **模块化结构:** Play Framework 的设计原则之一是模块化,这使得开发者可以轻松地添加或移除功能,根据项目需求定制框架。它包含了诸如模板引擎、JSON处理、数据库集成等模块。 2. **异步编程模型:** 与传统...
3. **项目初始化**:使用 `play new` 命令来创建一个新的 Play! 项目。 4. **配置文件**:通过编辑 `conf/application.conf` 文件可以设置项目的配置参数,如数据库连接等。 #### 四、核心概念与组件 1. **路由**...
在本篇博客“OMToolkit介绍(3):Web Framework 实现”中,作者将深入探讨该工具如何帮助开发者更高效地实现Web框架的功能。 在Web开发中,框架的选择和使用往往对项目的进度和维护性起到关键作用。OMToolkit旨在为...
5. Web框架:为了快速开发Web应用,Java社区有多种成熟的Web框架,如Spring Boot、Struts、Play Framework等。这些框架可以帮助开发者更高效地构建后端逻辑,处理HTTP请求,以及与数据库交互。 6. 前端技术:一个...
【标签】:“JavaScript”:尽管项目主要使用Scala和Play Framework,但JavaScript可能在客户端脚本中被用来增强用户体验,例如实现动态交互效果、表单验证或者与服务器端进行异步通信(Ajax)。 【压缩包子文件的...
这个项目利用了现代Web开发的三大技术栈:Play Framework、ScalaJS和ReactJS,为用户提供了一个高效且用户友好的平台。在深入探讨这些技术之前,我们先简要了解一下它们的基本概念。 **Play Framework** Play ...
**标题**:“moko365_android-framework-design-porting” - 这个标题表明了文档的主要内容是关于Android框架的设计及其移植到新平台的过程。 **描述**:“jollen的培训教程。如何porting android的一个入门培训。...
标题 "Java Eclipse GEF" 指的是使用Java语言在Eclipse环境中开发图形编辑框架(Graphical Editing Framework...通过深入理解这些知识点,并结合实际项目经验,开发者可以创建出功能强大、用户体验良好的图形编辑工具。
这个项目可能是一个开源或私有的软件,用于创建、管理和发布个人博客内容。作为一个专业的 IT 大师,我们可以深入探讨 Scala 语言以及如何构建这样的博客系统。 Scala 是一种多范式编程语言,它融合了面向对象和...
Struts2是一个基于MVC(Model...不过,随着技术的发展,Struts2的使用已经逐渐减少,更多现代的Web框架如Spring Boot和Play Framework等正在成为主流。但了解Struts2对于理解MVC框架的工作原理和历史发展仍然很有价值。
1. **创建项目**:使用命令`revel new myapp`创建一个新的Revel项目。 2. **运行项目**:使用`revel run myapp`启动项目,然后在浏览器中访问`http://localhost:9000`查看效果。 #### 四、Revel的核心组件 1. **...
在学习和使用C# API时,除了官方文档,还可以参考社区资源,如Stack Overflow、GitHub上的开源项目、技术博客等,这些地方往往有丰富的实战经验和解决方案。同时,持续关注.NET Framework或.NET Core的新版本更新,...
1. **Scala / Play 2.3**:Play Framework是一个开源的Web应用框架,基于Java和Scala。这里提到的是Play的2.3版本,这是一个稳定且广泛使用的版本,支持MVC(模型-视图-控制器)架构模式,便于开发RESTful API和现代...
1. **Web框架**:如Spring MVC、Struts、Play Framework和JSF(JavaServer Faces),它们主要用于构建动态网站应用,提供请求处理、视图渲染和业务逻辑管理等功能。 2. **企业级应用框架**:Spring框架是其中的佼佼...
这个框架的核心是.NET Micro Framework和Mono运行时,它将.NET Framework的关键部分移植到了Android平台,使得开发者可以充分利用.NET的强大功能,同时享受到跨平台开发的便利。 本书的核心内容可能包括以下几个...
.NET Framework自带了Windows Media Player控件,可以方便地在VB.NET程序中嵌入,并实现媒体播放。通过控件的属性、方法和事件,可以实现avi文件的播放、暂停、停止等功能。 4. **循环播放**: 循环播放是指视频...
通过分析作者的Web框架,可以对比WebWork或其他知名框架(如Spring MVC、Struts、Play Framework等),理解它们的设计理念和实现差异,这对于提升自己的Web开发技能非常有帮助。同时,分析源码也是深入学习软件工程...
这通常涉及到后端语言如Java(Spring Boot、Play Framework等)、Python(Django、Flask等)、Node.js(Express.js等)的使用,以及数据库操作(如MySQL、MongoDB、SQLite等)。 在开发过程中,安全问题不容忽视,...