Play Framework是一个Rails风格的Full-stack Java Web框架。

MVC模型

Play应用遵循Web架构使用的MVC架构模式。

它将应用分离到不同的层中:表现层(Presentation)和模型层(Model)。表现层进一步分为视图(View)和控制器(Controller)。

  • Model 是应用所处理信息的领域表述(Domain-Specific Representation)。绝大多数应用使用持久化机制如数据库存储数据。但是MVC并没有特别提到数据访问层,因为它属于下层,由模型封装。
  • View 将模型渲染成适合交互的表单,通常是用户界面。一个模型可有多个不同目的视图。Web应用中,View通常以HTML,XML或JSON形式呈现,也可能是二进制的Chart。
  • Controller处理事件(通常是用户动作),并对模型做相应改变。Web应用中,事件通常是HTTP请求:Controller监听HTTP请求,从其中提取数据,如查询字符串参数,请求头,然后改变下层模型对象。

Play将此三层分在app目录下的不同package中。

app/controllers

一个Controller就是一个Java 类,它的静态公共方法则是动作(Action)。动作是接收HTTP请求后的Java处理入口点。Controller类实际是面向过程的,非OO。 Action从HTTP请求中提取数据,读或更新Model对象,然后返回一个包装成HTTP响应(HTTP Response)的结果。

app/models

Model是一组具有所有OO特性的Java类。包含数据结构和应用可使用的操作。(译注:即充血模型)。支持通过JPA持久化。

app/views

应用的视图由Play的模板系统生成。Controller从Model获取数据,然后使用模板呈现它。此package包含HTML,XML等模板文件,用作动态生成模型的表述(Representation)。

请求生命周期

Play是完全无状态的(stateless),且仅面向请求-应答(Request-Response)。所有请求遵循相同路径:

  1. 框架收到一个HTTP请求
  2. Router匹配请求和Controller、Action,执行动作方法。
  3. 应用代码执行
  4. 绘制模型,呈现视图
  5. 动作方法的结构作为HTTP响应返回。

应用程序布局

app目录

包含所有可执行的工件:Java源代码和视图模板。其下有三个标准package,每个代表MVC的一层。你也能添加你自己的包,如示例的utils包。

View pacakge可以在分子packages:

  • tags 存储应用的ta。如可重用的模板片段。
  • 一个Controller一个view目录,按惯例,每个Controller的相关模板存储在自己的子目录中。

.class文件在哪儿?

Play在运行时编译Java源代码,并将编译的类缓存在tmp\bytecode目录下。Play应用的可执行工件时.java源文件,不是已编译的.class(译注:包括jar文件)。

public目录

存储静态的、由Web服务器直接处理的资源。分为三个子目录:images,stylesheets和javascripts,分别放图片,css和js。

conf目录

包含应用的所有配置文件。两个必须文件为:

  • application.conf: 应用主配置文件,包含所有标准的配置选项。
  • routes:url路由规则定义文件。

此目录包含在Java ClassPath中。

lib目录

存放应用依赖的标准Java类库。此目录自动添加到Java classpath中。

开发生命周期

使用Play开发时没有编译,打包和部署这些阶段,代之两个不同环境:用于开发阶段的DEV模式和用户部署阶段的PROD模式。

Java源代码在运行时编译和加载。如果Java源文件在应用运行时发生改变,代码会重新编译并热加载(hot-swapped)到JVM中。模板文件也是如此。

关于DEV/PROD模式

通过application.mode配置属性切换DEV或PROD。DEV模式下,Play会检查并在必要时热加载。PROD模式为产品做了优化:Java源文件和模板仅编译一次。

调试

开发模式下通过JDPA连接到8000端口远程调试。(译注:原文此处很简略,实际上可远程调试,也可本地调试)

转载自: http://www.cnblogs.com/Chaos/archive/2011/04/16/2018315.html

转载于:https://www.cnblogs.com/JoannaQ/p/3572760.html

