Play! Framework Web开发教程.docx

上传人:牧羊曲112 文档编号:3163710 上传时间:2023-03-11 格式:DOCX 页数:64 大小:62.07KB
返回 下载 相关 举报
Play! Framework Web开发教程.docx_第1页
第1页 / 共64页
Play! Framework Web开发教程.docx_第2页
第2页 / 共64页
Play! Framework Web开发教程.docx_第3页
第3页 / 共64页
Play! Framework Web开发教程.docx_第4页
第4页 / 共64页
Play! Framework Web开发教程.docx_第5页
第5页 / 共64页
亲,该文档总共64页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Play! Framework Web开发教程.docx》由会员分享,可在线阅读,更多相关《Play! Framework Web开发教程.docx(64页珍藏版)》请在三一办公上搜索。

1、Play! Framework Web开发教程Play Framework Web开发教程(1):概述及环境安装 Play Framework 基于 Akka (并行应用开发包,这个开发包的一个显著特定是基于Actor模型,并行运算是这个某些的基本特点,可以避免由于一般多线程开发不正确使用同步或互锁造成的程序死锁等问题)。采用MVC模型,缺省支持REST和JSON,支持编译CoffeeScript和LESS代码。 支持数据库编程,并且可以和 Slick 。开发可以使用Eclipse ,Intellij IDEA或是 Sbt (Typesafe 自带的编译工具)。 本教程采用Eclipse 开发

2、环境配合sbt 工具开发。 下面简单介绍一下Play Framework开发环境的搭建,。 1 首先需要安装 Java SDK ,建议安装最新版Java SDK ,64位系统安装64位Java SDK。 2 安装Scala编译工具 sbt . 3 安装 Scala开发环境 4 安装 Scala IDE for Eclipse 5 下载解压 Play Framework ,目前版本为2.1.3 安装好之后,注意把这些命令行所在的目录添加的系统环境变量PATH中,然后到到命令行中执行 play new myFirstPlayApp 在提示选择语言选择 Scala 然后进入 新创建myFirstPl

3、ayApp ,运行 play run ,如果编译成功,将显示下面类似的消息,表示新创建的Web应用运行在端口 9000 打开浏览器 输入地址http:/localhost:9000,如果显示如下页面,将表示开发环境已经就绪,后面文章将介绍这个例子。 相信Scala 语言会逐渐普及开来,Play Framework 也会得到广泛的应用,目前使用Play Framework的一些著名网站有 Linked In 等 Play Framework Web开发教程(2): Play 应用目录解析 Play Framework Web开发教程(1):概述及环境安装 创建了一个新的应用,它的目录结构如下:

4、Play应用标准的目录结构 app 应用的源码 assets 可以编译的Asset源码 stylesheets 通常为Less代码 javascripts 通常为CoffeeScipts代码 controllers 应用的controllers类定义 models 应用的Model类定义 views UI模板 conf 配置文件 application.conf 主应用配置文件 routes 路由定义public 公开的 stylesheets CSS javascripts Javascript images project sbt build.properties sbt 项目属性定义 B

5、uild.scala 应用编译脚本定义 plugins.sbt sbtlib 应用使用的库文件 插件定义 sbt管理的其它库) class文件 (模板等, .) (less, .) src_managed 生成的源码(模板, .) test 单元测试或功能测试代码目录 app目录 app目录包含了所有可运行代码或资源:Scala代码,UI模板和Less代码,CoffeeScript代码, app通常包含下面三个子目录:对于与MVC的三个部分: app/controllers app/models app/views 当然你可以添加你自己的目录,比如app/utils。此外还有一个可选的标准目录

6、名assets app/assets ,用来存放可供编译的LESS或CoffeeScript代码 public目录 public目录存放了可以供网页直接访问的资源,比如CSS,图像,JavaScript文件。 conf目录 该目录存放应用的配置文件,主要有下面两种配置: application.conf 应用主配置文件,定义了应用的一些配置参数 routes ,路由配置文件 lib目录 主要用来添加一些第三方库文件,这些库主要指一些没有通过sbt或编译脚本定义的库文件。直接把jar文件添加到这个目录下,编译时会直接添加到应用的classpath. project目录 定义sbt编译项目的定义,

