接前文:http://www.cnblogs.com/Kassadin/p/4335908.html

上次讲到Play Framework开发环境的配置,以及第一个Hello World程序;本次主要介绍Play Framework的几个核心概念。

1. Web应用程序的请求响应模型

每一个web开发者对于HTTP request和HTTP response都可以说是耳熟能详。实际上他们对应了Web开发的基本模型:请求-响应模型。请求响应模型的过程如下:

(1)Web浏览器通过HTTP协议向服务器端发送request请求

(2)Web服务器接收并解析HTTP request请求

(3)Web服务器将请求分发给相应的逻辑处理程序进行处理

(4)Web服务器将处理结果形成HTML格式的响应体

(5)Web服务器通过HTTP协议向浏览器端发送response响应

(6)Web浏览器显示HTML响应体

请求响应模型本质上讲是HTTP协议在Web开发中的应用,由于本文的重点不是这里,如需详细学习该模型,请查阅HTTP协议相关书籍和文档。

2. MVC模式

为什么要提到请求-响应模型呢,因为它是大名鼎鼎的MVC模式的基础。什么是MVC设计模式?

M-Model,模型;V-Views,视图;C-Controller,控制器;MVC模式也就是模型-视图-控制器模式;许多著名框架如SSH,Ruby on Rails本质上讲都是基于MVC设计模式的产物。同样的,MVC模式也是Play framework的核心。MVC设计模式之所以取得成功,是因为它和HTTP协议的请求-响应模型具有一致性。

(1)Controller,控制器

负责解析HTTP request并分发处理HTTP请求,控制器实现了对Web服务器程序流程的控制,它决定了由哪个模块处理HTTP请求,将请求分发给哪个View显示,请求哪一个Model以获取数据。它是MVC中业务逻辑的核心。

(2)View,视图

负责Web应用的显示逻辑,它主要定义了Web的展现层。

(3)Model,模型

负责Web应用的数据模型,与低层数据库进行映射,它主要定义了数据逻辑。

MVC设计模式实现了业务逻辑和显示逻辑的分离,进而实现了Web应用的高内聚性和低耦合性,因而取得了空前的成功。

3. Play Framework基本结构(实例研究)

本部分我将通过实际编写程序来展示Play Framework的几个核心概念。

【1】Java or Scala?

Play 2.0框架库已经由Scala编写,采用Scala编写Web应用相比于Java更加简洁现代,与框架的吻合度也更好,因此本系列尽量采用基于Scala的模版进行讲解;当然了,框架的思想与语言无关,其实无论是Java还是Scala可以说都大同小异(针对Play框架来说的,不是说的语言本身),因此,本系列以后可能会附带介绍Scala的相关内容。

【2】新建项目

【3】项目结构

输入cd hello进入项目

项目结构如上图1所示,主要包括了5个主要的文件夹;其中最重要的是app文件夹和conf文件夹。app文件夹主要存放项目代码,conf文件夹主要存放项目配置文件,public文件夹存放项目公有资源,test文件夹存放测试代码。

至于其他文件,现在还用不到,等到之后再慢慢研究好了。

现在对我们最为重要的是app文件夹和conf文件。上图2展示了app文件夹和conf文件夹的内部结构。在app文件夹中包含控制器和视图两个子文件夹,这和之前的MVC模式相对应,而conf文件夹下的routes文件是非常重要的配置文件,直接决定了http request的处理方式。

【4】routes

routes文件的每一行由3部分组成:

(1)第一部分,定义了HTTP请求的类型,如GET,POST等

(2)第二部分,相对路径

(3)第三部分,对应的处理方法(Action)

举个例子,当浏览器以GET方式请求URL:http://localhost:9000/ 时,其请求方式为GET,相对路径为:/,那么此时就应该将请求转交给controllers.Application.index方法处理。因此,我们来看一下index方法。

【5】app/controllers/Application.scala

该程序是控制器的核心程序,在scala中定义了一个单例对象Application类,该单例对象包含一个index方法,该方法调用Action函数,Action函数的功能是:执行函数体,并将函数体相应数据作为response头和response体返回给浏览器。

[1]Ok. 返回值信息

如图所示,OK相当于response code = 200,作为response头返回给浏览器

