Context 的请求与响应补充
在 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 协议结构体)
- 头输出(更多接口参考:认识请求上下文(Context))
接口 | 描述 |
---|---|
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");