Play Framework Web开发教程(16): 处理HTTP请求和响应

设计应用的一个方面是规划HTTP请求的URL规范,超链接,HTTP表单以及可能的公用API接口。在Play这是通过路由配置,然后在控制器中实现相应的接口。
Play应用中的路由配置可以Controller类构成了MVC框架中的控制层,如下图所示:

在Play应用中Controller为定义了HTTP接口的Scala类,而你的路由配置决定了给定的HTTP请求调用哪个Controller中定义的方法,这些Controller中的方法称为Action(动作),因此Play 的MVC框架也称为基于“动作”的MVC模型,一个Controller定义了一组相关的Action方法。
除了处理HTTP请求之外,动作方法也负责生成HTTP响应。大部分情况,你通过合成HTMLView模板来生成HTTP响应,但一个HTTP响应也可能是一个HTTP错误或者返回其它格式的数据,比如文本,XML或是JSON格式的数据,或者是二进制类型比如图像。
以URL为中心的设计方法
设计Web应用的一个好的开端是定义HTTP接口–它的URL定义。它的其它两种设计方法–以数据为中心或者以UI为中心的设计另外一种变通方式,以URL为中心的设计不代表它比其它两种方式要好,它可能对一些开发人员可能感觉更有效。有时最好的一种方法是同时使用三种设计方式的一种折中方法。
以URL为中心的设计方法意味着区分应中的资源,然后定义这些资源上可能的操作,然后定义一系列的URL以支持访问和操作这些资源。一旦定义好HTTP接口,然后就可以开发基于这些HTTP接口的用户界面部分,并添加数据模型。下图显示了这个设计过程:

这种设计方式通常是定义符合REST规范的HTTP接口,有时间我们将详细介绍这方面的知识。
配置HTTP请求到Controller类中Action方法的路由
在Play中路由的配置非常灵活,比如:我们可能定义和产品分类相关的URL可能有:

1 GET /
2 GET /products
3 GET /products?page=2
4 GET /products?filter=zinc
5 GET /product/5010255079763
6 GET /product/5010255079763/edit
7 PUT /product/5010255079763

为了实现这个方案,你在conf/routes中定义这些路由方案:

1 GET / controllers.Application.home()
2 GET /products controllers.Products.list(page: Int ?= 1)
3 GET /product/:ean controllers.Products.details(ean: Long)
4 GET /product/:ean/edit controllers.Products.edit(ean: Long)
5 PUT /product/$ean<\d{13}> controllers.Products.update(ean: Long)

路由的语法结构定义如下:

后面将详细介绍路径配置文件的语法,这里可以看到定义从HTTP请求到Controller类中方法是多么的直接,并且支持HTTP请求参数到Controller中action方法参数类型的定义,这种方法称为数据绑定。

将HTTP数据绑定到Scala对象
实现HTTP请求到Controller中Action方法的映射只是路由工作的一半任务,Action方法通常带有参数,因此你需要能够把HTTP请求中的数据映射到Action的参数,下图显示了前面例子中请求产品详细信息的请求如果映射到Action方法的过程:

生成不同类型的HTTP响应
Controller不仅处理HTTP请求,同时也生成HTTP响应,大部分情况为返回HTML页面,但也支持其它类型的HTTP响应,比如文本,XML,JSON或是图像等。Play使用Scala对象来处理HTTP数据,也提供了多种Scala类型来处理不同类型的HTTP响应,你可以在Controller的方法中使用这些Scala类型来生成不同类型的HTTP响应。后面我们分别介绍这些类型来支持文本,HTML,JSON或是图像。

Play Framework Web开发教程(16): 处理HTTP请求和响应

时间: 2024-10-16 02:55:38

Play Framework Web开发教程(16): 处理HTTP请求和响应的相关文章

Play Framework Web开发教程(19): 任务–启动一些进程

有些时候,一个Web应用有需要在正常的请求-响应周期之外执行一些代码,比如一些常时间运行的后台任务,或者也是在请求-响应周期中执行,但无需用户交互.比如我们回到之前的产品分类的例子,我们需要跟踪订单是否有人拣选,打包了和发货了.拣选货物涉及了某个人根据订单在仓库中查找订单中的物品,然后可以打包这些货品,交给物流发货.一个实现方法是生成新图所示的货品目录的物品拣选单(和HTML表单无关). 在过去很长的一段时间内,系统构架都假定这些任务都在Web应用外实现,比如在一些旧系统中的批量任务生成. 而今

Play Framework Web开发教程(33): 结构化页面-组合使用模板