7、包含下面三个文件: plugins.sbt 定义项目使用的插件定义 Build.scala 定义项目编译脚本. build.properties 指定编译sbt的版本等. target目录 包含了编译后生成的一下文件。 如果你使用GIT做为版本管理工具,下面为典型的 .gitingore 文件: logs project/project project/target target tmp dist .cache Play Framework Web开发教程(3): 使用Play Console 即使你使用IntelliJ IDEA或是Eclipse IDE来开发Play应用,了解Play Co

8、nsole的使用还是非常有用的,Play Console 为一基于sbt的命令行工具,可以用来管理Play应用的开发生命周期。 启动Play Console 使用Play Console前,注意把Play所在目录添加到系统目录中,这样,启动Play Console 非常简单,只需在Play应用所在目录在命令行输入 “play” play 获得Play 命令帮助 你可以输入help play 获得关于Play命令使用的基本方法和命令: 常见的命令如下: play Enter the play console help Displays this help message or prints de

9、tailed help on requested commands (run help command). about Displays basic information about sbt and the build. tasks Lists the tasks defined for the current project. settings Lists the settings defined for the current project. reload (Re)loads the project in the current directory projects Lists the

10、 names of available projects or temporarily adds/removes extra builds to the sessio. project Displays the current project or changes to the provided project. set Evaluates a Setting and applies it to the current project. session Manipulates session settings. For details, run help session. inspect Pr

11、ints the value for key, the defining scope, delegates, related definitions, and dependenies. ; (; )* Runs the provided semicolon-separated commands. Executes the specified command whenever source files change. last Displays output from a previous command or the output from a specific task. last-grep

12、 Shows lines from the last output for key that match pattern. exit Terminates the build. show Displays the result of evaluating the setting or task associated with key. 在开发模式下启动Play应用 使用run 命令,可以开发模式下启动Play应用,此时一些调整信息可以在屏幕上显示出来,缺省情况下,Play Web应用使用端口9000,如果你修改代码,Play Console会检测到代码变化,在下个请求时会自动重新编译代码或资源

13、,如要必要,还可以重新启动Play应用。如果出现编译错误,那么在浏览器中会显示错误信息: 如果要停止Web服务,可以按Ctrl+D ,此外还可以通过任务管理器,杀死对应的Java进程来停止Web服务。 编译 Compile 命令可以编译Play 源码或是资源,如果出现编译错误,屏幕上显示对应的错误提示: 调试命令 如果你使用Eclipse IDE,你可以使用Eclipse来调试代码,此时需要使用 play debug 启动一个JPDA调试端口,缺省调试端口为 9999,此后可以通过配置Eclipse远程调试指向这个端口,就可以使用Eclipse和其它Java 调试器来调试代码,如果使用Inte

14、lliJ IDEA IDE可以自动完成这些配置。 强制清理编译结果 如果你觉得编译的结果出现意想不到的机会,那么你的sbt的缓存可能出现问题,此时可以通过 clean-all 命令强制清除之前的编译结果,然后使用compile 重新编译生成新的编译内容。 此外play Console 基于 sbt 工具,因此你也可以使用sbt 的一些功能 ,比如 compile ,run, test等 Play Framework Web开发教程(4): 选用你喜欢的开发IDE 开发Play Web应用非常方便,你可以不使用任何IDE,这是因为Play可以自动编译更新修改过的源码。因此你可以使用简单的文本编辑

15、器来来开发Play应用。 然而使用Java或Scala 集成开发环境可以提供支持代码自动完成,及时编译,语法检查及调试等功能可以极大的提高开发效率,下面就介绍两种常见的Play 开发IDE。 一是免费的Eclipse IDE,另外一个为 IntelliJ IDEA (个人版$199,倒也物有所值) Eclipse 首先使用play 生成Eclipse项目文件,这可以通过在Play项目目录下运行: play eclipse 或 eclipse with-source=true (如果你需要库文件的源码,这个需要的时间可能长些) 通常情况下使用eclipse 就可以满足要求,如果你有兴趣查看部分库

