当前位置: 首页 > 文档资料 > Blade 中文文档 >

HTTP 响应

优质
小牛编辑
133浏览
2023-12-01

Blade 中操作响应的对象是 Response

发送文本

Response#text 用于发送一个状态码为 200 的文本响应

public void responseText(Response response){
    response.text("Hello World");
}

发送HTML

Response#html 用于发送一个状态码为 200 的HTML响应

public void responseHTML(Response response){
    response.html("<h1>Hello World</h1>");
}

发送XML

Response#xml 用于发送一个状态码为 200 的XML响应,只是修改了响应 ContentType

public void responseXML(Response response){
    response.xml("<Msg>OK!</Msg>");
}

发送JSON

Response#json 用于发送一个状态码为 200 的JSON响应。

public void responseJSON(Response response){
    response.json("{\"status\": 200}");
}

public void responseJSON(Response response){
    User user = new User("biezhi", "[email protected]");
    response.json(user);
}

发送文件

public void responseFile(Response response){
    response.download("a.txt", "/data/wwwroot/hello.txt");
}

渲染模板

public void renderUsers(Response response){
    response.render("admin/users.html");
}

写入Cookie

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

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

这样就向当前域下写入了一个永不过期的 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)
  • Response cookie(String name, String value, int maxAge, boolean secured)
  • Response cookie(String path, String name, String value, int maxAge, boolean secured)

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

重定向

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

@PostRoute("login")
public void doLogin(Response response) {
    response.redirect("/index");
}

也可以重定向到外部站点

@GetRoute("github")
public void showGithub(Response response) {
    response.redirect("https://github.com/biezhi");
}

其他操作

在 Response 中还有一些其他不常用的操作,我们来看看它的 API

  • 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 body(@NonNull byte[] data)

更多的信息可以在 Response 接口中查看。