• 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 获取当前动作
  • 相关阅读:
    少写代码帮你模块化方法 & 运动框架 & 简化轮播图
    JQ
    弹框&可用于判断
    移动端内容区域滚动做法总结
    数组这回事
    Bootstrap & 响应式
    谈谈this对象
    模态框中水平垂直居的问题
    图片的懒加载问题
    js中运动框架的封装
  • 原文地址:https://www.cnblogs.com/noear/p/15820801.html
Copyright © 2020-2023  润新知