Solon v3.0.8

Context 的请求与响应补充

</> markdown

在 Web 的接口设计中,一般会有:请求(Request)、响应(Response)、会话状态(SessionState)三块信息。出于多用途的角度考虑,Solon 的 Context 将三者合为一体。

  • 还可用于定时任务
  • 还可用于带配置的方法注入
  • 还可用于有元信息的 socket 通讯
  • 还可用于有元信息的 websocket 通讯

1、关于 Web 请求的数据

主要的两个部分:头与主体(http 协议结构体)

  • 头信息
接口描述
headerMap() -> MultiMap<String>请求头集
cookieMap() -> MultiMap<String>请求cookie集合(是从头集合里,解析出来的)
  • 主体信息
接口描述
fileMap() -> MultiMap<UploadedFile>文件集合(由特定编码的主体解码后产生)
paramMap() -> MultiMap<String>参数集合(由特定编码的主体解码后产生),也包含了查询字符串参数
body()请求主体(如果已解被解码,它会是个空流)

如何修改请求数据?(其中 MultiMap 的接口参考:MultiMap

//MultiMap 集合的修改示例
ctx.headerMap().add("key1", "val1");
ctx.cookieMap().put("key1", "val1");

//body 的修改示例
ctx.bodyNew(...);

2、关于 Web 响应的数据

主要也是两个部分:头与主体(http 协议结构体)

接口描述
headerSet(String key, String value)设置响应头(替换方式)
headerAdd(String key, String value)添加响应头(增量方式)
cookieSet(String key, ...)设置小饼(替换方式)
headerOfResponse(String key)获取设置的响应头单值
headerValuesOfResponse(String key, String value)获取设置的响应头多值
  • 主体输出
接口描述
output(...)输出原始数据主体
render(...)通过渲染转换,再输出原始数据主体

如何获取响应数据?

//可以获取响应头
ctx.headerOfResponse("key1");

//可以获取输出文本主体(主要是内部用,未来可能会变)
ctx.attr("output");