文档章节

play1.x 第二弹 :HTTP路由(routes)

星闪
 星闪
发布于 2017/08/07 14:20
字数 895
阅读 5
收藏 0

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

注:参考了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
作品 0
高级程序员
Play源码深入之七:Play的MVC实现

整体来说,Play1.x是一个较完善的框架,各种功能都一应俱全,有点像句老话“麻雀虽小五脏俱全”哈。虽没有Struts、SpringMVC的大名气,但是使用起来,相当顺手。本文将深入Play1.x的MVC,也整...

刀狂剑痴
2015/08/27
700
0
Ruby On Rails 路由配置简述

1、认识Rails路由配置文件:routes.rb 在Rails应用程序中,routes.rb 文件管理着所有用户从客户端向服务器发送的请求,该如何转化?routes.rb通过分析URL,来确定要调用哪个控制器的哪个Actio...

VincentJiang
2013/10/22
0
1
Linux服务器双网卡双IP和单网卡双IP配置方法(Debian/Ubuntu)

一、双网卡双IP。 eth0为电信,eth1为联通。 # cd /etc/network/ #vi interfaces # This file describes the network interfaces available on your system # and how to activate them. Fo......

90xa
2015/12/14
487
0
MVC中路由器的使用

特性路由的学习。 创建一个ASP.NET MVC应用程序项目,浏览一下Global.asax.cs文件中的代码,注意到ApplicationStart方法中调用了一个名为RegisterRoutes的方法,这个方法集中控制路由的地方,...

浪漫程序人生
2016/04/21
80
0
inhere/php-srouter

php simple router 非常轻量级的路由器。无依赖、简洁、速度快、自定义性强 轻量级且速度快,查找速度不受路由数量的影响 支持路由组。支持路由参数定义,以及丰富的自定义路由选项(比如设定...

inhere
2017/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部