代码之家  ›  专栏  ›  技术社区  ›  Haijin

游戏框架中的响应和结果是如何相关的?

  •  5
  • Haijin  · 技术社区  · 7 年前

    我正在学习Java中的Play Framework。

    Response 和a Result .我的意思是,实际返回的是什么,结果还是两者?响应是结果的一部分吗?

    我一直在看源代码。响应包含Cookie和映射作为标头。结果包含Cookie和ResponseHeader,以及更多的内容,如body和session。所以有一些重叠。

    public Result index() {
        response().setHeader(CACHE_CONTROL, "max-age=3600");
        response().setHeader(ETAG, "xxx");
        return ok("<h1>Hello World!</h1>").as("text/html");
    }
    

    我在源代码中跟踪了ok()函数调用Result的构造函数,它似乎没有在Response()函数返回的上下文中使用来自Response对象的任何数据。

    那么,在返回之前,响应中的cookie和头将最终与框架生成的cookie和头合并?

    1 回复  |  直到 7 年前
        1
  •  7
  •   glytching    7 年前

    A. play.api.mvc.Result 表示HTTP响应;它封装了状态代码、HTTP头和要发送到web客户端的正文。

    ok(responseBody) Result Http状态为200。

    后果 使用这些静态助手方法之一创建结果实例。但是,您可能需要调整由 实例,可能是通过使用 response() 静态辅助方法。

    Context.current() ),Play将此线程局部变量传播到处理HTTP响应回调的线程,并在该调用中 JavaHelpers.createResult(…) play.mvc.Result 实例,并调用 withHeaders() withCookies()复制通过 调用。

    因此,在您发布的代码中:

    public Result index() {
        response().setHeader(CACHE_CONTROL, "max-age=3600");
        response().setHeader(ETAG, "xxx");
        return ok("<h1>Hello World!</h1>").as("text/html");
    }
    

    这个 在线程局部变量上调用set标头 ok() 调用创建 play.mvc.Result 后果

    我认为这回答了:

    那么,在返回之前,响应中的cookie和头将最终与框架生成的cookie和头合并?

    如果是这样,那么创建两个类而不是一个类,并将cookie/header放在两个位置的理由是什么?

    我认为只有剧本作者才能解释 选择了此实现。也许这是Play的双头性的结果,Java实现是Scala基础上的薄包装。然而,从Play用户的角度来看,只要知道您通过 将与任何内容合并 您创建。