Play是一个全栈框架

Owen Jia 2019年01月25日 131次浏览

背景

没有了Spring MVC,你就什么都不会了吗? no no no !
作为一个工程师你必须了解更多,Play MVC就是是你必备的技能,Play framework非常强大堪比Spring framework。

学习Play之前先要掌握sbt的使用。

介绍

Play是一个全栈框架,它包含了Web应用和Rest服务所需要的所有组件,如:http服务器、表单处理、跨域请求保护、强大的路由机制、国际化等等。Play集成了很多ORM层。

同时Play支持java和scala两种语言进行开发。它默认使用Akka框架和Akka Http服务器。Play的应用天生是无状态、非阻塞、事件驱动架构特点,支持水平和垂直监控测量,同时资源使用效率也更高。Play项目里面包含Scala的模块组件,如果你是Java开发者也不用担心要学Scala语法,组件都支持Java API供你对接。

优点总结:

  • 它的MVC架构是主流框架,简单易学,容易上手。
  • 直接支持常规WEB开发任务模式和热加载,节省宝贵的开发时间。
  • 它有个很大且活跃的技术分享社区,可以交流学习也可以帮助解决疑问。
  • 支持Twirl模版去渲染页面,Twirl语法容易学、不需要特定的编辑器、自带语法类型检测、错误会直接展示在浏览器页面上。

核心原理分析

Play组件架构:
architecture

Play Project 目录结构

目录结构

详细目录介绍:

  • app:所有业务代码放在这里
    • controllers:Java代码存放目录,MVC模型中的C。
    • v1:常规业务代码所在,可以按时间情况进行命名。
    • views:页面模版存放目录,如html。
    • Module.java:这里是编写模块绑定代码,结合conf来设置。
  • conf : 配置文件
    • META-INF:项目包构建的配置文件,web服务必须的。
    • application.conf:核心配置文件,主要配置都写在这里。
    • logback.xml:日志文件,logback组件。
    • posts.routes:请求路由分发配置文件,Post命令。
    • routes:请求路由分发配置文件,Get命令。
  • project:项目编译环境一些配置。
  • public:静态资源目录:图片、css、js等。
    • images
    • javascripts
    • stylesheets
  • target:编译后class等文件目录。
  • test:测试代码目录。
  • .gitignore:git提交过滤配置。
  • README.md:项目说明文档。
  • LICENSE:使用授权文件。
  • build.gradle:Gradle模式下依赖包管理,类似于maven的pom.xml文件。
  • build.sbt:Sbt模型下依赖包管理。
  • gradlew.bat:window环境下Gradle定制脚本。类似于mvn|grunt|gulp之类命令,可以运行task:build|init|dist|stage|tasks|help|test|check等。
  • gradlew:linux环境下。

重点强调:
gradlew 类似于maven的功能,但是比它要强很多;和前端的gulp、grant比较像;
sbt是默认play的环境命令,也是一般常规学习入门命令,类似node的npm命令、springboot的spring命令。

核心用例讲解

第一步:创建 Play 项目。

这里采用官方推荐的模版创建基础项目,可以参考官方文档:play-java-seed

打开window的cmd执行运行命令,跟着流程一步步走输入项目名和包名即可。

sbt new playframework/play-java-seed.g8

sbt命令需要自己去安装,我使用的是1.2.6版本

结果展示

第二步:IDEA中运行项目。

intellij idea中需要安装scala插件,jetbrains官方文档描述很清晰:idea-scala-plugin

导入已存在项目

安装文档总描述,在idea中配置一个启动task,这样就可以run\debug。

runPlay

idea中直接运行右下角:sbt shell,会弹出界面使用sbt的命令,如:run(运行项目)、stop(停止项目)

run

在浏览器中输入:localhost:9000 可以访问默认的页面,出现 Welcome to Play! 表示启动成功。

对于project的管理不是采用gradle也不是maven,而是使用sbt提供的窗口,如下图:

project

第三步:生产环境打包发布运行。

Play项目的部署与传统tomcat服务器部署那种,和springboot可执行jar方式都不同;Play在生产环境下运行需要配置http.secret.key参数才能正常启动,secretKey文档

1.可以把源码项目直接部署到服务器上,使用SBT命令运行服务,可以非常方便的测试、编译、运行;

1、需要在服务器上安装sbt环境(也就是个软件啦),可以去SBT官网下载

  • window安装zip和mis都是很方便的;
  • linux也可以直接安装zip包来运行,但是需要配置一下环境,不然sbt命令运行会比较麻烦;
  • linux也可以直接使用yum install sbt来安装,linux-sbt文档参考
  • 记得把maven地址配置到sbt的配置中;

2、将整个项目文件夹Copy到服务器上要部署的目录下。

  • 把什么.idea .g8 等等目录都删除

3、进入项目根目录下运行sbt命令(Play项目自带内置服务器)。

  • 执行命令:sbt,linux环境下会切换成sbt模式,如:[play-java-sample] $ tasks
  • 后台运行服务命令,如: [play-java-sample] $ bgRun

SBT支持的commands清单,也可以查看官方命令文档

sbt-command

2.使用命令:gradlew dist ,生成zip的部署包,和maven的assembly插件类似;

1、执行命令:gradlew dist,打包playBinary.zip;

  • 执行命令:gradlew dist,在项目的build/distributions/目录下,生成了playBinary.zip|tar文件;

2、playBinary.zip上传服务器,解压启动playBinary命令

  • *.zip上传服务器并解压,会生成bin\lib\conf三个目录,此时的项目资源生成了jar文件存放在lib文件夹里面;
  • 在/bin目录中执行playBinary命令可启动服务,配置文件在conf目录下;

总结

使用Play越深越是觉得这个框架很酷很方便,就像是tomcat+nginx+webmvc+html+freemarker的集合体。Play的代码热加载能力比springboot要强很多,出现比它还有早。

sbt命令工具实在是太酷,完全超越了springboot一直在努力完善的spring命令工具,让我觉得springboot可能抄袭了play。

如何你要掌握Play就得把spring mvc、freemarker|themeleaf、tomcat、nginx、maven都抛弃掉,因为它都有自己的一套标准需要你重新学习。官方的技术文档非常详细,可惜是全英文对部分同学来说有门槛而网上的中文文档比较零散,推荐直接看英文版。

常用链接

play官网:play-framework

play2.x在idea中使用文档:play2.x

play 样例下载中心:play-sample

个人测试例子:play-java-sample


作者:Owen Jia, 欢迎关注他的博客:Owen Blog

学习的路上永无止境,我们当砥砺前行。