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注解 八.校验.及定制与扩展 九.跨域 ...
随机推荐
- freeswitch APR-UTIL库消息队列实现
概述 freeswitch的核心源代码是基于apr库开发的,在不同的系统上有很好的移植性. APR库在之前的文章中已经介绍过了,APR-UTIL库是和APR并列的工具库,它们都是由APACHE开源出来 ...
- CF1506C Double-ended Strings 题解
Content 有两个字符串 \(a,b\).我们每次操作可以将两个字符串中的一个字符串的最前面一个字符或这最后面一个字符删去(可以将某个字符串通过若干次操作变为空串).求需要多少次操作才能够使 \( ...
- 13 - Vue3 UI Framework - 完善官网
为了提升用户体验,今天我们来对 jeremy-ui 官网做一个优化 返回阅读列表点击 这里 Markdown 解析支持 ️ 习惯用 markdown 语法编辑,所以我们增加项目源码对 markdown ...
- winpcap 静默安装
前几天做一个小工具用到winpcap,由于有些用户系统未必安装过这个而领导要求尽量减少用户点击,于是只好想办法静默安装了,csdn搜了,貌似没有好用的,求助stackoverflow,还好,在某篇解答 ...
- GBK 和 UTF8
首先来看一下常用的编码有哪些,截图自Notepad++.其中ANSI在中国大陆即为GBK(以前是GB2312),最常用的是 GBK 和 UTF8无BOM 编码格式.后面三个都是有BOM头的文本格式,U ...
- [C# Expression] 之基础概念
00 | 什么是表达式树 表达式树以树形数据结构表示代码,其中每一个节点都是一种表达式,比如方法调用和 x < y 这样的二元运算等.可以对表达式树中的代码进行编辑和运算. 这样能够动态修改可执 ...
- 移动端滚动方案:better-scroll
BetterScroll 是什么 BetterScroll 是一款重点解决移动端(已支持 PC)各种滚动场景需求的插件.它的核心是借鉴的 iscroll (opens new window) 的实现, ...
- C# 使用TimeSpan秒数转化为时分秒的写法
1.TimeSpan的生成方法 // 参数: // ticks: // A time period expressed in 100-nanosecond units. public TimeSpan ...
- windows平台使用 pthreads库
note 近日封装一些跨平台库时, 发现线程的创建需要做平台的区分, windows的线程创建和Linux下的线程操作不一样.很麻烦,还要做平台区分. 能否在windows上使用pthread的线程库 ...
- c++设计模式概述之模板方法
代码写的不够规范,目的是为了缩短文章篇幅,实际中请不要这样做. 1.概述 如其名,模板,也就是说,有一个已经做好的模板把框架做好了,剩下的,只需要我们将内容填充到模板下. 例如修房屋,框架结构搭建完成 ...