[2]views.html.index("Your new application is ready.”)

将字符串作为参数传递给views.html.index视图模版,视图模版解析参数以后,生成HTML代码,作为response体返回给浏览器

【6】app/views/index.scala.html

视图文件,由HTML+参数组成,解析相关参数可变为纯静态HTML文件。

现将原视图文件修改如下:

@(message: String)
<html><head>hello Play</head><body><h1>@message</h1></body>
</html>

【7】打开服务器进行测试

输入activator run打开服务器

浏览器输入http://localhost:9000/,我们得到了预期结果。

4.后记

本次我们主要研究了Play Framework的基本结构和几个重要文件的作用,分析了Play Framework的工作过程。

下次我们的主要任务是实现有参数的请求与REST架构的讨论。

敬请期待:Play Framework之3: REST架构与Restful Web Service.

转载于:https://www.cnblogs.com/Kassadin/p/4343682.html

简单易懂的现代魔法——Play Framework攻略2相关推荐

  1. 简单易懂的现代魔法——Play Framework攻略4

    接前文:简单易懂的现代魔法--Play Framework攻略3 1.The Object 时隔2个多月,Play Framework系列又更新了,本次的主题是:利用Play Framework实现R ...

  2. 烏托邦:起源魔法圖案攻略

    烏托邦:起源魔法圖案攻略 在烏托邦:起源中,初入遊戲的新手都會獲得一些前期的基本物資,而法杖就是其中的一把也是唯一把武器,那麼法杖要如何使用?魔法怎麼畫?有什麼用?怎麼用?魔法圖案又有哪些那?下面就一 ...

  3. 上古卷轴3晨风详尽指引攻略

    一 人物创造 晨风的人物创造是在游戏开始后的进行过程中完成的,首先是在船舱里决定自己的名字,然后出了船上岸之后会有人问你的种族,这时候决定自己的外貌,接下来进入人口办公室,和工作人员对话来决定职业和属 ...

  4. 创造与魔法最新服务器怎么进,创造与魔法进不了服务器 | 手游网游页游攻略大全...

    发布时间:2018-03-25 创造与魔法游戏中有着监狱这一设定,不少小伙伴不知道自己做错了什么就迷迷糊糊进了监狱,那么,进监狱了怎么办呢?下面就让牛游戏小编来为大家介绍一下创造与魔法进监狱的解决办法 ...

  5. NET Micro FrameworkのTimerクラス攻略

    NET Micro FrameworkのTimerクラス攻略 2011/11/8に公開された@IT Monoistの記事.「.NET Micro FrameworkデバイスとWindows Phone ...

  6. 【哈利波特·魔法觉醒】手记全攻略

    哈利波特·魔法觉醒 手记全攻略 保姆全攻略 哈利波特手记 1 寻访马人 1.1 线路一(一星) 1.2 线路二(非一星) 1.3 线路三(非一星) 1.4 线路四(非一星) 2 追寻独角兽 2.1 线 ...

  7. 创造与魔法怎么自建服务器,创造与魔法自建服攻略大全_创造与魔法自建服建造方法、福利_玩游戏网...

    今天小编给大家带来的是创造与魔法自建服攻略大全,创造与魔法怎么自建服?自建服和官方服有什么不同?自建服有什么福利?接下来就和小编一起来看看吧,希望能够帮助到大家. 自建服的配置怎样? 自建服与官方大服 ...

  8. 创造与魔法服务器维护,创造与魔法为什么服务器维护 | 手游网游页游攻略大全...

    发布时间:2016-02-29 CF2016年8月11日对服务器进行例行维护.这次维护大家会感觉没什么可更新的呀.来看看99单机小编熊卜卜的CF8月11日服务器维护更新公告 修复火线币商城bug哈. ...

  9. 创造与魔法为啥显示服务器繁忙,创造与魔法进不去服务器繁忙 | 手游网游页游攻略大全...

    发布时间:2016-08-03 方舟适者生存服务器进不去 进不去服务器解决办法攻略.服务器进不去怎么办?很多玩家无法进入服务器,主要是两种情况,一种是点服务器游戏就重启,一种是进不去,这里给大家介绍解 ...

  10. 麦芒6计算机记录,最简单易懂的HUAWEI 麦芒6实用小攻略

    原标题:最简单易懂的HUAWEI 麦芒6实用小攻略 "为啥" 是一个大型综合类问答平台. 主要提供-- 产品咨询.使用帮助.心得分享 梦想互助.情感困惑 等问题答疑服务. 在微博( ...

最新文章

  1. 【PAT乙级】1060 爱丁顿数 (25 分)
  2. 二叉树外部节点_leetcode 102 二叉树的层序遍历1 /BFS
  3. Java 的插件框架 PF4J
  4. Lua和C#调用探秘
  5. centos7同一服务器安装两个或多个Tomcat
  6. php int 设置超时,php如何设置超时时间
  7. C++安全方向(三):3.2 单项散列函数的应用场景
  8. JavaScript学习(五十三)—借用构造方法继承
  9. QT添加资源和样式表(设计窗口背景图)
  10. ip地址块的聚合,计算其聚合后的可用地址数
  11. 武汉大学信息学部到计算机学院,武汉大学信息科学学部
  12. [图文教程]BIOS设置教程
  13. 专知原创和整理了一些中英文机器学习从入门到精通的资料,和大家分享一下
  14. 香港理工大学智能计算实验室招收PhD/博士后/研究助理
  15. VMware中使用U盘PE系统
  16. mpvue开发微信小程序多级联动功能
  17. 智能驾驶定位三大发展趋势是什么?
  18. mysql列转行统计查询_Mysql 列转行统计查询 、行转列统计查询
  19. Android平台GB28181接入模块技术接入说明
  20. 套利套保模型|BVAR、ECM、GARCH、价差

热门文章

  1. 【强化学习】动态规划
  2. 压缩文件暴力破解(免费党的快乐)
  3. 基于51单片机的红外遥控电风扇
  4. QQ群发精灵V3.2
  5. 日记侠:如何提高朋友圈活跃度,给你5种实用方法
  6. Ambiguous mapping. Cannot map ‘xxxController‘ method
  7. 如何将flac音频格式转换mp3格式呢
  8. Jenkins平台搭建
  9. Linux shell中21的含义解释 (全网最全,看完就懂)
  10. java mysql sqlhelper_Java访问MySQL数据库的SqlHelper类以及测试程序