一、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请求方式((GETPATCHPOSTPUTDELETEHEAD)和请求地址

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的更多相关文章

  1. scala(二) Future执行逻辑解读

    在scala中是没有原生线程的,其底层使用的是java的Thread机制.但是在scala中对java Thread进行了封装,实现了更便于操作线程的Future. 官方文档: Futures pro ...

  2. scala(二)

    一.映射 1.Scala映射就是键值对的集合Map.默认情况下,Scala中使用不可变的映射. 如果想使用可变集合Map,必须导入scala.collection.mutable.Map    (导包 ...

  3. PLAY2.6-SCALA(十二) 表单的处理

    一.表单处理流程如下 1.定义一个表单,在这里表单最多有22个字段 import play.api.data._ import play.api.data.Forms._ //要使用验证和约束 imp ...

  4. Scala(二)【基本使用】

    一.变量和数据类型 1.变量 语法:val / var 变量名:变量类型 = 值 val name:String = "zhangsan" 注意 1.val定义的变量想到于java ...

  5. Caliburn.Micro学习笔记(二)----Actions

    Caliburn.Micro学习笔记目录 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions, ...

  6. Scala(二):元组、数组、映射

    元组:Tuple,不同类型值的聚集.将固定数量的项目组合在一起,以便它们可以作为一个整体传递. 与数组或列表不同,元组可以容纳不同类型的对象,但它们也是不可变的.元祖的实际类型取决于它的分量的类型,比 ...

  7. Scala(二) —— 函数

    try 表达式 var result = try{ Integer.parseInt("dog") }catch{ case _ => 0 }finally{ println ...

  8. play1.x vs play2.x 对比(转)

    个人看到对比play1.x和play2.x比较的文章中,写的最深入,最清晰的一个.转自:http://freewind.me/blog/20120728/965.html 为了方便群中的Play初学者 ...

  9. Scala详解

    1       快速入门... 4 1.1             分号... 4 1.2             常变量声明... 4 1.2.1         val常量... 4 1.2.2  ...

随机推荐

  1. C#获取C# DLL中的指定接口的所有实现实例 - qq_19759475的博客 - CSDN博客

    原文:C#获取C# DLL中的指定接口的所有实现实例 - qq_19759475的博客 - CSDN博客 public static List<T> CreateTarInterface& ...

  2. LINUX软件包的安装、升级、删除

    1.安装和升级一个rpm 包: [root@localhost beinan]#rpm -vih file.rpm 注:这个是用来安装一个新的rpm 包: [root@localhost beinan ...

  3. MAC+iTerm定制目录显示颜色和提示符

    知道该如何定制ls时各种类型文件(unix下所有的都是file..)的颜色了. 很简单,就是在.bash_profile下加了三行. export CLICOLOR=1 export LSCOLORS ...

  4. windows 标准错误重定向

    最近在windows上运行tensorflow的时候,出现很多stderr 的信息,干扰了正常的输出:所以我们需要使用操作把这些输出屏蔽: 参考链接:https://support.microsoft ...

  5. LintCode_44 最小子数组

    题目 给定一个整数数组,找到一个具有最小和的子数组.返回其最小和. 注意事项 子数组最少包含一个数字 样例 给出数组[1, -1, -2, 1],返回 -3 思路 动态规划解决 C++代码 int m ...

  6. iFrame 父子窗口通讯

    今天就来说说 iFrame 的父子窗口通讯,关于 iFrame 这里就不陈述了,想要了解的盆友可以百度一下, 由于项目需要,前些天用到了个弹框框架 layer 弹出层,有很多弹出的方式,其中一种就是用 ...

  7. mysql查询某个字段并修改

    比如我存储的数据,有的是 山东,有的是山东省 我想统一改为山东省 UPDATE t_security SET province = REPLACE( province, '山东', '山东省' ) W ...

  8. SSH 框架controller向jsp传递List jsp中使用el表达式获取

    mvc可以使用ModelAndViev传递数据选择跳转的视图 controller中的代码, 把一个模拟的表单studentListSimulate传给ModelAndView @RequestMap ...

  9. day38 08-Spring的id、name和scope顺序

    访问的路径的是/login.id不允许出现特殊的字符./是特殊的字符.Struts 2已经没有/,action的名字已经不带/了.现在的开发中一般使用id这个属性即可. 这个类在被Spring创建的时 ...

  10. Win7x64易语言调试进程无法退出

    这是个历史问题,几乎所有的Win7x64机器上都会碰到这个问题 解决方法: 启动黑月重新编译器