安装Play
从下载页面下载最新的二进制包,然后在你喜欢的地方解压它。
如果你用的是Windows,最好避免在路径中混入空格。比如c:\play就是个比c:\Documents And Settings\user\play更好的选择。
- 1
为了方便操作,你需要添加Play文件夹到你的系统路径中。这样你就不需要在play命令前面敲一大通路径名了。要想检查安装是否成功,打开一个新的命令行窗口,敲下play
;应该会出来play的基本使用帮助。
创建项目
现在Play已经安好了,是时候开始写博客应用。创建一个Play应用非常简单,仅需要play命令行工具。之后会生成Play应用的基本架构。
打开一个新的命令行并敲入:
~$ play new yabe
- 1
它会提醒输入应用的全名。输入yabe。 play new
命令创建了一个新的文件夹yabe/外加一系列文件和文件夹。其中包括下面各部分:
app/ 包括应用的核心,划分为models,controllers和views文件夹。它也可以包括其他Java的包。这是.java源代码文件所在之处。
conf/ 包括所有的应用配置文件,特别是主application.conf文件,路由定义文件和用于国际化的信息文件。
lib/ 包括所有可选的Java库,比如标准的.jar。
public/ 包括所有可以公开的资源,比如Javascript文件,样式表和图片。
test/ 包括所有的应用测试。测试可以是Java的JUnit测试或者Selenium测试。
因为Play只使用UTF-8编码,故所有的文本文件都需要使用UTF-8编码。确保你的文本编辑器已经做了相应的配置。
- 1
如果你开发过Java应用,你可能会奇怪.class
文件到哪儿去了。答案是……没有.class
文件了:Play并不使用任何class
文件;相反它直接处理Java源代码。实际上我们使用Eclipse的编译器来即时编译Java源代码
这导致了开发过程中的两点重要的改进。第一个,Play会自动监测Java源代码的改变并在运行时自动重载。第二个,当一个Java异常发生时,Play能向你展示更好的错误报告 - 带对应的源代码的哦~
事实上Play在应用的tmp/文件夹下有字节码的缓存,但只用于加速重新启动项目的过程。如果需要,你可以用play clean清空缓存。
运行程序
现在可以测试一下新建立的程序了。回到命令行窗口,在yabe/目录下输入play run命令。Play框架将载入程序,启动Web服务器并监听9000端口。
打开浏览器键入http://localhost:9000,程序显示了一个缺省的欢迎页。
现在我们来看看这个页面是怎样显示的。
程序的主入口配置在conf/routes文件里。这个文件定义了程序所有可访问的URL。打开routes文件,会看到第一个“route”:
GET / Application.index
它告诉Play,当服务器收到来自于/路径的GET请求时要调用Application.index的方法。在这个程序中,Application.index是controllers.Application.index简写,因为controllers包是隐式附加的。
在创建一个标准Java程序时,通常会定义一个入口方法,比如:
public static void main(String[] args) { ... }
Play程序则有多个入口方法,每个URL就有一个。这些方法称为action方法。定义Action方法的类称为controller。
看看什么是controller。打开yabe/app/controllers/Application.java源文件:
package controllers; import play.mvc.*; public class Application extends Controller { public static void index() { render(); } }
controller 类继承于play.mvc.Controller类,这个类提供了许多controller需要的方法,比如在index action中的render方法。
index action定义为public static void,因为controller类不需要实例化和返回值。
index action很简单,只是调用了render()方法来通知Play渲染模板。使用模板是返回HTTP响应的一个最通用的方式。
模板是在/app/views 目录下的简单文本文件。因为这里没有指定一个模板,index action会使用一个默认的模板:Application/index.html。
打开/yabe/app/views/Application/index.html:
#{extends 'main.html' /}#{set title:'Home' /} #{welcome /}
在这个模板中,只有Play tag,与JSP tag类似,#{welcome /} tag会在浏览器中生成欢迎信息。#{extends /} tag 表示这个模板继承于main.html这个模板。模板继承可用来创建复杂的web也并重用公共部分。
打开/yabe/app/views/main.html模板:
<!DOCTYPE html><html> <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 /}tag表示index.html插入内容的地方。
试着编辑controller类来看看Play怎么自动加载它。打开yabe/app/controllers/Application.java,删除render()后的分号,让它出错,就像这样:
public static void index() { render()}
然后到浏览器刷新这个页面,Play会检测源文件变更并试着加载程序controller,但是因为controller有错误,所以在浏览器中显示一个编译错误。
把刚才的错误修改正确,在编辑模板,打开yabe/app/views/Application/index.html覆盖欢迎消息。
#{extends 'main.html' /}#{set title:'Home' /} <h1>A blog will be here</h1>
在浏览器刷新这个页面。
配置数据库
在开始写代码之前还要多做一件事。作为博客引擎,我们需要一个数据库。为了便于与开发,Play内置了一个叫做H2的数据库。当然如果需要,我们也可以切换到一个更加健壮的数据库。你可以选择设置数据时存储在内存中,还是在文件系统中(这样即使你重新启动,你的数据也会保留)。
在一开始,我们将对应用模型做许多测试和改动。因此,最好选择存储在内存中,这样每次启动,都不会跟旧数据有任何牵连。
打开yabe/app/application.conf
,解除这一行的注释:
db=em
- 1
正如你在注释中看到的一样,你可以冗余的配置任何JDBC数据库,甚至配置链接池。
现在回到浏览器并刷新欢迎页面。Play将自动启动数据库。检查下面一行是否出现在应用日志中:
INFO ~ Connected to jdbc:h2:mem:play
- 1
补充
如果运行play run
命令出现下面提示:
解决办法:
找到play\framework\build.bat
修改
java -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M %DEBUG_PARAM% %JAVA_OPTS% -Dfile.encoding=UTF-8 -Dinput.encoding=Cp1252 -Dplay.version="%PLAY_VERSION%" -Dsbt.ivy.home="%~dp0..\repository" -Dplay.home="%~dp0." -Dsbt.boot.properties="%fp%sbt/sbt.boot.properties" %PLAY_OPTS% -jar "%~dp0sbt\sbt-launch.jar" %*
- 1
为
java -XX:+CMSClassUnloadingEnabled %DEBUG_PARAM% -Dfile.encoding=UTF8 -Dplay.version="%PLAY_VERSION%" -Dsbt.ivy.home="%~dp0..\repository" -Dplay.home="%~dp0." -Dsbt.boot.properties="file:///%p%sbt/sbt.boot.properties" -jar "%~dp0sbt\sbt-launch.jar" %*
将play项目导入myeclipse
前提:已安装play并配置了环境变量
第一步 :打开你的项目将下面几项删除(没有就跳过)
第二步:在cmd中来到项目的路径下(cd,不是来到项目里,而是项目名前一级目录),然后输入play eclipsify +项目名
第三步:导入