成都最好的軟件公司sem與seo
Handler + Context 架構(gòu),是Solon Web 的基礎(chǔ)。在 Context (org.noear.solon.core.handle.Context)里可以獲取:
- 請求相關(guān)的對象與接口
- 會話狀態(tài)相關(guān)的對象與接口
- 響應(yīng)相關(guān)的對象與接口
或者理解所有請求與響應(yīng)相關(guān)的,都在它身上。關(guān)于架構(gòu)方面,可以再看看《想法與架構(gòu)筆記》
1、三種獲取 Context 的方式
a) 通過 Controller 獲取
@Controller
public class HelloController{@Mapping("/hello")public String hello(Context ctx){//可以注入 ctx:Contextreturn "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 實現(xiàn))
Context ctx = Context.current();
2、關(guān)于 context-path 的類似效果(基于 pathNew 實現(xiàn))
添加配置即可:(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、請求相關(guān)的接口
請求相關(guān)接口 | 說明 |
---|---|
-request()->Object | 原始請求對象 |
-ip()->String | 獲取源始請求ip(也可能是代理的ip) |
-realIp()->String | 獲取客戶端真實IP |
-isMultipart()-bool | 是否為分段內(nèi)容 |
-isMultipartFormData()->bool | 是否為分段表單數(shù)據(jù) |
-method()->String | 獲取請求方式 |
-protocol()->String | 獲取請求協(xié)議 |
-protocolAsUpper()->String | 獲取請求協(xié)議并大寫 |
-url()->String | 獲取請求的URL字符串 |
-uri()->URI | 獲取請求的URI |
-path()->String | 獲取請求的URI路徑 |
-pathNew(String) | 設(shè)置新路徑 |
-pathNew()->String | 獲取新路徑,不存在則返回原路徑 |
-pathMap(String)->NvMap | 獲取請求的URI路徑變量,根據(jù)路徑表達(dá)式 |
-pathAsUpper()->String | 獲取請求的URI路徑并大寫 |
-pathAsLower()->String | 獲取請求的URI路徑并小寫 |
-userAgent()>String | 獲取請求的UA |
-contentLength()->long | 獲取內(nèi)容長度 |
-contentType()->String | 獲取內(nèi)容類型 |
-queryString()->String | 獲取查詢字符串 |
-accept()->String | 獲取 Accept 頭信息 |
-body()->String | 獲取body內(nèi)容 |
-body(String)->String | 獲取body內(nèi)容,并按指定字符串解碼 |
-bodyNew()->String | 獲取新的body |
-bodyNew(String) | 設(shè)置新的body |
-bodyAsBytes()->byte[] | 獲取body內(nèi)容為byte[] |
-bodyAsStream()->InputStream | 獲取body內(nèi)容為Stream |
-paramValues(String)->String[] | 獲取參數(shù)數(shù)組 |
-param(String)->String | 獲取參數(shù) |
-param(String, String)->String | 獲取參數(shù),并給定默認(rèn)值 |
-paramAsInt(String)->int | 獲取參數(shù)并轉(zhuǎn)為int |
-paramAsInt(String, int)->int | 獲取參數(shù)并轉(zhuǎn)為int, 并給定默認(rèn)值 |
-paramAsLong(String)->long | 獲取參數(shù)并轉(zhuǎn)為long |
-paramAsLong(String, long)->long | 獲取參數(shù)并轉(zhuǎn)為long,并給定默認(rèn)值 |
-paramAsDouble(String)->double | 獲取參數(shù)并轉(zhuǎn)為double |
-paramAsDouble(String, double)->double | 獲取參數(shù)并轉(zhuǎn)為double,并給定默認(rèn)值 |
-paramAsDecimal(String)->BigDecimal | 獲取參數(shù)并轉(zhuǎn)為BigDecimal |
-paramAsDecimal(String, BigDecimal)->BigDecimal | 獲取參數(shù)并轉(zhuǎn)為BigDecimal,并給定默認(rèn)值 |
-paramAsBean(Class<T> )->T | 獲取參數(shù)并轉(zhuǎn)為Bean |
-paramMap()->NvMap | 獲取所有參數(shù)并轉(zhuǎn)為map |
-paramsMap()->Map<String, List<String>> | 獲取所有參數(shù)并轉(zhuǎn)為Map |
-paramSet(String, String) | 設(shè)置參數(shù) |
-paramsAdd(String, String) | 添加參數(shù) |
-filesMap()->Map<String,List<UploadedFile>> | 獲取所有上傳的文件 |
-files(String)->List<UploadedFile> | 獲取上傳文件,可能有多個 |
-file(String)->UploadedFile | 獲取上傳文件,第一個 |
-cookie(String)->String | 獲取 cookie |
-cookie(String, String)->String | 獲取 cookie, 并給定默認(rèn)值 |
-cookieMap()->NvMap | 獲取 cookieMap |
-header(String)->String | 獲取 header |
-header(String, String)->String | 獲取 header,并給定默認(rèn)值 |
-headerValues(String)->String | 獲取 header 數(shù)組 |
-headerMap()->NvMap | 獲取 headerMap |
-headersMap()->Map<String, List<String>> | 獲取 headersMap |
4、響應(yīng)相關(guān)的接口
響應(yīng)相關(guān)接口 | 說明 |
---|---|
-response()->Object | 原始響應(yīng)對象 |
-charset(String) | 設(shè)置字符集 |
-contentType(String) | 設(shè)置內(nèi)容類型 |
-contentTypeNew() | 獲取設(shè)置的新內(nèi)容類型 |
-render(Object) | 渲染數(shù)據(jù)(比如將對象渲染為 Json 并輸出) |
-render(String, Map) | 渲染視圖 |
-renderAndReturn(Object)->String | 渲染數(shù)據(jù)并返回 |
-output(byte[]) | 輸出 字節(jié)數(shù)組 |
-output(InputStream) | 輸出 流對象 |
-output(String) | 輸出 字符串 |
-output(Throwable) | 輸出 異常對象 |
-outputAsJson(String) | 輸出為json文本 |
-outputAsHtml(String) | 輸出為html文本 |
-outputAsFile(DownloadedFile) | 輸出為文件 |
-outputAsFile(File) | 輸出為文件 |
-outputStream()->OutputStream | 獲取輸出流 |
-flush() | 沖刷 |
-headerSet(String, String) | 設(shè)置 header |
-headerAdd(String, String) | 添加 header |
-cookieSet(String, String) | 設(shè)置 cookie |
-cookieSet(String, String, int) | 設(shè)置 cookie |
-cookieSet(String, String, String, int) | 設(shè)置 cookie |
-cookieSet(String, String, String, String, int) | 設(shè)置 cookie |
-cookieRemove(String) | 移徐 cookie |
-redirect(String) | 302跳轉(zhuǎn)地址 |
-redirect(String, int) | 跳轉(zhuǎn)地址 |
-forward(String) | 服務(wù)端轉(zhuǎn)換地址 |
-status() | 獲取輸出狀態(tài) |
-status(int) | 設(shè)置輸出狀態(tài) |
5、會話相關(guān)的接口
會話相關(guān)接口 | 說明 |
---|---|
-sessionState()->SessionState | 獲取 sessionState |
-sessionId()->String | 獲取 sessionId |
-session(String)->Object | 獲取 session 狀態(tài) |
-session(String, T)->T | 獲取 session 狀態(tài)(類型轉(zhuǎn)換,存在風(fēng)險) |
-sessionAsInt(String)->int | 獲取 session 狀態(tài)以 int 型輸出 |
-sessionAsInt(String, int)->int | 獲取 session 狀態(tài)以 int 型輸出, 并給定默認(rèn)值 |
-sessionAsLong(String)->long | 獲取 session 狀態(tài)以 long 型輸出 |
-sessionAsLong(String, long)->long | 獲取 session 狀態(tài)以 long 型輸出, 并給定默認(rèn)值 |
-sessionAsDouble(String)->double | 獲取 session 狀態(tài)以 double 型輸出 |
-sessionAsDouble(String, double)->double | 獲取 session 狀態(tài)以 double 型輸出, 并給定默認(rèn)值 |
-sessionSet(String, Object) | 設(shè)置 session 狀態(tài) |
-sessionRemove(String) | 移除 session 狀態(tài) |
-sessionClear() | 清空 session 狀態(tài) |
6、其它查詢
其它相關(guān)接口 | 說明 |
---|---|
+current()->Context | 獲取當(dāng)前線程的上下文 |
-getLocale()->Locale | 獲取地區(qū) |
-setLocale(Locale) | 設(shè)置地區(qū) |
-setHandled(bool) | 設(shè)置處理狀態(tài) |
-getHandled() | 獲取處理狀態(tài) |
-setRendered(bool) | 設(shè)置渲染狀態(tài) |
-getRendered() | 獲取渲染狀態(tài) |
-attrMap()->Map | 獲取自定義特性并轉(zhuǎn)為Map |
-attr(String)->Object | 獲取上下文特性 |
-attr(String, T)->T | 獲取上下文特性,并設(shè)定默認(rèn)值 |
-attrSet(String, Object) | 設(shè)置上下文特性 |
-attrSet(Map) | 設(shè)置上下文特性 |
-attrClear() | 清除上下文特性 |
-remoting()->bool | 是否為遠(yuǎn)程調(diào)用 |
-remotingSet(bool) | 設(shè)置是否為遠(yuǎn)程調(diào)用 |
-result:Object | 用于在處理鏈中透傳處理結(jié)果 |
-errors:Throwable | 用于在處理鏈中透傳處理錯誤 |
-controller()->Object | 獲取當(dāng)前控制器 |
-action()->Action | 獲取當(dāng)前動作 |