文档章节

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

星闪
 星闪
发布于 2017/08/07 14:20
字数 895
阅读 5
收藏 0
点赞 0
评论 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 ⋅ 0

Ruby On Rails 路由配置简述

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

VincentJiang ⋅ 2013/10/22 ⋅ 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 ⋅ 0

MVC中路由器的使用

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

浪漫程序人生 ⋅ 2016/04/21 ⋅ 0

01. Laravel 4 路由

基础路由 URL 地址: 对应的路由设置: 可供使用的路由类型 分别对应 (查看) (新增) (修改) (删除) 这4种URL请求类型。 而 则是包含了以上4种请求类型。 使用外部定义的匿名函数 使用路由参数...

成武 ⋅ 2013/12/20 ⋅ 0

ASP.NET MVC 5 - 控制器

MVC代表: 模型-视图-控制器 。MVC是一个架构良好并且易于测试和易于维护的开发模式。基于MVC模式的应用程序包含: ・ Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据...

葡萄城控件技术团队 ⋅ 2014/06/11 ⋅ 0

inhere/php-srouter

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

inhere ⋅ 2017/05/27 ⋅ 0

sails 特色路由 blueprints 的支持及自定义路由

blueprints 是 sails 框架特色功能 Sails中的路由,blueprint 功不可没,网上翻译成 “蓝图” , Sails的blueprint是负责指挥每一条客户端请求应该分配到服务器端的哪个Action去 ,你可以理解成...

一介布衣 ⋅ 2016/08/25 ⋅ 0

zf2.2配置路由规则示例

1 配置路由规则的文件位置: module/moduleName/config/module.confg.php 2 zf2.2的路由类型: 有8种,分别为Hostname, Literal, Method, Part, Regex, Scheme, Segement, Query 示例一 : 一......

雪之丞 ⋅ 2013/09/13 ⋅ 2

06. Laravel 4 高级路由

命名路由 模板中生成指向此路由的链接: 若需获取当前路由的名称,可以使用 方法。 安全路由(HTTPS) 路由参数过滤 分组路由 路由前缀 如此,访问链接将变成 和 。 域名路由 如此,访问链接...

成武 ⋅ 2013/12/20 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Bean基础

1、Bean之间引用 <!--如果Bean配置在同一个XML文件中,使用local引用--><ref bean="someBean"/><!--如果Bean配置在不同的XML文件中,使用ref引用--><ref local="someBean"/> 其实两种......

霍淇滨 ⋅ 26分钟前 ⋅ 0

05、基于Consul+Upsync+Nginx实现动态负载均衡

1、Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/local/srcwget https://releases.hashicorp.com/consul/0.7.5/consul_0.7.5_linux_amd64.zip 解压consu......

北岩 ⋅ 29分钟前 ⋅ 0

Webpack 4 api 了解与使用

webpack 最近升级到了 v4.5+版 01 官方不再支持 node4 以下版本 官方不再支持 node4 以下版本官方不再支持 node4 以下的版本,所以如果你的node版本太低,先开始升级node吧!话说node10 ...

NDweb ⋅ 38分钟前 ⋅ 0

使用nodeJs安装Vue-cli

Vue脚手架就是一个Vue框架开发环境 脚手架的意思是帮你快速开始一个vue的项目,也就是给你一套vue的结构,包含基础的依赖库,只需要 npm install就可以安装,让我们不需要为了编辑或者一些其...

木筏笔歆 ⋅ 今天 ⋅ 0

【微信小程序开发实战】0x00.开发前准备工作

写在开始 本人资深后端码农一枚,近期项目需求,接触到了微信小程序,将学习过程整理成文分享给小伙伴们,由于是边学边整理难免有表述不对的地方,望大家及时指正,感谢。 本人微信号: dream...

dreamans ⋅ 今天 ⋅ 0

linux redis的安装和php7下安装redis扩展

安装redis服务器 (1)下载安装包: $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz (2)编译程序: $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make $ cd src &&......

concat ⋅ 今天 ⋅ 0

Guava EventBus源码解析

一、EventBus使用场景示例 Guava EventBus是事件发布/订阅框架,采用观察者模式,通过解耦发布者和订阅者简化事件(消息)的传递。这有点像简化版的MQ,除去了Broker,由EventBus托管了订阅&...

SaintTinyBoy ⋅ 今天 ⋅ 0

http怎么做自动跳转https

Apache 版本 如果需要整站跳转,则在网站的配置文件的<Directory>标签内,键入以下内容: RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME......

Helios51 ⋅ 今天 ⋅ 0

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 今天 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部