PlayFrameworkRESTful的全栈式Web开发框架分享人:宁家宏1.PlayFramework介绍2.创建和发布Play应用2.1创建Play的工程2.2Play常用指令2.3Play应用的JVM调优3.如何读取静态资源4.Play框架的配置文件5.使用Play框架开发Java应用5.1HTTP编程5.1.1什么是Action?5.1.2什么是Result?5.1.3什么是Controller?5.1.4Session和Flash5.2异步HTTP编程5.3对WebSocket的支持5.4如何进行表单验证?5.5如何上传文件?5.6使用缓存5.7使用模板开发HTML页面6.搭建mango开发环境目录PlayFramework介绍轻量级、高效、方便RESTful、无状态。适合云平台。使用Netty框架支持Eclipse和IntelliJIDEA创建和发布Play应用创建play应用创建和发布Play应用playnew{appname}创建和发布Play应用app|-controllers|-models|-viewsconf|-application.conf|-routespublic|-stylesheets|-javascripts|-imagesproject|-build.properties|-plugins.sbt|-Build.scalaliblogs|-application.logtargettest创建和发布Play应用app|-controllers|-models|-viewsconf|-application.conf|-routespublic|-stylesheets|-javascripts|-imagesproject|-build.properties|-plugins.sbt|-Build.scalaliblogs|-application.logtargettest典型的MVC模型app/controllers控制器层app/models模型层app/views显示层创建和发布Play应用app|-controllers|-models|-viewsconf|-application.conf|-routespublic|-stylesheets|-javascripts|-imagesproject|-build.properties|-plugins.sbt|-Build.scalaliblogs|-application.logtargettestconf/application.confplay应用的配置文件conf/routesRESTful配置文件创建和发布Play应用app|-controllers|-models|-viewsconf|-application.conf|-routespublic|-stylesheets|-javascripts|-imagesproject|-build.properties|-plugins.sbt|-Build.scalaliblogs|-application.logtargettestpublic/*应用的静态资源目录stylesheets-CSS文件目录javascripts-JS文件目录images-图片目录创建和发布Play应用app|-controllers|-models|-viewsconf|-application.conf|-routespublic|-stylesheets|-javascripts|-imagesproject|-build.properties|-plugins.sbt|-Build.scalaliblogs|-application.logtargettestproject/Build.scala定义应用发布名称和版本自定义应用的依赖包自定义应用静态资源目录。。。创建和发布Play应用app|-controllers|-models|-viewsconf|-application.conf|-routespublic|-stylesheets|-javascripts|-imagesproject|-build.properties|-plugins.sbt|-Build.scalaliblogs|-application.logtargettestlib-应用依赖JAR包目录logs-应用日志目录target-class文件目录test-测试代码目录创建和发布Play应用play应用与IDEEclipse和IntelliJ创建和发布Play应用在Eclipse上开发play应用D:\myFirstAppplayeclipse创建和发布Play应用在IntelliJ上开发play应用D:\myFirstAppplayidea创建和发布Play应用play常用指令创建和发布Play应用play-进入play控制台模式。创建和发布Play应用在发布应用之前,先在本地把应用跑起来!clean清理应用compile编译应用代码debug以debug模式运行程序run运行应用(在当前控制台中有效,在开发环境中使用)start运行应用(后台进程,在生成环境中使用)创建和发布Play应用发布应用dist-生成应用的二进制运行包创建和发布Play应用在生产环境运行play应用方式一:运行dist指令打包好的start脚本方式二:执行start指令(需要安装play框架)创建和发布Play应用JVM调优创建和发布Play应用Play框架默认的JVM参数:start-J-Xms128M-J-Xmx512m-J-server自定义JVM参数:start-J-Xms128m-J-Xmn512m-J-Xmx512m-J-XX:MaxPermSize64m-J-server如何读取静态资源静态资源放在{applicationname}/public目录在{applicationname}/conf/routes文件中添加一行:GET/assets/*filecontrollers.Assets.at(path=/public,file)使用URL访问静态资源:http://{host:port}/assets/{资源路径}如:静态文件/public/javascripts/jquery.js,用http://{host:port}/assets/javascripts/jquery.js可以访问到。Play框架的配置文件conf/routesconf/application.conf2个配置文件Play框架的配置文件conf/routes嘿~在我这配置RESTful规则GET/mall/:catcontrollers.pub.PublicController.appList(cat)RESTful类型:GET请求数据PUT更新数据POST创建数据DELETE删除数据RESTful规则:cat位置为参数RESTful规则对应的动作的全路径Play框架的配置文件conf/application.conf配置数据库配置Play线程池配置日志配置国际化Play框架的配置文件db.default.driver=org.gjt.mm.mysql.Driverdb.default.url=mysql://user:password@localhost/databasedb.default.user=sadb.default.password=secretdb.default.autocommit=truedb.default.isolation=READ_COMMITTEDdb.default.partitionCount=2//线程池数量db.default.maxConnectionsPerPartition=5//每个线程池最大值db.default.minConnectionsPerPartition=5//每个线程池最小值配置数据库:Play框架的配置文件在project/Build.scala加入MySQL驱动包:valappDependencies=Seq(mysql%mysql-connector-java%5.1.18)获取数据库连接:Connectionconnection=DB.getConnection();使用JDBC:Play框架的配置文件play{akka{akka.loggers=[akka.event.Logging$DefaultLogger,akka.event.slf4j.Slf4jLogger]loglevel=WARNINGactor{default-dispatcher={fork-join-executor{parallelism-min=8//最小值parallelism-factor=3.0//每次增加(processors*factor)parallelism-max=64//最大值}}}}}配置Play线程池:Play框架的配置文件//Rootloggerlogger.root=ERROR//Loggerusedbytheframeworklogger.play=INFO//Loggerprovidedtoyourapplicationlogger.application=DEBUG配置日志:Play框架的配置文件application.langs=en,zh-CN,zhconf/messages.enconf/messages.zh-CNconf/messages.zh配置国际化:开发Java应用HTTP编程开发Java应用WhatisanAction?Action是控制器类中的一个静态方法,用来处理用户的HTTP请求。它返回一个Result对象。publicstaticResultindex(){returnok(Gotrequest+request()+!);}开发Java应用Controllers控制类继承play.mvc.Controller的类,都是控制类。它是Action的集合。packagecontrollers;importplay.*;importplay.mvc.*;publicclassApplicationextendsController{publicstaticResultindex(){returnok(Itworks!);}}开发Java应用Result响应类Result是对HTTP请求的响应封装,由Action方法返回,它包括状态码、HTTP响应头、响应内容。Resultok=ok(Helloworld!);ResultnotFound=notFound();ResultpageNotFound=notFound(h1Pagenotfound/h1).as(text/html);ResultbadRequest=badRequest(views.html.form.render(formWithErrors));Resultoops=internalServerError(Oops);ResultanyStatus=status(488,Strangeresponsetype);开发Java应用RouteControllerActionResultHTTP请求RESTful规则判定开发Java应用Session和FlashSessionFlash有效范围整个会话期间当前请求描述保存在cookie中,只能存放字符串,最大为4KB例子session(user)flash(success)开发Java应用异步HTTP编程开发Java应用Play框架创建一个线程池A,来响应HTTP请求,当请求的资源涉及到长时间的计算,或者遇到IO操作,Play框架就无法快速释放A的线程,导致应用无法及时响应其它的HTTP请求。异步HTTP编程,Play框架会创建另外一个线程池B,用来处理HTTP请求,然后会快速释放