Play2 for Java(一:简介)

Module1:Play简介
Module2:下载安装Play2,了解基本的应用程序框架
Module3:服务路由
Module4:Controller,action & Results
Module5:views
Module6:数据访问
Module7:Global Objects

Module 1 Play简介

在我们介绍Play的各种各样的概念的同时,我们将利用它们中的许多来构建一个基本的示例应用程序。应用程序的前提是一个基本的联系方式App,它允许我们列出人们的姓名和电子邮件地址,添加新的联系人,更新或删除现有联系人。这是一个非常简单的例子,但它能让我们触及Play2的关键领域!而不会陷入特定于应用程序的概念。
1.1 Play的历史
Play版本1于2008年年中首次发布,2009年10月正式发布v1.0。它最初是由Guillame Bort领导的Zenexity的一个内部项目,他以前以他在Groovy编程语言中的领导角色而闻名。在接下来的几年里,更新了各种小版本的Play!1 Release。其中包括引入OAuth支持、HTTPS和Scala支持。此前,Play!主要是基于java的框架。Play!受到Django和Rails等其他web框架的启发,旨在创建一个相对容易开发和维护的Java应用程序家族。2012年3月左右,Play!2被发布并成为Typesafe堆栈的一部分。而不是简单地作为一个主要的点发布,附加功能,play2从根本上来说是一个不同于play!1的框架。例如,play1!使用Ivy作为它的依赖关系管理工具,它使用基于groovy的模板,核心是完全用Java编写的,但是它有一个基于Scala的API,使得Scala可以作为开发的语言使用。然而play2!不同了,它被完全重写了,它的核心是用Scala编写的,提供Java API,play1与play2完全翻转了.工作模板库是基于Scala的,它使用SBT,SBT这是一个简单的构建工具,也是一个用于构建和依赖关系管理的Scala技术。即使在特征集和基本哲学方面,play1与play2也有很大不同。play!1的目标,以生产力为中心,构建符合当今需求的web应用程序。而play2采取一种稍微大胆的前瞻性方法。而不是考虑支持当今需求的应用程序,Play2专注于构建具有可伸缩性和轻量级的应用程序,默认为无状态的异步不可变方法.从这里开始,当提到Play的时候,我特别指的是play!2。除非特别指定,否则我将引用该框架的Java版本。
1.2 Play的哲学
Play!的开发者相信我们正在从根本上建立并将继续以完全不同的方式建立系统。
随着云计算的出现,即“量入为出”和“商品服务器”,使我们无需投资昂贵的硬件,就可以在水平上降低成本,将大量的应用程序放入一个大型管理的web容器中,就像WebSphere或WebLogic一样,并不是非常有效的。相反,我们发现了编写应用程序和web api的好处,这些应用程序和web api可以在任何地方部署并以自我托管的方式运行。也就是说,它们提供了自己的小型web服务器,可以容纳一个应用程序。Play!开发者还认为,为了快速水平扩展,应用程序需要尽可能无状态。也就是说,数据在请求之间不会持久化于服务器端。Session,尽管它在Play是存在的,但并不常见。事实上,Play!的默认的Session存储被限制为一个基于cookie的字符串,且最多可达4kb。
最后,处理数以千计并发请求的应用程序不允许阻塞资源,比如线程、IO、虚拟机、数据库连接或其他任何东西。如果他们这样做了,就不会太久。如果他们这样做了,直到资源耗尽,应用程序就会开始失败。我知道这些已经不是新的关注点了,但是以传统的模型的话,意味着我们可以添加更多的RAM,更多的到数据库pro的连接,或者是更多的CPU核数,但是这些都是比较昂贵的。所以,Play!在整个堆栈中使用异步的、非阻塞的原则和技术。这使得即使是long-lived(长时)请求也可以避免对任何宝贵资源的阻塞。
最后,Play!有意识地决定对数据持久化不持有意见。当像Rails这样的框架进入主流时,SQL数据库是最重要的数据抽象。因此,Rails对SQL数据库有强烈的观点。虽然它完全可以通过第三方模块进行配置,但是使用Rails启动和运行意味着您将从某种形式的关系数据库开始。Play!避免将任何类型的数据存储耦合到框架的其余部分。虽然这看起来很奇怪,但是现在已经不是Rails的那个时候了。有源源不断的新数据持久性机制和文档存储到图形数据库。Devalue商店和大桌子都有他们自己的用途和好处,对于一个框架来说,把帽子挂在任何特定的方法上是很奇怪的。也就是说,Play!提供一到两个基本的数据访问组件,使您能够快速地启动和运行。我们将在以后的模块中讨论这个问题。
1.3 技术

