Handler + Context 架构,是Solon Web 的基础。在 Context (org.noear.solon.core.handle.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 或 Filter 或 RouterInterceptor 接口方式获取

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) 直接获取(基于 ThreadLocal 实现)

Context ctx = Context.current();

2、关于 context-path 的类似效果(基于 pathNew 实现)

添加配置即可:(v1.11.2 后支持)

server.contextPath: "/test-service/"

也可以手动处理

public class DemoApp{
public static void main(String[] args){
Solon.start(DemoApp.class, args, app->{ //使用专用过滤器
app.filter(-99, new ContextPathFilter("/xxx/")); //使用专用过滤器(原生路径将不能访问,不建议使用)
//app.filter(-99, new ContextPathFilter("/xxx/", true));
});
}
}

3、请求相关的接口

请求相关接口 说明
-request()->Object 原始请求对象
-ip()->String 获取源始请求ip(也可能是代理的ip)
-realIp()->String 获取客户端真实IP
-isMultipart()-bool 是否为分段内容
-isMultipartFormData()->bool 是否为分段表单数据
-method()->String 获取请求方式
-protocol()->String 获取请求协议
-protocolAsUpper()->String 获取请求协议并大写
-url()->String 获取请求的URL字符串
-uri()->URI 获取请求的URI
-path()->String 获取请求的URI路径
-pathNew(String) 设置新路径
-pathNew()->String 获取新路径,不存在则返回原路径
-pathMap(String)->NvMap 获取请求的URI路径变量,根据路径表达式
-pathAsUpper()->String 获取请求的URI路径并大写
-pathAsLower()->String 获取请求的URI路径并小写
-userAgent()>String 获取请求的UA
-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) 添加参数
-filesMap()->Map<String,List<UploadedFile>> 获取所有上传的文件
-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,并给定默认值
-headerValues(String)->String 获取 header 数组
-headerMap()->NvMap 获取 headerMap
-headersMap()->Map<String, List<String>> 获取 headersMap

4、响应相关的接口

响应相关接口 说明
-response()->Object 原始响应对象
-charset(String) 设置字符集
-contentType(String) 设置内容类型
-contentTypeNew() 获取设置的新内容类型
-render(Object) 渲染数据(比如将对象渲染为 Json 并输出)
-render(String, Map) 渲染视图
-renderAndReturn(Object)->String 渲染数据并返回
-output(byte[]) 输出 字节数组
-output(InputStream) 输出 流对象
-output(String) 输出 字符串
-output(Throwable) 输出 异常对象
-outputAsJson(String) 输出为json文本
-outputAsHtml(String) 输出为html文本
-outputAsFile(DownloadedFile) 输出为文件
-outputAsFile(File) 输出为文件
-outputStream()->OutputStream 获取输出流
-flush() 冲刷
-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) 设置输出状态

5、会话相关的接口

会话相关接口 说明
-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 状态

6、其它查询

其它相关接口 说明
+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() 清除上下文特性
-remoting()->bool 是否为远程调用
-remotingSet(bool) 设置是否为远程调用
-result:Object 用于在处理链中透传处理结果
-errors:Throwable 用于在处理链中透传处理错误
-controller()->Object 获取当前控制器
-action()->Action 获取当前动作

Solon Web 开发:四、认识请求上下文(Context)的更多相关文章

  1. Solon Web 开发,四、请求上下文

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  2. Solon Web 开发,十四、与Spring、Jsr330的常用注解对比

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  3. Solon Web 开发,二、开发知识准备

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  4. Solon Web 开发,六、过滤器、处理、拦截器

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  5. Solon Web 开发,八、校验、及定制与扩展

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  6. Solon Web 开发,十一、国际化

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  7. Solon Web 开发,十二、统一的渲染控制

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  8. Solon Web 开发

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  9. Solon Web 开发,一、开始

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  10. Solon Web 开发,五、数据访问、事务与缓存应用

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

随机推荐

  1. 从混乱到优雅:基于DDD的六边形架构的代码翻新指南

    前言 趁着双十一备战封板,终于又有一些时间可以梳理一下最近的心得. 最近这半年跟同事讨论比较多的是分层架构,然后就会遇到两个触及灵魂的问题,一个是如何做好分层架构,二是DDD在架构层面该如何落地. 为 ...

  2. 错误记录-MariaDB连接异常

    简介: 问题: C#,VS2022,mariadb-10.11.5-winx64,using MySql.Data.MySqlClient; 在执行connection.Open()时抛出异常:Sys ...

  3. Java Stream中的API你都用过了吗?

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 在本教程中,您将通过大量示例来学习 Java 8 Stream API. Java 在 Java 8 中提供了一个新的附加 ...

  4. Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析

    学习基础知识 掌握 Go 语言的常见概念,如变量.循环.条件语句.函数.数据类型等等.深入了解 Go 基础知识的好起点是查阅 Go 官方文档 文章链接:Go 编程语言详解:用途.特性.与 Python ...

  5. 可视化大屏与GIS之间如何实现互补?

    在当今数字化时代,可视化大屏和地理信息系统(GIS)是两个在不同领域发挥重要作用的技术.可视化大屏以其生动.直观的图表.图像和动画展示方式,为数据可视化和信息展示提供了强大的工具.而GIS则通过地理空 ...

  6. Javascript Ajax总结——其他跨域技术之Comet

    Comet指一种更高级的Ajax技术( 也称 "服务器推送" ),一种服务器向页面推送数据的技术.Comet能够让信息近乎实时地被推送到页面上,非常适合体育比赛的分数和股票报价.有 ...

  7. Javascript Ajax总结——GET请求和POST请求

    1.GET请求GET最常用于向服务器查询信息.可在URL末尾添加查询字符串参数.XHR中,传入open()方法的URL末尾的查询字符串必须经过正确的编码,使用encodeURIComponent()编 ...

  8. Linux测试磁盘读写性能

    1.安装必要的工具: 确保系统上已经安装了必要的工具,hdparm和fio.使用以下命令来安装它们: sudo yum install hdparm fio -y 2.使用hdparm测试磁盘读性能: ...

  9. Pikachu漏洞靶场 (SSRF服务端请求伪造)

    SSRF(Server-Side Request Forgery:服务器端请求伪造) curl 点击 累了吧,来读一首诗吧 url是这样的: http://192.168.171.30/pikachu ...

  10. #11独立开发周总结|核心OKR1000元/月已达标

    核心OKR:1000元/月达成情况 算上微信上收费了200多元,核心OKR已达标 12.25-12.29本周完成事项 产品方面 本周产品上主要是在进行重构的测试,顺利上线,线上问题也比较少 运营方面 ...