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

13 篇文章 0 订阅

设计应用的一个方面是规划HTTP请求的URL规范,超链接,HTTP表单以及可能的公用API接口。在Play这是通过路由配置,然后在控制器中实现相应的接口。
Play应用中的路由配置可以Controller类构成了MVC框架中的控制层,如下图所示:
20140810001
在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接口的用户界面部分,并添加数据模型。下图显示了这个设计过程:
20140810002
这种设计方式通常是定义符合REST规范的HTTP接口,有时间我们将详细介绍这方面的知识。
配置HTTP请求到Controller类中Action方法的路由
在Play中路由的配置非常灵活,比如:我们可能定义和产品分类相关的URL可能有:

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

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

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

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

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

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

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



 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值