play1.x 第二弹 :HTTP路由(routes)
博客专区 > 星闪 的博客 > 博客详情
play1.x 第二弹 :HTTP路由(routes)
星闪 发表于4个月前
play1.x 第二弹 :HTTP路由(routes)
  • 发表于 4个月前
  • 阅读 3
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: routes(Play的路径映射机制)组件负责将HTTP请求交给对应的action(一个控制器Controller的公共静态方法)处理。 对于MVC框架来说,一个HTTP请求可以看成一个事件。这个事件包含2方面的信息: 请求的路径(例如 /clients/1542, /photos/list),包括查询字符串(Query String). HTTP的请求方法 (GET, POST, PUT, DELETE)

谨以此系列文章进行学习、记录、分享。

注:参考了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 client
GET    /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 page
GET    ${context}         Secure.login
GET    ${context}/        Secure.login

    另一个例子可以看CRUD模块的 routes 文件,它使用 crud.types 标签循环遍历所有model类型,为每一个model类型生成一个controller的路由项。

    处理静态资源

    使用 staticDir 作为特殊的action方法,可以将指定的文件目录公开为静态资源文件的容器。

    例如:

GET    /public/           staticDir:public

    当请求路径与 /public/* 匹配时,Play会从 /pubic 文件夹目录中取得静态资源文件。

 

共有 人打赏支持
粉丝 0
博文 5
码字总数 5173
×
星闪
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: