play教程 第四课 routes文件的使用

来源:互联网 发布:电脑怎么看淘宝直播 编辑:程序博客网 时间:2024/05/16 14:45

路由配置——routes配置文件的使用


routes配置文件是play中很棒的一个文件,给我们提供了极大的方便,也正是这个文件的妙用,助力了play的REST风格。

简单讲,routes配置文件的目的就是给出地址栏一个url,通过routes文件要找到相应的controllers层下面的方法进行处理。

-语法
routes文件包含三个主要部分:
part1——HTTP请求方法(如GET/POST/DELETE等),
part2——URI(浏览器访问的路径格式),
part3——controllers层的方法。


                                                                             图4-1
-HTTP请求方法
标准HTTP,支持六种请求方法——GET/POST/PUT/DELETE/HEAD/OPTIONS。但是我们通常在使用时,一般只用到GET和POST。真正的REST风格应用,建议把这几种请求方法都应用起来。那我们就可以通过完全相同的URI、不同的请求方法,来实现不同的操作。举例来讲,同样一个URI,http://localhost/article/1099,我们用GET方法可以做查询操作,而通过使用DELETE请求方法则可以进行删除操作。这里做一点扩展,简单讲一下6种请求方式,不感兴趣的可以略过。
GET:这是最常见的,本质就是向服务器发送一个请求,来取得服务器上的某个资源。
POST:这个也是经常用到的,向服务器提交数据。
HEAD:它和GET本质是一样的,只不过HEAD只包含头信息,不包含呈现数据,想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
PUT:这个方法比较少见,和POST类似,提交数据时,通常指定具体的URI。
DELETE:这个也比较少见,本质就是通过这个删除一个资源。
OPTIONS:请求查询服务器的性能,或查询与资源相关的选项和需求。

-URI访问路径
URI的定义格式有很多种,我们逐一描述。
[html] view plain copy 在CODE上查看代码片派生到我的代码片
  1. GET /signup Application.signup  
这是最基本的方式,在浏览器中输入/signup,就可直接定位到Application.signup。

[html] view plain copy 在CODE上查看代码片派生到我的代码片
  1. GET /signup/{uuid} Application.confirmRegistration  
{uuid}指的是客户端请求的参数,同时confirmRegistration方法的参数应该为uuid才能正确取值。

[html] view plain copy 在CODE上查看代码片派生到我的代码片
  1. GET /forums/{<[0-9]+>forumId} Forums.show  
更高级的,这里可以来一个正则表达式,也就是说参数是以数字开头时,才调用这个方法。

[html] view plain copy 在CODE上查看代码片派生到我的代码片
  1. GET /album/{albumId}/photo/{photoId} Photo.show  
这种情况也是比较常用的,和第二种情况类同比较即可理解。

另外,Play认为斜杠 / 是很重要的,不可忽略。例如,看看下面这个路由项:
[html] view plain copy 在CODE上查看代码片派生到我的代码片
  1. GET     /clients         Clients.index   
它将会匹配 /clients 但是不会匹配 /clients/ 。你可以通过在斜杠 / 后加上一个问号 ? ,让这个路由项匹配到URI尾部含有斜杠 / 或者没有斜杠 / 的两种情况,例如:
[html] view plain copy 在CODE上查看代码片派生到我的代码片
  1. GET     /clients/?       Clients.index  
再如
[html] view plain copy 在CODE上查看代码片派生到我的代码片
  1. /userListMenu/?{id}?  
这种路由说明可以有斜杠,也可以没有;可以有id,也可以没有。

最后,再来一个大BOSS
[html] view plain copy 在CODE上查看代码片派生到我的代码片
  1. *              /{controller}/{action}                  {controller}.{action}  
这就是catch all了,所有情况都捕获。也就是说当你写了一个controller时,不用在routes文件里配置路由,通过浏览器直接输入所写的controller/method,也可访问到该资源。

-Controller方法
最后一部分的元素就是Controller元素,这里对应写controller层下的操作方法。注意这里的方法在controller类里一定要用public static 修饰,否则是找不到的。如果controller类在多级包下面,就需要加上包名,packagename.ControllerName.MethodName

-访问静态资源
[html] view plain copy 在CODE上查看代码片派生到我的代码片
  1. GET /public staticDir:public  
通过这种方式,可以定位到public目录,但是单独一个目录是不能打开的,你可以通过在浏览器中输入localhost:9000/public/images/a.png这种url来定位到public下的某个资源。

-注释
我们可以给route文件增加注释,以#开头
[html] view plain copy 在CODE上查看代码片派生到我的代码片
  1. # 显示Blog列表  
  2. GET         /blog                                            Blog.show  

0 0
原创粉丝点击