这里写图片描述

Play!它本身由许多通用的library和技术组成,由Play!的库无缝连接在一起!,使整个框架的体验尽可能的有凝聚力。Play!它本身在逻辑上被分为两部分,Play! Executable(Play!可执行文件)和Play! Framework(Play!框架)。Play! Executable是一个命令行工具。如果您曾经使用过Rails和它的命令行工具,它们提供了同样的想法。通过Play! command(命令),您可以生成新的应用程序;运行、调试和测试现有应用程序;还将部署应用程序打包为独立的可执行的jar文件。Play!命令行工具是个看似简单的应用,但是是由许多基于jvm的通用工具构建的。例如,Git或Giter8,这是一个可以基于文件夹或Git存储库执行联合生成的工具。当然,Play命令与运行、测试和部署应用程序有关,但是归根结底还是由SBT来做的。SBT是一款简单的构建工具,基于Scala,类似于Maven,Gradle。

这里写图片描述

Play框架则利用了一系列公共JVM库。它的核心是用Scala编写的,它是以可扩展的模块化方式构建的。模块是可选的,比方说用于数据访问的模块JDBC和Ebean,它们被构建为可以在开发人员需要时加载的插件。事实上,大部分Play!的的组件都可以在某种程度上被重写或替换。控制器、路由器和视图可以通过引入新的插件来替换掉。而在引擎之下有一系列的技术。Play!是自托管的,这就意味着不必部署web容器,它将在每个应用程序上运行自己的专用HTTP服务器。为了做到这点,Play使用自己的Netty服务器,这一个非阻塞的web服务器库,类似Jetty。
Play的核心代码构建在Akka之上,Akka是一个用于在JVM上创建并发应用程序的工具箱。它的一个关键特性是允许创建actor,这是一个关注消息传递的并发原语.可以将Actor视为独立的计算单元,可以并行地运行,而不必担心低级别的问题,例如线程和锁定。Akka提供的actor系统将会处理这些问题本身.Play!基础设施是围绕这些概念构建的:可伸缩性和对并发的强大支持作为标准。Play!中的日志是由Logback提供的,它在java里很受欢迎的。Play!中的Views(视图)是基于Scala的,如果你使用过ASP.NET MVC或者Razor视图引擎的话,你会发现它们在风格是相似的。而实际上,Play中的视图是被编译的,这在视图引擎中并不常见。这为您在创建视图时提供了安全性和编译时语法检查,这是一个方便的特性,可以避免在出现问题时对调试视图的正常时间同步。在视图这个主题上,Play!还支持客户端资产编译技术,如CoffeeScript和LESS。它还内置了对服务器端技术的支持,如WebSockets和Server-Sent Events。在数据访问方面,Play !尽管它确实捆绑了一些技术或助手类来支持脱离工作,但并没有提供强有力的意见。例如,Play!为我们提供了一个简单的机制来管理JDBC连接池和数据源,以及与jpa兼容的技术。它还提供了一个名为Ebean的简单ORM,它提供了对数据库的抽象,以便在无需深入SQL的情况下执行操作。Play!同时还附带了H2内存数据库。这可以在开发和测试期间使用,以提高生产率。在测试方面,Play!有JUnit和Selenium,尽管可以不用。不过它们丰富了Play!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值