16、的代码实现,可以添加with-source=true 选项。 然后使用Eclipse Import功能将该Play下面添加到Eclipse中。 如果项目引入成功,你就可以使用Eclipse来编辑/开发Play Web应用 使用Eclipse调试Play项目的方法如下: 首先在命令行进入Play项目目录,执行 play debug run 然后使用Eclipse创建一个远程调试的配置,缺省的调试端口为9999 然后就可以设置断点,和调试一般的Java应用没有什么不同: 这里可以看出,使用Eclipse开发Play Web应用,通常还需要Play Console的配合,但Eclipse 还是一个非

17、常优秀的IDE,完全可以胜任Scala,Play Framework应用的开发。 如果你希望一个完全不需要使用Play Console的开发IDE, IntelliJ IDEA 是一个很好的选择。 IDEA 同样,在Play项目目录下使用 idea 或 idea with-sources=yes(如果你需要库文件的源码) 这个命令创建idea项目文件,此后可以引入到IntelliJ IDEA中,基本上就无需使用Play Console, IntelliJ IDEA 的scala, play 插件可以帮你完成由Play Console完成的工作。 实际开发中你可以根据个人喜好选择合适的IDE,甚

18、至不使用任何IDE来开发Play应用。 Play framework 2.0入门教程 Play framework 2.0环境搭建 环境要求 安装Play framwork 2.0之前,应该确保您的电脑已经安装了java和scala,在终端分别运行命令 plainview plaincopy 1 2 java -version scala -version 如果显示相应的版本,则说明电脑java或scala环境正常,否则,请先安装java或scala,其中java版本至少在1.6以上。 下载文件 目前最稳定的版本为2.0.4,资料也最多,建议下载此版本 点击下载:play-2.0.4.zip

19、其它版本:http:/www.playframework.org/download 下载完成后将压缩包解压缩到有读、写、访问权限的路径下,不建议放在诸如“/opt”,“/usr/local/”之类的路径下,最好放在“文档”,“下载”等“/home/用户名/.”路径下 在PATH添加play路径 plainview plaincopy 3 export PATH=$PATH:这里是你的play路径 添加路径之后,你就可以在任何路径下执行play命令了。 来现在试一下。在终端输入 plainview plaincopy 4 play help 如果出现上面的画面,恭喜,play环境搭建完成 如果没

20、有出现呢,可以在终端下输入 plainview plaincopy 5 $PATH 看一下输出得路径中有没有包含play的路径,如果没有或者路径不完全,那么你可以输入如下命令编辑一下PATH plainview plaincopy 6 sudo nano /etc/environment 改正就可以啦,注意nano是一个古老的文本编辑器,如果用不习惯可以nano替换成gedit 第一个play应用todolist 新建play应用 在终端相应的文件夹下面输入 plainview plaincopy 7 play new todolist 首先会提示你输入工程的名字,一般默认就可以了,然后会有1

21、、2、3三个选项,输入1,回车,新建一个scala版的play工程 这时,play会生成一个todolist文件夹,打开它,里面还有好多文件夹,让我一一给你介绍一下: _ app/ 你编写的程序文件大部分放在这里,里面还有controllers、views、models,也就是传说得MVC体系 / | conf/ play程序的配置文件,主要就是application.conf、routes以及国际化message文件 | | project/ play的构建文件,play是sbt构建的,大部分情况默认的配置就行了 | | public/ 一些静态资源,比如说css文件、js文件、图片文件 |

22、 _ test/ 顾名思义,测试文件,据说是Specs2规格的,Specs2!?你听过吗? 运行你的Play应用 首先进入到你的play应用文件夹里,这里是todolist,然后启动play,运行run命令,没错,run就是让你刚刚建造得play应用跑起来 plainview plaincopy 8 9 cd todolist play 10 run 运气好的话,效果如下图所示,运气不好的话欢迎把图贴出来让大家开心开心 没错,现在在浏览器里输入http:/localhost:9000,直接上图 Play framework 2.0入门教程 上一节我们用搭建了play的开发环境,并构建了一个pl

23、ay应用,这一节我们主要是来看一看这个应用是怎么工作的,并尝试着对这个应用简单的进行改动 Play是怎么工作的 应用的主要入口是conf/routes文件,如果我们打开这个文件,会发现是相应的URL和一串英文的映射,就像下面这样 GET / controllers.Application.index 他的意思是访问http:/localhost:9000/的时候,转到controller.Application.index处理,即用app/controller/路径下的Application.scala文件里面的index函数处理,打开如下 package controllers import

