我是Play的新手! Web框架,为了理解它是如何工作的,以及它与其他Web框架的比较,我希望能够在Play中进行跟踪!源代码,从开始到结束的请求生命周期。我将使用Play的Scala实现。
因为我的大多数经验都是使用PHP框架,所以我习惯于从web根目录中的index.php文件开始,并通过任何包含的config / bootstrapping脚本,依赖注入处理,请求路由,动作调度来读取,最后是查看/响应呈现。
我无法确定Scala / Play的类似入口点!申请,我非常感谢推动正确的方向。请求生命周期的演练当然会非常慷慨,但我真正需要的只是显示入口点。
答案 0 :(得分:3)
默认情况下,Play框架使用内置HTTP服务器(基于Netty)。与PHP最接近的类比是Play是Apache和PHP。
PHP使用遗留的' CGI-like'范例:为了提供单个HTTP请求,您的程序已启动,在完成服务请求后,它将被终止。在用于提供HTTP请求的CGI中,Web服务器启动外部程序 - 您的脚本 - 并返回其输出。较旧版本的PHP仅为CGI设计,在后续版本中还有其他与服务器交互的方式,因为CGI非常慢,但核心原则保持不变。
大多数Web应用程序技术使用另一种方法:Web应用程序启动一次然后保持运行,因此一个正在运行的Web应用程序实例继续为请求提供服务(并且可以并行处理多个请求)。它在服务单个请求后不会消失,就像在PHP中一样。这允许每次启动应用程序所需的资源少得多,并且只是稍微难以使用,因为大多数请求处理隐藏在内部框架中,并且您的应用程序只需要公开在请求到达和返回时调用的控制器方法响应。
它还允许更大的灵活性,例如,可以在Web应用程序内部启动后台处理,无需外部服务器进程。 Play有Akka库,非常方便。
随着越来越多的Web应用程序使用Ajax和REST方法,而不是每次都为重量级网页提供服务,它变得更加重要。使用PHP创建实时消息传递后端几乎是不可能的,无论请求技术如何(轮询,长轮询,iframe与多部分)都将具有良好的性能。
但是如果与PHP MVC框架相比,从创建视图,模型和控制器的开发人员的角度来看,Play非常相似。无论是在PHP MVC框架和Play框架中调用控制器方法还是函数,这个方法都应该返回响应,视图通常是模板和模型,通常是ORM绑定到关系数据库。
答案 1 :(得分:2)
我认为这是你的意思:
Play是一个Java应用程序,它开始在给定端口上侦听。使用Netty库完成侦听,Netty库了解不同类型的网络协议(最重要的是HTTP)。一旦Netty知道发生了什么,它将控制Play框架。
然后,Play Framework将使用Global文件与Routes一起确定要调用的Action。答案 2 :(得分:1)
Play更像是一个宁静的框架(阅读http://en.wikipedia.org/wiki/Representational_state_transfer),而不是像jsp jsf等典型的基于模板的框架,它具有请求生命周期概念,尽管它也有模板支持。基本的想法是基于像json这样的纯数据与服务器的交互,并且用于更新dom结构的大多数代码都是用javascript编写的,并且仅在客户端上完成,这实际上更灵活,更简单和有效。
在游戏中,您只需在scala类中定义一个方法并将其映射到 routes 文件中,就可以清楚地创建将数据发送到浏览器的方法。同样在典型的Web开发过程中,您还将html文件放在公共资源文件夹中(或创建模板),这通常在浏览器中执行时对该方法执行ajax调用。