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()的使用。

 

 

 

  

posted @ 2012-04-27 10:04  peterZ.D  阅读(461)  评论(0)    收藏  举报