24、 play.api._ import play.api.mvc._ object Application extends Controller def index = Action Ok(views.html.index(Your new application is ready.) 那么那个index函数呢,里面的OK意思是返回200OK,然后定位到/app/views/index.scala.html这个文件,好吧,我们在打开index.scala看看, (message: String) main(Welcome to Play 2.0) play20.welcome(message)

25、第一行传进来一个参数message,也就是Apllication.scala的index里面的“Your new application in ready.” 然后下面混合了HTML语言和scala语言,所有以开头的都是scala文件,上面主要是调用了main.scala.html里面的内容。 现在我们在做一些改动 我们把/app/controller/Application.scala里面的index函数改成下面的样子, def index = Action Ok(Hello world) 访问一下我们的http:/localhost:9000/,原来返回的是简单的Hello world这几

26、个字 这个框架,自带服务器,自动部署,有点强大,如果之前用过java框架的,福音啊 现在我们故意给他写错,看看他的报错方式,吧index函数少写一个双引号,如下面所示 def index = Action Ok(Hello world) 刷新一下浏览器 报错界面还不错吧。 Play framework 2.0入门教程 上一节我们用搭建了play的开发环境,并构建了一个play应用,这一节我们主要是来看一看这个应用是怎么工作的,并尝试着对这个应用简单的进行改动 Play是怎么工作的 应用的主要入口是conf/routes文件,如果我们打开这个文件,会发现是相应的URL和一串英文的映射,就像下面这

27、样 GET / controllers.Application.index 他的意思是访问http:/localhost:9000/的时候,转到controller.Application.index处理,即用app/controller/路径下的Application.scala文件里面的index函数处理,打开如下 package controllers import play.api._ import play.api.mvc._ object Application extends Controller def index = Action Ok(views.html.index(Yo

28、ur new application is ready.) 那么那个index函数呢,里面的OK意思是返回200OK,然后定位到/app/views/index.scala.html这个文件,好吧,我们在打开index.scala看看, (message: String) main(Welcome to Play 2.0) play20.welcome(message) 第一行传进来一个参数message,也就是Apllication.scala的index里面的“Your new application in ready.” 然后下面混合了HTML语言和scala语言,所有以开头的都是sca

29、la文件,上面主要是调用了main.scala.html里面的内容。 现在我们在做一些改动 我们把/app/controller/Application.scala里面的index函数改成下面的样子, def index = Action Ok(Hello world) 访问一下我们的http:/localhost:9000/,原来返回的是简单的Hello world这几个字 这个框架,自带服务器,自动部署,有点强大,如果之前用过java框架的,福音啊 现在我们故意给他写错,看看他的报错方式,吧index函数少写一个双引号,如下面所示 def index = Action Ok(Hello w

30、orld) 刷新一下浏览器 报错界面还不错吧。 上一节我们了解了play的工作原理,并简单的对工程做了改动,现在我们来制作一个简单的留言板程序。 简单说一下,我们这个留言板有三个功能,显示留言、发表留言、删除留言。 修改routes路径映射文件 让我们从 /conf/routes 开始 # Home page GET / controllers.Application.index # Message GET /message controllers.Application.messages POST /message controllers.Application.newMessage POS

31、T /message/:id/delete controllers.Application.deleteMessge(id: Long) 我们在原来的基础上又增加了三个URL,显示留言http:/localhost:9000/messages,添加留言和删除留言,这两个都是form表单的action地址。 这时候我们刷新一下,会有如下报错,提示你应该在 /app/conrollers/Application.scala 里定义新函数了 好,说干就干 在Application里定义增删查 object Application extends Controller def index = Acti

32、on Ok(Hello world) def messages = TODO def newMessage = TODO def deleteMessage(id: Long) = TODO 刷新一下,什么?还是hello,world界面,好吧,我们给index做一个重新定向 修改 /app/controller/Application.scala 文件里的index函数 def index = Action Redirect(routes.Application.message) 保存,刷新,恩,跳转了,我们之前定义的TODO意思是马上去做,然后他会返回一个这个蓝色的家伙 新建Message

33、.scala模型文件 熟悉MVC的人知道,model,views,controller,得有模型,这里我们就做一个留言的Message模型吧,在 /app/ 里新建文件夹 models ,在models里新建文件 Message.scala ,内容如下 package models case class Message(id: Long, label: String) object Message def all: ListMessage = messageList def create(label: String) def delete(id: Long) var messageList:L

34、istMessage=new Message(1,心香一脉):new Message(2,孝道第一):Nil 第一行就是java里的包, 第三行定义了一个类,包含id,label两个属性,分别表示留言编号和留言内容, 第五行大致相当于java里的单例,有三个方法,all是返回所有的留言内容,create是新建留言,delete是删除留言, 最后一行我们定义了一个messageList,用来存放留言,并且放进了两条数据 显示界面的制作 好了,为了让我们的数据显示出来我们还得做一个页面,那就修改一下 /app/views/index.scala.htm l吧 (messages: ListMess

35、age) main(留言板) 共messages.size 条留言 messages.map message = message.id message.label 第一行传入参数message 第三行调用main模板 第五行用List里的size方法显示留言的数量 第七行用List里的map方法吧List转换成map并遍历显示id和label即留言内容 那么首先呢,我们应该给这个index页面传递参数message,毫无疑问这个实在Application.scala里面完成的,修改 /app/controller/Application.scala import models.Message

36、def messages = Action Ok(views.html.index(Message.all) 保存,刷新,嘿嘿,怎么样,出来了吧 下面呢,我们就来制作新增留言的部分 新增留言的制作 留言肯定要现有表单单,我们先给我们的前台页面index.scala.html添加表单,修改 /app/iews/index.scala.html (messages: ListMessage,messageForm:FormString) import helper._ main(留言板) 共messages.size 条留言 messages.map message = message.id me

37、ssage.label 新增留言 form(routes.Application.newMessage) inputText(messageForm(label) 具体第一行传入参数又多一个messageForm,这个就是表单了,可以回填内容,显示错误等 第三行导入helper._,主要是一些表单的模板 第十九行定义了一个form,action为routes.Application.newMessage,实际上就是http:/localhost:9000/message 第二十一行第一了一个input,和message、messageForm里面的label绑定在一起,接下来吗,不解释 既然传

38、入参数多了一个messageForm,那么我们在Application.scala里面的message就得改一下,具体如下 def messages=Action Ok(views.html.index(Message.all,Message.messageForm) 那么Message里面肯定也要加一个messageForm之类的东西吧,修改 /app/models/Message.scala ,加入 import play.api.data._ import play.api.data.Forms._ val messageForm=Form( label-nonEmptyText ) 一

39、二行嘛,导入两个包,里面分别有变单数据和变单的描述, 第四行定义一个叫做messageForm的表单 第五行定义了一个数据,nonEmptyText代表此项不能为空 然后在保存刷新一下 当然现在只是一个界面,我们要想真正留言还有很多事要做,首先在Application.scala里面把newMessage的TODO完成一下 import model.Message._ def newMessage=Actionimplicit request= messageForm.bindFromRequest.fold( errors=BadRequest(views.html.index(Messag

40、e.all,errors), label= Message.create(label) Redirect(routes.Application.messages) ) 第一行,实现了request,可以访问request里的方法 第三行,把request的数据绑定到messageForm里 第五行,如果根据messageForm里的要求绑定失败,则返回错误 第七行,如果没有错误,对数据进行处理,这里是lable数据,调用Message里面的create方法,新增留言,当然这个方法还没实现,这是我们下一步的目的 第九行,新增完成条装到显示页面 然后呢我们可以来完善Message里面的create

41、方法,修改 /app/model/Message.scala def create(label:String) messageList=messageList:(new Message(messageList.length+1,label):Nil) 第三行主要是新建一个List,包含新建的Message,然后和之前的MessageList合并生成一个List,重新赋值给messageList 这个时候我们保存,刷新,添加留言,单击提交,成功了 删除留言的制作 最后我们该增加删除留言的功能,这个相对增加留言来说比较简单,首先还是处理前台,修改 /app/views/index.scala.html messages.map message = message.id message.label form(routes.Application.deleteMessage(message.id) 第七行,定义了一个form,action为routes.Application.deleteMessage(message.id),

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号