用Play开发也有3年多年时间了,结合自己的感受以及网上看的相关文章,在这里也分享一下经验。本人之前一直是用play1.2.5版本,以下是鉴于1.2.5版本来讨论,欢迎各种吐槽。
PLay Framework 是一个Full-Stack的Java Web框架,有以下四大特点:
修改不用重启(热部署)
这是我觉得最重要的一点:当你在开发时,修改了任何java代码、模板代码、配置文件,在下一个请求来时,play会扫描所有改动过的文件,重新编译,而且重新编译速度快。简单的说,就是修改了应用代码,直接在浏览器中刷新即可看到最新效果。
无状态(扩展性强)
play是无状态的,session的数据是以加密的方式存放在cookie中。这让play有良好的扩展性。结合反向代理服务器(例如nginx),当访问量大的时候,只要在应用集群添加新的应用实例就可以,不用处理session在不同的应用实例无效的问题。而传统的Servlet程序则需要考虑session同步等问题。
代码增强
代码增强是Play的重点功能。在play编译java源文件时,会使用javassist字节码工具对源文件进行各种增强。最明显的体现两个地方:
1,定义model时,只需要定义属性名而不用定义对应的getter、setter,因为play在编译时会扫描出该model下所有的public的属性,为其添加对应的get、set方法。
2,当传递参数给页面模板时,play根据参数名自动向模板设置参数。
3,接受请求参数时,play自动分析request中的参数,然后跟action方法中对应的参数关联上。
因此,开发可以省去很多繁琐且不必要的代码。
模板中方法调用与url的自动转换
在写页面模板时,所有涉及到url的地方,都不用直接写/AAA/bbb,而是可以直接像调用类的静态方法来写url,这也是restful风格的体现了。play在解析模板时,会自动根据route配置文件中的路由规则,自动翻译成对应的url,这是我见过的最java化的url写法。举个例子:
现在要添加一个用户
常规写法:/usermanage/add
play写法: @UserManage.add
若route按照初始化的配置,则此请求会跳到UserManage类的add方法。