本文来自:http://fair-jm.iteye.com/
转截请注明出处
play的请求处理:
请求==>选择Route==>绑定(进行类型转换) ==>调用Action
routers文件基本:
GET / controllers.Application.home() GET /products controllers.Products.list(page: Int ?= 1) GET /product/:ean controllers.Products.details(ean: Long) GET /product/:ean/edit controllers.Products.edit(ean: Long) PUT /product/:ean controllers.Products.update(ean: Long)
:参数的写法是不能包括/的
用*包括/
GET /photo/*file controllers.Media.photo(file: String)
这样
/photo/5010255079763.jpg /photo/customer-submissions/5010255079763/42.jpg /photo/customer-submissions/5010255079763/43.jpg
都可以匹配上
routes可以包含其他的routes文件
例如有个其他的routes文件叫做barcode.routes可以在routes里写上: 加一个前缀
-> /barcode barcode.Routes
增加静态文件映射
Play中用Assets增加其他的映射路径 例如增加一个html/file的:
GET /html/:file controllers.Assets.at(path="/public/html", file) GET /assets/*file controllers.Assets.at(path="/public", file)
这样main.scala.html中如果写:
@routes.Assets.at("stylesheets/main.css") 就会报错
这是因为生成的反转Assets中已经有两个path的可能是 要写成@routes.Assets.at("/public","stylesheets/main.css")
原因:
class ReverseAssets { // @LINE:11 // @LINE:9 def at(path:String, file:String): Call = { (path: @unchecked, file: @unchecked) match { // @LINE:9 case (path, file) if path == "/public/html" => Call("GET", _prefix + { _defaultPrefix } + "html/" + implicitly[PathBindable[String]].unbind("file", dynamicString(file))) // @LINE:11 case (path, file) if path == "/public" => Call("GET", _prefix + { _defaultPrefix } + "assets/" + implicitly[PathBindable[String]].unbind("file", file)) } } }
匹配正则:
GET /product/:ean controllers.Products.details(ean: Long) GET /product/:alias controllers.Products.alias(alias: String)
这样的写法是错误的 第二个不可达 总是会到达第一个如果是String类型的就会匹配出现转型异常
可以使用正则:
GET /product/$ean<\d{13}> controllers.Products.details(ean: Long) GET /product/:alias controllers.Products.alias(alias: String)
绑定的环节可以自己定义
REDIRECT-AFTER-POST
HTTP/1.1 302 Found
Location: http://localhost:9000/products
routing反转(原来是URL->Action 代码中可以由Action->URL):
Redirect(routes.Products.list()) 这里就用到了routing反转
routes.Products.list()-->controllers.ReverseProducts-->Call("GET","/products")
别忘了一个Action可是会被多个URL对应的 在反转时匹配第一个出现的URL
play会自动生成反转的类 controllers.routes.类名.方法名
例如:
val call = controllers.routes.Products.list()
这只对controllers包里的有效 不在controllers包内的Controller 写完整的包.类名
Action返回二进制数据
用Ok(Byte数组).as(MIME类型)就行了
状态行 头部 内容
状态红用Status()返回 用withHeaders带上头部 比如:
Redirect(url)是由:Status(FOUND).withHeaders(LOCATION -> url) 实现的
Ok(json).withHeaders(CONTENT_TYPE -> "application/json")更简单的写法是:
Ok("""{ "status": "success" }""").as("application/json")
使用session data保存内容:
Ok(results).withSession( request.session + ("search.previous" -> query) )
session是Map[String,String]的形式
session是通过HTTP session cookie实现的 大小有限不要存放太大的数据(只有4KB)
使用Flash Scope为redirect传递数据:
Redirect(routes.Products.flash()).flashing(
"info" -> "Product deleted!"
)
获取用:
val message = request.flash("info")
静态资源:
获取还是使用反转routing比较方便
<link href="@routes.Assets.at("images/favicon.png")" rel="shortcut icon" type="image/png">
Assets是个默认就有的控制器 在routes文件中可以看到
静态资源的压缩:
在request中 客服端在请求头上写明支持gzip 例如:Accept-Encoding:
gzip
服务器如果支持就会发送压缩的数据 并在回复头上写着:Content-Encoding: gzip
Play返回有几个条件:
1、在生产模式下(开发模式不开启)
2、请求资源是Assets控制器管理的
3、客服端允许(Accept-Encoding)Gzip
4、在静态文件目录下有和请求的资源相同名但后缀是.gz的文件
本笔记是个人整理所得 陆续部分会整理好之后放出
如要转截 请注明作者:fair_jm
笔记如有错误欢迎指正^_^
相关推荐
2. **无XML配置**:Play Framework倾向于使用Java注解和纯代码配置,避免了XML配置文件的繁琐,降低了学习曲线,同时也减少了出错的可能性。 3. **简单的路由系统**:通过简单的 routes 文件,你可以定义URL与控制...
Play Framework 2.0 是一个开源的Web应用框架,它基于Scala和Java语言,遵循“模式-动作”(Action)架构,提供了一种轻量级、敏捷开发的方式。本篇文章将引导你通过创建一个简单的待办事项(Todo List)应用来了解...
Play Framework 2.0 是一个基于Java和Scala的开源Web应用程序框架,以其“写后即运行”的特性而闻名。这个入门教程的第三部分是关于如何使用Play Framework构建一个简单的留言板应用。在这里,我们将深入探讨Play ...
Play Framework是一个强大的、基于Java和Scala的开源Web应用程序框架,它采用模型-视图-控制器(MVC)架构模式,以简洁的API和直观的开发体验受到开发者喜爱。本篇文章将详述如何在Windows环境下安装配置Play环境...
《Play Framework 框架手册》是一份深入介绍Play框架的文档,主要涵盖了从基础概念到高级特性的全面内容,适合初学者和经验丰富的开发者参考。以下是对手册中部分核心知识点的详细阐述: 1. **MVC应用程序模型**:...
Play Framework 是一个基于Java和Scala的高性能Web应用框架,它提供了快速开发、可测试和敏捷迭代的能力。在Play Framework中,安全模块是一个重要的组件,它帮助开发者实现基本的认证(Authentication)和授权...
通过简单的代码和思路写了play framework的简单的小例子,包括添加页面进行的routes配置,页面跳转,页面之间的数据传递等方面。暂时未使用h2内置数据库及ArrayList、HashMap在页面之间的数据传递。
Play Framework 是一个基于Java和Scala的开源Web应用框架,它以简洁、快速和类型安全而闻名。在"学生信息管理系统"这个项目中,我们可以看到它被用来构建一个用于管理学生数据的应用。JavaEE(Java Platform, ...
1. **路由(Routes)**:在Play Framework中,路由文件定义了URL模式到控制器方法的映射。在这个博客示例中,我们可能可以看到类似`GET /blog POST /blog/new GET /blog/:id`这样的路由规则,分别对应于查看博客列表...
《Play Framework Cookbook 代码》是针对使用Play Framework开发Web应用的开发者的一份宝贵资源,它包含了一系列实践示例和解决方案,旨在帮助开发者更好地理解和运用这个强大的框架。Play Framework是一款基于Java...
Play Framework是一款基于Java和Scala的开源Web应用框架,它遵循模型-视图-控制器(MVC)架构模式,旨在提供高效、简洁且快乐的开发体验。在“Play Framework应用程序框架 v2.9.1.zip”这个压缩包中,包含的是Play ...
#### 十二、Play Framework生成的war包内容 Play框架支持生成WAR文件,这使得应用可以直接部署到传统的Java应用服务器上。WAR文件包含了所有必要的库和配置文件,使得部署过程变得简单。 总之,Play框架提供了一种...
Playframework 1.2.7 是一个开源的Java和Scala Web应用框架,它采用模型-视图-控制器(MVC)架构模式,并且是基于事件驱动的,这使得开发过程更加高效和简洁。这个zip包"play1.2.7.zip"包含了Playframework的SDK,...
Play框架是Java和Scala开发Web应用的一个强大工具,它提供了模型-视图-控制器(MVC)架构模式,使得开发者能够快速、高效地构建现代Web应用。在这个“Play框架2.0入门教程(四)的源代码”中,我们主要探讨的是如何在...
Play Framework 是一个基于Java和Scala的开源Web应用框架,它采用了模型-视图-控制器(MVC)架构模式。在本文中,我们将深入探讨Play Framework的一些核心特点、优势以及一个简单的小实例,帮助你理解其工作原理和...
在当今的Web开发领域,Play Framework 2.x以其高效、灵活和易用性,成为Scala和Java开发者青睐的框架之一。本教程系列——"PlayBasics",旨在帮助初学者及有一定经验的开发者深入理解并熟练运用Play Framework 2.x...
所有的HTTP请求都遵循下面的处理流程: Playframework是一个无状态的面向请求/回应的框架,所有的HTTP请求都遵循下面的处理流程: 框架接收到一个HTTPRequest Router组件试图从conf/routes文件中找出对应的...
Play Framework的验证机制允许开发者在多个层次上对数据进行验证,确保应用程序的数据质量和安全性。它可以轻松地集成到控制器和模型中,提供了丰富的验证规则和自定义验证的能力,使得开发更加高效且可控。通过这些...
Play框架是一款基于Java和Scala的开源Web应用...总之,这个“Play框架jar包”资源为开发者提供了搭建Play应用所需的基础组件,通过理解和熟练运用这些jar包,开发者可以快速、高效地构建出高性能、可扩展的Web应用。