Solon Web 开发,四、请求上下文
Handler + Context 架构,是Solon Web 的基础。在 Context 里可以获取:
- 请求相关的对象与接口
- 会话状态相关的对象与接口
- 响应相关的对象与接口
或者理解所有请求与响应相关的,都在它身上。关于架构方面,可以再看看《想法与架构笔记》
1、三种获取 Context 的方式
a) 通过 Controller 获取
@Controller
public class HelloController{
@Mapping("/hello")
public String hello(Context ctx){
//可以注入 ctx:Context
return "Hello " + ctx.param("name", "world");
}
}
b) 通过 Handler 获取
Solon.start(DemoApp.class, args, app->{
app.get("/hello", ctx-> ctx.output("Hello " + ctx.param("name", "world")));
});
//或者,用以组件方式编写
@Mapping("/hello")
@Component
public class HelloHandler implements Handler{
public void handle(Context ctx) throws Throwable{
ctx.output("Hello " + ctx.param("name", "world"));
}
}
c) 直接获取
Context ctx = Context.current();
2、请求相关的接口
请求相关接口 | 说明 |
---|---|
-request()->Object | 原始请求对象 |
-ip()->String | 获取源始请求ip(也可能是代理的ip) |
-realIp()->String | 获取客户端真实IP |
-isMultipart()-bool | 是否为分段内容 |
-isMultipartFormData()->bool | 是否为分段表单数据 |
-method()->String | 获取请求方式 |
-protocol()->String | 获取请求协议 |
-protocolAsUpper()->String | 获取请求协议并大写 |
-uri()->URI | 获取请求的URI |
-path()->String | 获取请求的URI路径 |
-pathNew(String) | 设置新路径 |
-pathNew()->String | 获取新路径,不存在则返回原路径 |
-pathMap(String)->NvMap | 获取请求的URI路径变量,根据路径表达式 |
-pathAsUpper()->String | 获取请求的URI路径并大写 |
-userAgent()>String | 获取请求的UA |
-url()->String | 获取请求的URL字符串 |
-contentLength()->long | 获取内容长度 |
-contentType()->String | 获取内容类型 |
-queryString()->String | 获取查询字符串 |
-accept()->String | 获取 Accept 头信息 |
-body()->String | 获取body内容 |
-body(String)->String | 获取body内容,并按指定字符串解码 |
-bodyNew()->String | 获取新的body |
-bodyNew(String) | 设置新的body |
-bodyAsBytes()->byte[] | 获取body内容为byte[] |
-bodyAsStream()->InputStream | 获取body内容为Stream |
-paramValues(String)->String[] | 获取参数数组 |
-param(String)->String | 获取参数 |
-param(String, String)->String | 获取参数,并给定默认值 |
-paramAsInt(String)->int | 获取参数并转为int |
-paramAsInt(String, int)->int | 获取参数并转为int, 并给定默认值 |
-paramAsLong(String)->long | 获取参数并转为long |
-paramAsLong(String, long)->long | 获取参数并转为long,并给定默认值 |
-paramAsDouble(String)->double | 获取参数并转为double |
-paramAsDouble(String, double)->double | 获取参数并转为double,并给定默认值 |
-paramAsDecimal(String)->BigDecimal | 获取参数并转为BigDecimal |
-paramAsDecimal(String, BigDecimal)->BigDecimal | 获取参数并转为BigDecimal,并给定默认值 |
-paramAsBean(Class<T> )->T |
获取参数并转为Bean |
-paramMap()->NvMap | 获取所有参数并转为map |
-paramsMap()->Map<String, List<String>> |
获取所有参数并转为Map |
-paramSet(String, String) | 设置参数 |
-paramsAdd(String, String) | 添加参数 |
-files(String)->List<UploadedFile> |
获取上传文件,可能有多个 |
-file(String)->UploadedFile | 获取上传文件,第一个 |
-cookie(String)->String | 获取 cookie |
-cookie(String, String)->String | 获取 cookie, 并给定默认值 |
-cookieMap()->NvMap | 获取 cookieMap |
-header(String)->String | 获取 header |
-header(String, String)->String | 获取 header,并给定默认值 |
3、响应相关的接口
响应相关接口 | 说明 |
---|---|
-response()->Object | 原始响应对象 |
-charset(String) | 设置字符集 |
-contentType(String) | 设置内容类型 |
-contentTypeNew() | 获取设置的新内容类型 |
-output(byte[]) | 输出 字节数组 |
-output(InputStream) | 输出 流对象 |
-output(String) | 输出 字符串 |
-output(Throwable) | 输出 异常对象 |
-outputAsJson(String) | 输出为json文本 |
-outputAsHtml(String) | 输出为html文本 |
-outputAsFile(DownloadedFile) | 输出为文件 |
-outputAsFile(File) | 输出为文件 |
-outputStream()->OutputStream | 获取输出流 |
-headerSet(String, String) | 设置 header |
-headerAdd(String, String) | 添加 header |
-cookieSet(String, String) | 设置 cookie |
-cookieSet(String, String, int) | 设置 cookie |
-cookieSet(String, String, String, int) | 设置 cookie |
-cookieSet(String, String, String, String, int) | 设置 cookie |
-cookieRemove(String) | 移徐 cookie |
-redirect(String) | 302跳转地址 |
-redirect(String, int) | 跳转地址 |
-forward(String) | 转发地址 |
-status() | 获取输出状态 |
-status(int) | 设置输出状态 |
4、会话相关的接口
会话相关接口 | 说明 |
---|---|
-sessionState()->SessionState | 获取 sessionState |
-sessionId()->String | 获取 sessionId |
-session(String)->Object | 获取 session 状态 |
-session(String, T)->T | 获取 session 状态(类型转换,存在风险) |
-sessionAsInt(String)->int | 获取 session 状态以 int 型输出 |
-sessionAsInt(String, int)->int | 获取 session 状态以 int 型输出, 并给定默认值 |
-sessionAsLong(String)->long | 获取 session 状态以 long 型输出 |
-sessionAsLong(String, long)->long | 获取 session 状态以 long 型输出, 并给定默认值 |
-sessionAsDouble(String)->double | 获取 session 状态以 double 型输出 |
-sessionAsDouble(String, double)->double | 获取 session 状态以 double 型输出, 并给定默认值 |
-sessionSet(String, Object) | 设置 session 状态 |
-sessionRemove(String) | 移除 session 状态 |
-sessionClear() | 清空 session 状态 |
5、其它查询
其它相关接口 | 说明 |
---|---|
+current()->Context | 获取当前线程的上下文 |
-getLocale()->Locale | 获取地区 |
-setLocale(Locale) | 设置地区 |
-setHandled(bool) | 设置处理状态 |
-getHandled() | 获取处理状态 |
-setRendered(bool) | 设置渲染状态 |
-getRendered() | 获取渲染状态 |
-attrMap()->Map | 获取自定义特性并转为Map |
-attr(String)->Object | 获取上下文特性 |
-attr(String, T)->T | 获取上下文特性,并设定默认值 |
-attrSet(String, Object) | 设置上下文特性 |
-attrSet(Map) | 设置上下文特性 |
-attrClear() | 清除上下文特性 |
-render(Object) | 渲染数据 |
-render(String, Map) | 渲染视图 |
-renderAndReturn(Object)->String | 渲染数据并返回 |
-remoting()->bool | 是否为远程调用 |
-remotingSet(bool) | 设置是否为远程调用 |
-result:Object | 用于在处理链中透传处理结果 |
-errors:Throwable | 用于在处理链中透传处理错误 |
-controller()->Object | 获取当前控制器 |
-action()->Action | 获取当前动作 |
Solon Web 开发,四、请求上下文的更多相关文章
- Solon Web 开发,十四、与Spring、Jsr330的常用注解对比
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,一、开始
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,二、开发知识准备
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,五、数据访问、事务与缓存应用
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,六、过滤器、处理、拦截器
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,七、视图模板与Mvc注解
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,八、校验、及定制与扩展
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,九、跨域处理
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
随机推荐
- CF729A Interview with Oleg 题解
Content 给出一个长度为 \(n\) 字符串 \(s\),请将开头为 \(\texttt{ogo}\),后面带若干个 \(\texttt{go}\) 的子串替换成 \(\texttt{***}\ ...
- CF699A Launch of Collider 题解
Content 有 \(n\) 辆车在一条数轴上,第 \(i\) 辆车在 \(a_i\) 上,每辆车要么向左,要么向右.开始,它们以 \(1\) 个单位每秒的速度在行驶.问你第一次撞车发生在第几秒的时 ...
- CF169A Chores 题解
Content 两兄弟要分担 \(n\) 件家务,第 \(i\) 件家务有一个复杂度 \(h_i\).兄弟俩以一个数 \(x\) 为界.所有满足复杂度 \(>x\) 的家务都给哥哥做,其余的给弟 ...
- 【嵌入式AI】全志 XR806 OpenHarmony 鸿蒙系统固件烧录
欢迎关注我的公众号 [极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 大家好,我是极智视界,本教程详细记录了 ...
- TCP 长连接保活机制&HTTP长连接设置
TCP KeepAlive Wireshark抓包分析机制 -------------------------------- 如上图所示,TCP保活报文总是成对出现,包括TCP保活探测报文和TCP保活 ...
- PSpiceAA-高级分析例程
一.高级分析应用例程 1.1.例程电路原理图(同向放大电路) 器件模型使用PSpice-ELEM库中的模型. 1..1.1.仿真测试波形图 1.2.灵敏度分析 1.2.1菜单选择:PSpice-> ...
- 10分钟uniapp实现即时通讯,腾讯云IM的正确打开方式get
官方的demo基本上覆盖了所有功能点 今天在使用uniapp开发即时通讯IM的时候遇到了瓶颈,便在uniapp的插件市场搜寻一波看看有没有成熟的轮子借鉴,终于发现了这个宝藏插件--"智密 - ...
- JAVA下划线、驼峰相互转换
/** * 下划线转驼峰 * @param str * @return */ public static String lineToHump(String str) { str = str.toLow ...
- 【LeetCode】889. Construct Binary Tree from Preorder and Postorder Traversal 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- LeetCode1237找出给定方程的正整数解
题目 给定方程f和值z,找出给定方程f(x,y)=z的正整数解x,y.f(x,y)关于x.y都是严格单调的. 题目保证 f(x, y) == z 的解处于 1 <= x, y <= 100 ...