Play Framework介绍:主要概念(转)相关推荐

  1. Portal Framework介绍

    Portal Framework介绍(第一部分) 目 录 1 概述... 3 2 基本概念... 3 2.1 Portal定义... 3 2.2 Portlet定义... 4 2.3 Portal页面 ...

  2. 基于Vue的Quasar Framework 介绍 这个框架UI组件很全面

    基于Vue的Quasar Framework 介绍 这个框架UI组件很全面 基于Vue的Quasar Framework 中文网 http://www.quasarchs.com/ quasarfra ...

  3. EBS模块介绍和概念解释

    Oracle模块介绍和概念解释 Oracle重要模块简介 账套 会议科目表 记账本位币 会议日历的财务报告实体 组织 业务组 公司的最高部门 法人实体 提交财务和税务报表的法人公司 经营单位 orac ...

  4. java面向方面编程_面向方面编程的介绍----基本概念

    面向对象的编程中常用的概念是:继承.封装.多态.在面向方面的编程中常使用的概念是:advices/interceptors, introductions, metadata, and pointcut ...

  5. Python nose test framework 介绍

    Python nose test framework 介绍 一.安装nose 先用easy_install 安装 nose,easy_install是一个很好的python工具,可以方便安装很多的py ...

  6. 硬件开发设计 - 焊接电路板,介绍焊接概念,焊接步骤,常见错误,难点等

    焊接是硬件开发的基本功,硬件开发中常见问题除了电路设计问题,最大的就是手工焊接质量问题,而设计之初,所有的样板基本都要手工去焊接,当然一些大公司会设有焊接岗位,开发人员不需要自己去焊接,焊接功底也应该 ...

  7. Robot Framework 介绍

    本文的主要目的是简要地介绍Robot Framework功能和特性,更加详细的内容,请移步至官网http://robotframework.org/ (官网的内容最为全面详细,由英文编写). 本文分为 ...

  8. 给各位码神介绍“场景”概念,顺便集思广益~

    给各位码神介绍"场景"概念,顺便集思广益~ 我发现这个世界上有很多爱思考的人,每一个人都有自己的想法,我也曾经尝试去阅读大家的思考,发现研究十分深入,然而我也觉得跟我没关系,也懒得 ...

  9. php下一代的五个framework介绍

    php下一代的五个framework介绍 源文网址: http://www.theweb20dev.com/wordpress/2006/05/03/5-next-generation-php-fra ...

最新文章

  1. java ftp 判断文件是否存在_FTP判断文件是否存在
  2. window10 运行linux软件,现在你可以直接在Windows 10平台上运行带用户界面的Linux桌面软件...
  3. 浅谈尾递归的优化方式
  4. 设置(TableViewController)通用框架
  5. java基础类与对象_Java基础---类与对象
  6. 质量和品质的区别_质量体系认证,与产品质量认证的区别 !
  7. winform 等待窗口
  8. 大数据产品开发流程规范_大数据架构流程图
  9. 名词用作动词举例_[名词的活用] 名词的活用例子
  10. css3中-moz、-ms、-webkit、-o 各是什么意思
  11. BJTU1940 铁憨憨骑士团的回文对称
  12. dpdk课程学习之练习笔记四(dns预备)
  13. C语言编程 | 转义字符
  14. 计算机网络串行传输 并行传输,串行传输和并行传输的概念
  15. 英语口语8000句-生病、受伤时
  16. ubuntu22.04 在笔记本上切换核显驱动出现的字体模糊或屏幕模糊现象的解决方法
  17. Linux内核剖析-----IO复用函数epoll内核源码剖析
  18. Ajax.NET中的ajax.js脚本
  19. target is not existed: .page-component__scroll .el-scrollbar__wrap
  20. 天融信防火墙重置配置_天融信防火墙怎么配置路由

热门文章

  1. java dom获取属性值_java – 获取dom节点的属性
  2. 用python批量下载网络图片大全_实战干货:用 Python 批量下载百度图片!
  3. 移动端适配常用解决方案
  4. localStorage.setItem()前后端分离情况下使用
  5. 人工机器:基于视觉的机械手控制
  6. OpenCV:使用OpenCV3随机森林进行统计特征多类分析
  7. 人工机器:作为归纳系统的深度学习
  8. 海纳百川、有容乃大:从4个角度解读京东3C新方向
  9. JavaScript: 取得 function 的所有参数名
  10. 4.1 [单选]两化融合中的两化是指 - 关于两化融合(主讲:凌捷)笔记