3.2 响应

    打开 www.baidu.com 从浏览器的开发者工具里可以看到一个响应是这样的:

    那么我们在编写 web 应用的时候通常会用到 响应 相关的哪些API呢?我举几个例子你就明白了。

    前面我们已经做了一个简单的登录功能,在这个功能中我们已经做到了访问一个 URL 可以看到 HTML 页面的过程。
    你去查看代码只有一行。

    那么框架是怎么做的呢? Blade 将模板默认都存放在 classpath 下的 templates 目录中,当我们编写一个路由的时候返回值是 StringModelAndView 类型则框架会帮你渲染到对应的视图页面,所以上面代码片段中访问 /login 会跳转到 templates/login.html 页面。

    1. @GetRoute("login")
    2. public void login(Response response) {
    3. response.render("login.html");
    4. }

    这两个代码片段达到的效果是相同的,随你爱好。

    返回JSON数据

    很多时候我们会开发一些web api程序,返回 json 格式的数据,在 Blade 中更是方便,怎么做呢?

    没错,就是这么 easy,有同学说只能这样吗?我连 response.json(users) 都不想写。。。好吧,果然程序猿都是偷懒才聪明的。还有一种方式,像 SpringMvc

    1. public List<String> users() {
    2. return Arrays.asList("jack", "tom", "biezhi");
    3. }

    这里使用 注解标识当前的路由返回一定是一段 json 数据,返回值框架会帮你处理。我们访问浏览器得到的将是:

    Cookie 是我们web开发中常用的一个技术,通常用于 记住我 等操作。在 Blade 中向浏览器写入 Cookie 也是使用 Response 对象完成的,来看看吧。

    1. response.cookie("c1", "value1");

    当然上面的写法是写最简单的 Cookie,但很多时候我们需要定制化,这时候可以看看 Response 对象里 Cookie 相关的API了。

    • Response removeCookie(String name)
    • Response cookie(Cookie cookie)
    • Response cookie(String name, String value)
    • Response cookie(String name, String value, int maxAge, boolean secured)

    还挺多的吗,一个比一个长呢。。是的,看到这些API大概都清楚怎么使用了。第一个是移除一个 Cookie 的,后面都是写入一个 Cookie 的方法。具体解释都可以在源码注释中看到。

    返回文本/html

    返回文本/html也非常的简单,Blade 提供了两个API帮你完成返回文本和html。

    • void text(String text)
    • void html(String html)

    只需要将响应给客户端的字符串传递即可。

    有时候我们会希望做完某个操作后重定向到另一个页面,在HTTP中其实就是 302 状态码干的。比如登录后后台直接跳转到登录成功的页面。

    其他操作

    • Response status(int status)
    • Response notFound()
    • Response contentType(String contentType)
    • Map<String, String> headers()
    • Response header(String name, String value)
    • Map<String, String> cookies()
    • void json(String json)
    • void body(@NonNull byte[] data)

    好了,各位看官,关于 Response 响应的介绍就到这里,我们下次来讲 Blade 中的 容器。