play1.x 第二弹 :HTTP路由(routes)
来源:互联网 发布:org.apache.http 报错 编辑:程序博客网 时间:2024/06/06 14:19
谨以此系列文章进行学习、记录、分享。
注:参考了play官方文档 https://www.playframework.com/documentation/1.2.x/home
前言:
上一弹我们搭建了一个项目,并导入了eclipse。从一个请求的生命周期,来看当我们接收到一个请求,首先会到我们的路由来分配我们需要哪个action来处理请求。这里就说一下我们的路由文件。
我们的路由文件目录地址conf/routes,他用于配置路由规则。这个文件包含了应用的所有路径映射。每一个路由配置项由HTTP方法,URI模式和对应的Java调用组成。
路由文件的语法
我们看看,一个路由配置项是这样子的:
GET /clients/{id} Clients.show
每一个路由配置项以一个HTTP方法开始,后面跟着URI模式,最后是Java调用的声明。
HTTP方法
你可以给路由文件增加注释,以 # 开头。
# Display a clientGET /clients/{id} Clients.show
如果使用 * 作为方法,则这个路由项将和任何HTTP请求方法相匹配。
* /clients/{id} Clients.show
URI
动态URI
/clients/{id}
将同时匹配以下两者:
/clients/12121/clients/toto
一个URI模式可以包含一个以上的动态部分:
/clients/{id}/accounts/{accountId}
动态部分的默认匹配策略是由正则表达式 /[^/]+/ 来定义的,你也可以为动态部分定义你自己的匹配正则表达式。
下面这个正则表达式只能接受id为数字的URI请求:
/clients/{<[0-9]+>id}
Java调用
路由配置项的最后一部分是Java调用的声明,这部分是由一个action方法的全称来定义的,并且这个action方法必须是一个控制器Controller类中的 public static void 的方法,Controller类必须定义在 controllers 包下,而且必须作为 play.mvc.Controller 的子类。
他的格式是:以controllers包下的相对路径.方法 例如:controllers下的admin包下的Dashboard类的index方法(action)
GET /admin admin.Dashboard.index
指定参数的路径配置:
例如我想page方法的参数id为home的时候进入:
GET /home Application.page(id:'home')GET /pages/{id} Application.page
当page id为‘home’时,上面的两个路由项是等价的。但是,由于第一个路由项的优先级比第二个路由项高,所以当page ID为‘home’时,请求将匹配到第一个路由项。
变量和脚本
你可以在 routes 文件中用 ${ … } 的语法来使用变量,也可以用 %{ … } 的语法来使用脚本,就像在模板templates文件里使用一样。例如:
%{ context = play.configuration.getProperty('context', '') }% # Home pageGET ${context} Secure.loginGET ${context}/ Secure.login
另一个例子可以看CRUD模块的 routes 文件,它使用 crud.types 标签循环遍历所有model类型,为每一个model类型生成一个controller的路由项。
处理静态资源
使用 staticDir 作为特殊的action方法,可以将指定的文件目录公开为静态资源文件的容器。
例如:
GET /public/ staticDir:public
当请求路径与 /public/* 匹配时,Play会从 /pubic 文件夹目录中取得静态资源文件。
- play1.x 第二弹 :HTTP路由(routes)
- play1.x 第三弹 :控制器层(Controllers)
- Play framework 路由(routes)
- play1.x 第一弹 :与play的初次邂逅(搭建,目录结构,生命周期)
- 1.3.1 DYNAMIC ROUTES(动态路由)
- rails routes路由笔记
- Laravel之路由(Routes)
- ASP.NET MVC3中的路由系统(Routes)
- ASP.NET MVC3中的路由系统(Routes)
- ASP.NET MVC3中的路由系统(Routes)
- ASP.NET MVC3中的多路由系统(Routes)
- Laravel最佳分割路由文件(routes.php)的方式
- Play1.2.x源代码阅读之 enhancers
- Play1.2.x源代码阅读之 classloading
- codeiginter -- 路由配置 routes.php
- sencha touch 路由(routes}浅谈
- express3.x中的app.routes
- sencha touch routes(路由) 传递中文参数
- 快速排序
- Java解析Powerdesigner逻辑数据模型
- 【LeetCode】442. Find All Duplicates in an Array
- 刚买的电脑,win10系统,启动tomcat的debug Server时,报如下错误,有人能帮忙解决吧?
- 笨方法学Python 习题 40: 模块、类、对象
- play1.x 第二弹 :HTTP路由(routes)
- Redis介绍以及安装(Linux)
- VIJOS-P1625 精卫填海(背包)
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
- linux shell中“=”左右不能有空格, 晕不晕
- Cygwin下载速度慢
- Gym 101341M Last Man Standing 模拟|贪心
- bzoj2002 Bounce 弹飞绵羊 LCT
- hihocoder1336-Matrix Sum(二维树状数组)