Hai*_*jin 5 java playframework playframework-2.0
我正在学习Java中的Play Framework.
我无法清楚地理解响应和结果之间的区别.我的意思是,实际发回的是什么,结果还是两者兼而有之?响应是结果的一部分吗?
我一直在试着查看源代码.响应包含Cookie和Map作为标题.结果包含Cookie和ResponseHeader,以及更多内容,如正文和会话.所以有一些重叠.
令我困惑的是这样的代码:
public Result index() {
response().setHeader(CACHE_CONTROL, "max-age=3600");
response().setHeader(ETAG, "xxx");
return ok("<h1>Hello World!</h1>").as("text/html");
}
Run Code Online (Sandbox Code Playgroud)
我将源代码中调用的ok()函数跟踪到Result的构造函数,并且它似乎没有使用response()函数返回的Context中的Response对象中的任何数据.
所以我的问题是:
因此,在回复之前,响应中的cookie和标题最终将与框架中的Cookie和标题结合使用?
如果是这样,制作2个课而不是一个课的理由是什么,并将饼干/标题放在2个地方?
如果没有,结果是否包括响应数据,我还没有发现?
A play.api.mvc.Result表示HTTP响应; 它封装了状态代码,HTTP标头和要发送到Web客户端的主体.
Play提供助手来创建创建常见结果,例如 ok(responseBody)是ResultHttp Status 200 的快捷方式.
您的控制器通常会返回一个Result使用其中一个静态帮助程序方法来创建Result实例.但是,您可能希望Result通过使用response()静态帮助程序方法调整实例封装的HTTP响应,可能是设置标头值.
这种辅助方法设置在一个线程本地变量的响应报头(Context.current()),播放传播这个线程本地变量,其处理HTTP响应回调并且在调用的线程JavaHelpers.createResult(…)的转换play.mvc.Result实例其Scala的形式,并且调用withHeaders()和withCookies()复制任何标头和通过response()调用提供的cookie .
所以,在您发布的代码中:
public Result index() {
response().setHeader(CACHE_CONTROL, "max-age=3600");
response().setHeader(ETAG, "xxx");
return ok("<h1>Hello World!</h1>").as("text/html");
}
Run Code Online (Sandbox Code Playgroud)
在response()电话上设置一个线程局部变量标题,则ok()调用创建一个play.mvc.Result和这个返回的过程中Result,以客户端播放您复制到该结果所提供的标题.
我认为这回答了:
因此,在回复之前,响应中的cookie和标题最终将与框架中的Cookie和标题结合使用?
至于这部分问题......
如果是这样,制作2个课而不是一个课的理由是什么,并将饼干/标题放在2个地方?
...我认为只有Play作者可以解释为什么选择这个实现.也许这是Play双头的结果,Java实现是Scala基础的薄包装.但是,从Play用户的角度来看,知道您设置的任何内容response()都将与Result您创建的内容合并,这可能就足够了.
| 归档时间: |
|
| 查看次数: |
895 次 |
| 最近记录: |