和你编写代码类似,你编写的页面也可以由多个小的片段组合而成,这些小的片段本身也可以由更小的片段构成.这些小片段通常是可以在其它页面重复使用的:有些部分可以用在所有页面,而有些部分是某些页面特定的.本篇介绍如何使用这些可重用的小模板来构成整个页面.Includes到目前为止的例子,我们只显示了HTML的片段,没有实例显示整个页面.下面我们给出完整的显现产品列表的代码和模板: 1 def catalog() = Action { 2     val products = ProductDAO.lis

Twisted web开发教程

最近在网上看到一篇twisted web开发文章,将它实践了一下,twisted 提供基本的url路由 和 控制器,模板与模型需要外部扩展 1.目录浏览 2.get请求 3.url路由 4.接受带参数的get请求 5.获取和过期session 获取session 手动设置session过期 再获取一次看是否过期 5-1.session实现一个页面计数器 5.2 移除session 6.get与post请求,表单编写

推荐使用Tiny Framework web开发UI组件

TINY FRAMEWORK 基于组件化的J2EE开发框架,from:http://www.tinygroup.org/ 名字 Tiny名称的来历 取名Tiny是取其微不足道,微小之意. Tiny的构建者认为,一个J2EE开发框架是非常复杂的,只有把框架分解成非常细小.可控的部分,并且对每个细小.可控的部分都有一个最优解或相对最优解, 那么整个方案也就可以非常不错的落地. 策略 Tiny框架的构建策略 Think big, start small, scale fast. 想法要宏伟,但是要从小

谷歌浏览器web开发教程之开始篇:使用sublime

你的代码编辑器是主要的开发工具:你使用它去编辑和保存代码段.你可以通过学习编辑器快捷键和以及安装关键插件来好而快的写出代码. 目录 安装sublime文本编辑器 为什么使用包管理器? 安装插件 摘要 选择一个编辑器,定制快捷键,并安装插件来帮助你写出更好的代码. 利用软件包管理器,使其更容易发现.安装和更新插件. 安装插件,有助于提高你编辑代码的效率:从本指南中的建议的插件开始. 安装sublime编辑器 Sublime是一个伟大的编辑器,拥有很多强大的,可定制的功能,这增添了你编写代码的乐趣.

DuiVision开发教程(16)-区域控件

DuiVision的area控件(类名是CArea)可以设置区域的渐变透明度,不能响应鼠标事件,此控件的原理是画一个填充的透明度渐变矩形区域,透明度从矩形区域顶部究竟部均匀渐变. 控件的属性包含: 属性名 类型 说明 color 颜色 矩形区域的颜色 begin-transparent 字体 矩形区域顶部的起始透明度 end-transparent 字符串 矩形区域底部的终止透明度 DuiVision Demo程序的非常多界面都用到了area控件来实现渐变效果,比如,例如以下的登录对话框以下的渐

WEB开发教程--ASP中静态数组与动态数组的用法

在ASP中,数组是具有相同名字的一组变量,数组中包含多个元素,由不同的下标值区分数组的各个元素.在VBScript中,数组有两种类型:静态数组和动态数组. 1.静态数组 静态数组在编译时开辟内存区,数组大小在运行时不可改变. 定义一个一维数组mmArray(3) Dim mmArray(3) mmArray(0)=1 mmArray(1)=3 mmArray(2)=5 mmArray(3)=7 其中mmArray是数组名,数组的下界为0,上界为3,数组元素从mmArray(0)到mmArray(

web开发的基础知识:http请求

引用自:http://blog.csdn.net/yefan2222/article/details/6198098 http://baike.baidu.com/view/1628025.htm?fromtitle=http&fromid=243074&type=syn 1.HTTP协议 Internate的基本协议是TCP/IP(传输控制协议和网际协议).而目前使用的FTP,HTTP都是建立在TCP/IP上的应用层协议.不同的协议对应不同的应用.而HTTP协议是Web应用所使用的主要协

Django 教程 Part 1:请求与响应

版本说明: 因为在撰写本教程的时候,正逢Django从1.11向2.0转变的时期,而教程的编写是从17年8月开始的,前后共花了5个月左右的时间,所以使用的是1.11版本,局面非常尴尬. 实际上Django2.0和Django1.11对于一般使用而言,就是在路由系统的写法上面有那么点小小的区别.其它的差别,非重度涉及底层的用户基本感受不出来. 基于本教程,如果你使用的是2.0以上版本,在后面的章节中,你只需要使用from django.urls import re_path正确导入re_path(