PLAY2.6-SCALA(二) Actions, Controllers ,Results,routes
一、Action(play.api.mvc.Action)
大多数的应用的请求都是由action进行处理,并生成一个结果给客户端,Action有多种创建方式:
1.
- Action {Ok("Hello world")}
2.
- Action { request =>Ok("Got request [" + request + "]")}
3.
- Action { implicit request =>Ok("Got request [" + request + "]")}
4.
- def action = Action { implicit request =>
- anotherMethod("Some para value")
- Ok("Got request [" + request + "]")
- }
def anotherMethod(p: String)(implicit request: Request[_]) = {
// do something that needs access to the request
}
5.
- Action(parse.json) { implicit request =>Ok("Got request [" + request + "]")}
6.空的响应
- def index(name:String) = TODO
二、 controller
controller通常是生成Action值的对象,通常把它定义为一个类而不是一个对象,例如:
- package controllers
- import javax.inject.Inject
- import play.api.mvc._
- class Application @Inject()(cc: ControllerComponents)extends AbstractController(cc) {
- def index = Action {
- Ok("It works!")
- }
- }
三、Result(play.api.mvc.Result)
1.带header和body的http结果
- import play.api.http.HttpEntity
- def index = Action {
- Result(
- header = ResponseHeader(200, Map.empty),
- body = HttpEntity.Strict(ByteString("Hello world!"), Some("text/plain"))
- )
- }
其他的一些结果
- val ok = Ok("Hello world!")
- val notFound = NotFound
- val pageNotFound = NotFound(<h1>Page not found</h1>)
- val badRequest = BadRequest(views.html.form(formWithErrors))
- val oops = InternalServerError("Oops")
- val anyStatus = Status(488)("Strange response type")
2.重定向到一个新的URL
- def index = Action {Redirect("/user/home", MOVED_PERMANENTLY)}
四、Routes(conf/routes)
主要包含http请求方式((GET
, PATCH
, POST
, PUT
, DELETE
, HEAD
)和请求地址
1.动态请求地址
- GET /clients/:id controllers.Clients.show(id: Long)
包含多层结构的地址
- GET /files/*name controllers.Application.download(name)
/files/images/logo.png
中*name代表的是 images/logo.png
带正则表达式的地址
- GET /items/$id<[0-9]+> controllers.Items.show(id: Long)
2.函数参数
- GET /:page controllers.Application.show(page)
- GET / controllers.Application.show(page)
第二个函数的参数,是请求到的内容
例子:
- def show(id: Long) = Action {
- Client.findById(id).map { client =>
- Ok(views.html.Clients.display(client))
- }.getOrElse(NotFound)
- }
- GET /clients controllers.Clients.list(page: Int ?= 1)
函数的参数带默认值
- GET /api/list-all controllers.Api.list(version: Option[String])
可选的参数
3.反向路由
- package controllers
- import javax.inject.Inject
- import play.api._
- import play.api.mvc._
- class Application @Inject()(cc:ControllerComponents) extends AbstractController(cc) {
- def hello(name: String) = Action {
- Ok("Hello " + name + "!")
- }
- }
- GET /hello/:name controllers.Application.hello(name)
- def helloBob = Action {Redirect(routes.Application.hello("Bob"))}
4.相对路由
- package controllers
- import javax.inject._
- import play.api.mvc._
- @Singleton
- class Relative @Inject()(cc: ControllerComponents) extends AbstractController(cc) {
- def helloview() = Action { implicit request =>
- Ok(views.html.hello("Bob"))
- }
- def hello(name: String) = Action {
- Ok(s"Hello $name!")
- }
- }
- GET /foo/bar/hello controllers.Relative.helloview
- GET /hello/:name controllers.Relative.hello(name)
- @(name: String)(implicit request: RequestHeader)
- <h1>Hello @name</h1>
- <a href="@routes.Relative.hello(name)">Absolute Link</a>
- <a href="@routes.Relative.hello(name).relative">Relative Link</a>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <title>Bob</title>
- </head>
- <body>
- <a href="/hello/Bob">Absolute Link</a>
- <a href="../../hello/Bob">Relative Link</a>
- </body>
- </html>
5.一些默认的
- # Redirects to https://www.playframework.com/ with 303 See Other
- GET /about controllers.Default.redirect(to = "https://www.playframework.com/")
- # Responds with 404 Not Found
- GET /orders controllers.Default.notFound
- # Responds with 500 Internal Server Error
- GET /clients controllers.Default.error
- # Responds with 501 Not Implemented
- GET /posts controllers.Default.todo
PLAY2.6-SCALA(二) Actions, Controllers ,Results,routes的更多相关文章
- scala(二) Future执行逻辑解读
在scala中是没有原生线程的,其底层使用的是java的Thread机制.但是在scala中对java Thread进行了封装,实现了更便于操作线程的Future. 官方文档: Futures pro ...
- scala(二)
一.映射 1.Scala映射就是键值对的集合Map.默认情况下,Scala中使用不可变的映射. 如果想使用可变集合Map,必须导入scala.collection.mutable.Map (导包 ...
- PLAY2.6-SCALA(十二) 表单的处理
一.表单处理流程如下 1.定义一个表单,在这里表单最多有22个字段 import play.api.data._ import play.api.data.Forms._ //要使用验证和约束 imp ...
- Scala(二)【基本使用】
一.变量和数据类型 1.变量 语法:val / var 变量名:变量类型 = 值 val name:String = "zhangsan" 注意 1.val定义的变量想到于java ...
- Caliburn.Micro学习笔记(二)----Actions
Caliburn.Micro学习笔记目录 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions, ...
- Scala(二):元组、数组、映射
元组:Tuple,不同类型值的聚集.将固定数量的项目组合在一起,以便它们可以作为一个整体传递. 与数组或列表不同,元组可以容纳不同类型的对象,但它们也是不可变的.元祖的实际类型取决于它的分量的类型,比 ...
- Scala(二) —— 函数
try 表达式 var result = try{ Integer.parseInt("dog") }catch{ case _ => 0 }finally{ println ...
- play1.x vs play2.x 对比(转)
个人看到对比play1.x和play2.x比较的文章中,写的最深入,最清晰的一个.转自:http://freewind.me/blog/20120728/965.html 为了方便群中的Play初学者 ...
- Scala详解
1 快速入门... 4 1.1 分号... 4 1.2 常变量声明... 4 1.2.1 val常量... 4 1.2.2 ...
随机推荐
- MUI使用vue示例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- dom4j和document
DOM的优点和缺点: 优点:DOM操作思维清晰,简单 缺点:在操作大量数据的时候性能,不能保证 DOM(Document Object Model) // 表示出需要被操作的XML文件的路径,注意是文 ...
- oracle基础学习(1)
-解锁用户,需要使用dba权限conn sys/1234 as dba; alert user scott account unlock;/ --initcap方法,实现字符串首字符大写,其余字符小写 ...
- VS2005+VTK读入点云文件
使用VTK读入点云文件的基础代码: 头文件: 也许不是全部都用到,为了接下来得工程还是全部都包含进去了 #include "vtkRenderer.h" #include &quo ...
- springcloud:Eureka的使用
1.认识Eureka 服务的管理. 问题分析 在刚才的案例中,itcast-service-provider对外提供服务,需要对外暴露自己的地址.而consumer(调用者)需要记录服务提供者的地址. ...
- 安装ubuntn16.04重启后出现grub secure界面
参考:http://jingyan.baidu.com/article/c85b7a640cd7d6003bac95f8.html 安装ubuntn重启后出现grub secure界面的原因是在安装过 ...
- OpenLayers测量距离和面积
<!DOCTYPE html> <html> <head> <title>测量距离和面积</title> <meta http-equ ...
- Docker搭建的MySQL容器出现 "Too many connections 1040" 最大连接数修改完未生效的解决方案
原文:Docker搭建的MySQL容器出现 "Too many connections 1040" 最大连接数修改完未生效的解决方案 版权声明:本文为博主原创文章,未经博主允许不得 ...
- 大半夜吃饱了撑的帮人调IE玩
那高手的也是IE6,我也是IE6,但是他的IE6就总是进recv,我的IE6就进WSARecv,一点都不科学...擦..不调了.
- update当根据条件不同时 更新同一个字段的方法 或多表插入
1.通过存储过程 循环 传值 create or replace procedure p_u isbegin for rs in (select distinct (rks) from rkbz)lo ...