HTTP Routing
$ 内置的HTTP 路径:有两部分组成:
- 请求的路径(如:/clients/1532,/photos/list),包括查询字符串
- HTTP 方法(GET ,POST ...)
路径定义在conf/routes文件里。可以直接在浏览器里看到路径error
$ 路径文件语法
conf/routes列出应用中所有需要的路径。语法如下:
GET /clients/:id controllers.Clients.show(id : Long)
$ URI模式:URI模式定义请求的路径,部分可以是动态的。
动态的:GET /clients/:id controllers.Clients.show(id : Long)
包含几个/部分的动态:
GET /files/*name controllers.Application.download(name)
比如有一个请求:GET /files/images/logo.png 这里的name动态部分会得到images/logo.png这个值
自定义正则表达式的动态部分:
GET /clients/$id<[0-9]+> controllers.Clients.show(id: Long)
$ 调用Action生成器的方法
路径的最后部分要能调用一个Controller里的合法的Action。如果这个方法是有参数的,那么这些参数会在请求URI中去找,可以从URI中抽取,也可以从查询字符串中得到。
参数类型:可以让Play把传过来的参数转换成指定的Scala类型。但是在路径文件中的类型要跟Controller中的参数类型一致。
默认参数值:
# Pagination links, like /clients?page=3 GET /clients controllers.Clients.list(page: Int ?= 1)
$ 路径优先级:可以有几个路径来响应同一个请求。如果发生冲突,会使用第一个定义的路径。
$ 路径反转(reverse routing):
可以在Scala调用里生成一个URL,这样方便页面的控制。
在routes file里定义的每个控制器,router会生成一个“reverse controller” 在routes 包下,有同样的action方法,同样的标记,但用返回一个play.api.mvc.Call来代替一个play.api.mvc.Action
play.api.mvc.Call定义一个HTTP调用,提供HTTP方法和URI。例:
在Controller中定义:
package controllers import play.api._ import play.api.mvc._ object Application extends Controller { def hello(name: String) = Action { Ok("Hello " + name + "!") } }
在conf/routes文件中定义:
# Hello action
GET /hello/:name controllers.Application.hello(name)
则可以在类文件中使用:
// Redirect to /hello/Bob def helloBob = Action { Redirect(routes.Application.hello("Bob")) }
注意routes.Application.hello()的使用。
浙公网安备 33010602011771号