谨以此系列文章进行学习、记录、分享。
注:参考了play官方文档 https://www.playframework.com/documentation/1.2.x/home
前言
与play的第一次邂逅,还是在来到这个公司的时候,这个项目应用的就是play项目,对于之前一直使用传统框架(例如:spring springMVC mybaits struts hibernate)的我,对这个框架还是满新奇的!
play framework说他是一个框架 但是我认为他是一个基于JVM的可玩性很高的,开发平台,在这里你可以省去繁琐的关系抽象,省去繁杂的配置文件,更神奇的是,他解决了java的往常平台的一大问题重复和繁琐的编译包部署周期,可以直接线上改编代码,他更侧重于生产的速度,让你有更多的时间去想你要干什么,而不用为以后准备各种关系的抽象,和去重复重启项目。
Play框架是由Web开发人员为Web开发人员编写的,这是一个非常规的定位,将Web的原则和约定放在第一位,Java是第二个。具体来说,这意味着Play框架更符合W3C的万维网体系结构,而不是Java Enterprise Edition(Java EE)约定。
都说兴趣才是最后的学习方式,下边我们一起paly一下。
搭建及简单应用(配合eclipse)
既然要play,首先我们要简单的搭建一下play,并简单运行它,其实play的搭建和运行非常的简单,只需要下载压缩包(这里是1.2.7版本),解压,并把路径配置到环境变量中即可,配置之后,我们可以在黑窗口(cmd)中 输入play命令,看看有没有效果,有的话 就是配置成功。
既然配置成功了,那么我们就先建一个项目玩一下,首先我们进入黑窗口,进入到你想建项目的目录,输入命令play new <项目名>,Play会在当前路径下创建项目。
那么既然要配合eclipse使用,我们就要把这个项目转换一下,输入play eclipsify <项目名>命令进行转换,之后再eclipse中进行导入项目即可。
导入之后会在项目中产生一个eclipse文件夹,并在里边生成三个文件,我们可以在这三个文件上run as 和debug as ,
直接运行Debug As 执行helloworld会报错,需要:打开helloworld.launch,找到
之后访问http://localhost:9000/ 就可以到项目,到此项目搭建完成。
目录结构
项目搭建而完成了,那么我们应该了解一下他的目录结构了。
web_app 根目录
| sbt SBT Unix 批处理脚本用于启动sbt-launch.jar
| sbt.bat SBT Windows 批处理脚本用于启动sbt-launch.jar
| sbt-launch.jar SBT 启动的Java可执行类库
|
+---app Play Web 应用全部代码所在目录
| |
| +---models 模型代码所在目录
| | Message.scala 留言板例程模型代码
| |
| +---controllers 控制器代码所在目录
| | Application.scala 默认控制器代码
| |
| \---views 视图(Play Scala HTML模板) 代码所在目录
| main.scala.html 主模板文件
| index.scala.html 首页模板文件
| msgboard.scala.html 留言板例程模板文件
|
+---conf Play 配置文件所在目录
| application.conf 应用配置文件
| routes 应用入口路由文件,所有的HTTP请求将通过该文件转发到指定的Scala对象处理
|
+---logs 日志目录
| application.log 应用运行日志
|
+---project SBT工程文件
| build.properties 保存所需的SBT版本信息,通常无需更改
| Build.scala 主要的工程配置文件
| plugins.sbt 告知SBT本工程所需要的插件以及下载位置
|
+---public 存储一切直接发送给浏览器的资源文件
| |
| +---images 图像文件,如JPEG、PNG、GIF等
| |
| +---javascripts JavaScript脚本文件
| |
| \---stylesheets CSS样式表文件
|
\---target 存放编译后的可执行代码和编译时的中间代码
请求的生命周期
其实了解一个框架,首先就应该了解他的请求是怎么传递的,他的传递过程是怎么样的,这样你才会对这个框架的走向有一个大体的概念,在了解请求的生命周期前我们先来看一下mvc模型,play是遵循MVC模型的。
Play的MVC模型
- 模型层:他对数据进行定义和处理,来返回我们所需要的数据。大多数应用程序使用持久存储机制(如数据库)来存储数据。MVC没有特别提及数据访问层,因为它被理解为在模型下面或由模型封装。
- 视图层:其实他就是通常的用户界面的形式。为了不同的目的,单个模型可以存在多个视图。在Web应用程序中,视图通常以HTML,XML或JSON等“Web格式”呈现。然而,在某些情况下,视图可以以二进制形式表示,例如动态渲染的图表。
- 控制器:它的作用是响应事件(通常为用户操作),并对其进行处理,并且还可以调用模型上的数据。在Web应用程序中,事件通常是HTTP请求:控制器侦听HTTP请求,从“事件”中提取相关数据,例如查询字符串参数,请求标头...并对底层模型对象应用操作。
- 在Play应用程序中,这三个层在app目录中定义,每个层都在一个单独的Java包中。
-
请求生命周期
· 框架接收到HTTP请求。
· 路由器组件尝试找到能够接受此请求的最具体路由。然后调用相应的动作方法。
· 执行应用程序代码。
· 如果需要生成复杂视图,则会呈现模板文件。
· 操作方法的结果(HTTP响应代码,内容)然后被写为HTTP响应。