前言
通过分析官方使用Play创建的一个例子:To-Do List 来说明使用play创建web项目的一个基本结构和流程
首先要说明的是,整个demo是基于Play 2.1.0的,其他版本的play可能会有错误,所以在跟着官方demo走的时候,请保证版本一致性,我一开始是在2.0.4的play下创建整个项目的,在中间就有一些方法是不兼容的,需要2.1.0的play才可以使用,所以只能下最新的play并且重新新建项目。
新建项目、绑定IDE、运行Play 这几个步骤,我在这里就不重复了,可以看博客:Play Framework配置
在eclipse中打开项目,可以看到项目的基本组成如下图所示
在这里要说的是,在使用eclipse或者是Intelij或者其他IDE进行编辑过程中,可能会提示有错误,如果不是拼写错误,那么可以先忽略,因为在运行的时候,play会帮你编译,有错误的话,可以直接在浏览器中看到。而且IDE中指出的错误,很多时候都是错的,因为IDE中并没有play的全部资料,所以很多提示都是基于IDE现在拥有的sdk进行判断的。所以项目中是否存在错误,由编译时,play帮你查实最准的(个人觉得是这样)。
上面看到的是整个项目的结构,现在对我来说最重要的就是app和conf这两个文件夹。app文件夹是放java代码的地方,基于MVC规则。conf是配置项目的地方,路由以及数据库连接的配置等,后面会一一说到。
概述
# Home page
GET / controllers.Application.index()
这个语句告诉play,当服务器收到一个对根目录的GET请求时,必须调用controllers.Application.index()方法。
其中Application继承于controller,在Application中有一个共有的静态方法index(),这个方法返回的是一个Result类型的对象。
这里要理清 controller、Action、Result这几个概念和这几个概念之间的关系。详细的说明可以看文档:Actions,Controllers and Results
简单来说,当Play程序接收到一个请求时,一般都是交由Action进行处理,Action就是一个java的方法,处理来自客户端的请求并返回结果给客户端。
可以看到返回的是Result值,Result代表的是回送给客户端的HTTP响应,就像上面的index()方法 返回的是ok,里面包含的是一个200 OK状态码和一个带有文本的响应主体。
而controller就是包含多个Action的类。
要注意的是重定向也是Result的一种哦,因为重定向也是由服务器发送给客户端的一种响应报文,在主体中包含了新的URL,客户端使用新的URL去发请求。
看回上面的代码,这个Action返回的是一个200 OK响应和一个HTML文档响应主体。HTML的内容是由模板提供的,Play模板会编译成标准的java方法,使用的就是这个方法
views.html.index.render(String message). 而模板的定义 是定义在app/views/index.scala.html中,下面是预先生成的模板
第一行声明了进入函数时候的参数,这里声明的是String类型的参数,所以在前面的index.render方法中,传的就是一个String。
模板的内容是由HTML和Scala语句混合的,Scala语句是由@符号开始的。
—————————————————————————————————————————————————————————————————————————————
下面开始就是To-Do List的开发啦
Preparing the application
Task Model
Application template
The tsak form
Rendering the first page
handing the form submission
Persist the tasks in a database
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
我们就可以使用 in memory database H2.我们将使用EBean(Play的默认ORM)去访问数据库,
ebean.default="models.*"
通过这个,我们创建了一个Ebean server 连接到了默认的数据源,管理models包中所有的entity