Scala下Play框架学习笔记(Manipulating Results)

更改默认的content type

根据响应体中指定的scala值,可以自动地推断出结果的content type,举例如下:

val textResult = Ok("Hello World!")

这将自动地把content-type的头部设置成text/plain,同时:

val xmlResult = Ok(<message>Hello World!</message>)

这个会把头部设置成application/xml

以上通过play.api.http.ContentTypeOf这个类来实现。用as(newContentType)可以强制转换header的content type,

val htmlResult = Ok(<h1>Hello World!</h1>).as("text/html")

或者如下:

val htmlResult2 = Ok(<h1>Hello World!</h1>).as(HTML)

使用HTML类型,头部会被自动设置成text/html; charset=utf-8。

可以在结果中添加HTTP头部:

val result = Ok("Hello World!").withHeaders(
  CACHE_CONTROL -> "max-age=3600",

ETAG -> "xx")

Cookies是一个特殊格式的HTTP头部,使用一系列的帮助类使他变得更容易。把Cookies加入到HTTP响应中:

val result = Ok("Hello world").withCookies(

Cookie("theme", "blue"))

丢弃浏览器存放的cookies:

val result2 = result.discardingCookies(DiscardingCookie("theme"))

两者还可以混用:

val result3 = result.withCookies(Cookie("theme", "blue")).discardingCookies(DiscardingCookie("skin"))

更改文本类型的HTTP响应的字符集

HTTP响应默认使用utf-8

字符集不仅用来把文本响应转换成对应的字节流,进行网络传输, 而且用";charset=xxx"来更新content-type头部。

通过play.api.mvc.Codec这个类,字符集被自动处理。在当前范围内,导入play.api.mvc.Codec这个隐式类可以更改字符集,用以下的方式操作:

class Application extends Controller {

implicit val myCustomCharset = Codec.javaSupported("iso-8859-1")

def index = Action {
    Ok(<h1>Hello World!</h1>).as(HTML)
  }

}

关于HTML的定义:

def HTML(implicit codec: Codec) = {
  "text/html; charset=" + codec.charset

}

时间: 2024-10-17 10:20:09

Scala下Play框架学习笔记(Manipulating Results)的相关文章

Scala下Play框架学习笔记(Actions,Controllers and Results)

Scala下Play框架的学习是一件辛苦的事情,因为该框架比较新,scala语言也较新,所以中文资料很少,经过同事推荐,去了如下英文网站看资料: https://www.playframework.com/documentation/2.5.x/ScalaHome 虽然我的同事以在云中飞的速度学完了,但对我来说还是任重而道远. Action是什么? 由于Scala和Play有关的API都在play.api下面,所以其实Action的过程是这样的: play.api.mvc.Action(play

Scala下Play框架学习笔记(Http Routing)

内置的HTTP路由 路由把每一个引进来的HTTP请求对应到相应的Action去. HTTP请求被认为是MVC框架下的一个事件,这一事件包含两部分主要信息: (1)请求路径,包括query String (2)HTTP方法,如get,post等 路由被定义在经过编译的conf/routes中,因此你能在浏览器上直接看到报错信息. conf/routes中每一行一般由HTTP方法和相应URI组成: GET   /clients/:id          controllers.Clients.sho

Scala下Play框架学习笔记(Session and Flash scopes)

session和flash scope 的区别 如果需要通过多个HTTP请求传输数据,那么就要用到session和flash scope.在session中存储的,整个会话过程都有效,在flash scope 中存储的,只是对下一个请求有效.服务器不存储session和flash scope中的数据,它们只是被传递给了下一个请求,使用Cookies机制.这就意味着你只能存储字符串类型,而且大小有限,最多4KB.Cookies的默认名字是PLAY_SESSION,通过application.con

windows下scrapy框架学习笔记—&#39;scrapy&#39; 不是内部或外部命令

最近几天在深入的学习scrapy框架,但是装完各种需要的基础包之后却发现scrapy命令在别的路径下都用不了,我一开始是把python安装在F:\Python路径下的,安装了scrapy后它默认都会安装在这个路径下,scrapy在路径F:\Python\Scripts路径下,我的scrapy命令只能在此路径下用,因此创建什么工程也都只能在此文件下. 想了一下它的工作原理:它在F:\Python\Scripts路径下,就会在Scripts文件下存在一个scrapy批处理文件,那么在DOS下想要命令

JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?

前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事.当然,在学校里考试之前当然要把所有内容学一遍和复习一遍.但是,到了社会里做事,很多时候都是边做边学.应聘如此,工作如此,很多的挑战都是如此.没办法,硬着头皮上吧. 3.5 线程的分组管理 在实际的开发过程当中,可能会有多个线程同时存在,这对批量处理有了需求.这就有点像用迅雷下载电视剧,假设你在同时

SuperSocket框架学习笔记4-SuperWebSocket---使用SubCommandBase

首先下载所需要的 DLL http://download.csdn.net/detail/wai2dance123/7389285 或者参见第2章  到SuperSocket官网下载 http://www.cnblogs.com/xmcrew/p/3747354.html 1,新建一个 .NET4.0 控制台应用程序 命名为 DiyServers 添加以下引用 将默认的Program.cs改名为  DiyServers.cs 并添加以下命名空间 2,写自己的DSession和DServer继承自

JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和ArrayList.HashSet.LinkedList等等.根据核心框架图,相信我们都已经对Collection这个JavaSE中最常用API之一有一个较为全面的认识. 这个学习过程,还可以推及到其他常用开源框架和公司项目的学习和熟悉上面.借助开发工具或说明文档,先是对项目整体有一个宏观的认识,再根

j2ee开发之Spring2.5框架学习笔记

Spring 2.5框架学习笔记 1.是一个开源的控制反转IOC和面向切面AOP的容器框架 2.IOC控制反转 public class PersonServiceBean { private PersonDao personDao = new PersonDao(); publiv void save(Person person){ personDao.save(person); } } 控制反转:应用本身不负责依赖对象personDao的创建以及维护,依赖对象的创建以及维护是由外部容器负责的

MEAN框架学习笔记

MEAN框架学习笔记 MEAN开发框架的资料非常少.基本的资料还是来自于learn.mean.io站点上的介绍. 于是抱着一种零基础学习的心态,在了解的过程中,通过翻译加上理解将MEAN框架一点点消化而且吸收,一步一步来.慢慢地记录我学习MEAN的点点滴滴. 1.MEAN是可以管理用户的 通过MEAN的mean-cli来管理用户.命令是: $ mean user <email> $ mean user <email> --addRole <role>; $ mean u