package org.noear.perona;
import org.noear.perona.protocol.XCallback;
import java.io.Serializable;
import java.net.URI;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
/** 通用上下文 */
public class XContext implements Serializable {
private static HashMap<String,XContext> contextState=new HashMap<>(); //仅安桌版特有
//需要序列化
private String __guid; //仅安桌版特有
private String _originalUrl;
private Map<String,Object> _paramMap;
//不需要序列化
private transient boolean _handled;
private transient XCallback _callback;
private transient Object _requester;
private transient Map<String,Object> _attrMap;
public XContext(Object requester, String url, Map<String,Object> paramS, XCallback callback) {
__guid = XUtil.guid();
_originalUrl = url;
_paramMap = new HashMap<>();
_attrMap = new HashMap<>();
_requester = requester;
_callback = callback;
if(paramS!=null) {
_paramMap.putAll(paramS);
}
//将queryString的参数进行整合
String query = url().getRawQuery(); //不能用query()会被自动解码
{
String val = null;
if (query != null) {
String[] ss = query.split("&");
for (String s : ss) {
String[] kv = s.split("=");
if (kv.length == 2) {
val = URLDecoder.decode(kv[1]);
if(val == null){
val = kv[1];
}
_paramMap.put(kv[0], val);
}
}
}
}
if(_paramMap.containsKey("callback")){
_attrMap.put("callback", _paramMap.get("callback"));
}
contextState.put(__guid,this);
}
/** 是否已处理 */
public void setHandled(boolean handled){
contextState.get(__guid)._handled = handled;
}
public boolean getHandled(){
return contextState.get(__guid)._handled;
}
/** 获取请求对象 */
public Object requester(){
return contextState.get(__guid)._requester;
}
////////////////////////////////////////////
/** 获取请求的URL源码字符串 */
public String originalUrl(){
return _originalUrl;
}
/** 获取请求的URL */
private transient URI _url;
public URI url(){
if(_url==null) {
_url = URI.create(this._originalUrl);
}
return _url;
}
/** 获取请求协议 */
public String protocol(){
return url().getScheme();
}
/** 获取请求的host */
public String host(){
return url().getHost();
}
/** 获取请求的path */
public String path(){
return url().getPath();
}
/** 获取请求的path分段 */
public String[] pathSegments() {
return path().substring(1).split("/");
// String[] ary = path().split("/");
// return Arrays.copyOfRange(ary, 1, ary.length);
}
/** 获取请求的fullpath */
public String fullpath(){
return (protocol() +"://" + host() + path()).toLowerCase();
}
/** 获取参数 */
public Object param(String key){
return _paramMap.get(key);
}
public Object param(String key, Object def){
Object temp = _paramMap.get(key);
if(key == null){
return def;
}else{
return temp;
}
}
/** 获取所有参数 */
public Map<String,Object> paramMap(){
return _paramMap;
}
/** 是否存在某个参数 */
public boolean paramHas(String key){
return _paramMap.containsKey(key);
}
/** 设置附加特性 */
public void attrSet(String key, Object val) {
XContext cxt = contextState.get(__guid);
if (cxt != null) {
cxt._attrMap.put(key, val);
}
}
/** 获取附加特性 */
public Object attrGet(String key){
XContext cxt = contextState.get(__guid);
if (cxt != null) {
return cxt._attrMap.get(key);
}else{
return null;
}
}
///////////////////////////////////////
/** 输出内容 */
public void output(Object data) {
try {
XContext cxt = contextState.get(__guid);
if (cxt != null) {
XCallback _callback = cxt._callback;
if (_callback != null) {
_callback.handle(cxt, data);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
/** 销毁上下文(仅限内部操作) */
public void destroy(){
contextState.remove(__guid);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
perona是一个跨平台的服务启动框架。是服务端版本solon的情侣版,有android版本,有ios版本。借签了B/S模式,在客户端实现组件功能的服务化,进而为大项目的组件化开发,提供一套弱偶合的方案。基于客户端的需要,框架里也支持消息总线功能。用于组件之间的消息分发.
资源推荐
资源详情
资源评论
收起资源包目录
perona_android-master.zip (83个子文件)
perona_android-master
perona
src
androidTest
java
org
noear
perona
ExampleInstrumentedTest.java 753B
test
java
org
noear
perona
ExampleUnitTest.java 377B
main
java
org
noear
perona
XClient.java 1KB
protocol
XCallback.java 226B
XModule.java 166B
XHandler.java 212B
XUtil.java 673B
XRouter.java 2KB
XApp.java 4KB
XContext.java 5KB
res
values
strings.xml 69B
AndroidManifest.xml 103B
proguard-rules.pro 751B
build.gradle 870B
consumer-rules.pro 0B
.gitignore 7B
gradle.properties 1KB
gradle
wrapper
gradle-wrapper.jar 53KB
gradle-wrapper.properties 232B
demo_module2
src
androidTest
java
org
noear
demo_module2
ExampleInstrumentedTest.java 760B
test
java
org
noear
demo_module2
ExampleUnitTest.java 383B
main
assets
perona
org.noear.mobule2.properties 50B
java
org
noear
demo_module2
XModuleImplEx.java 1KB
XModuleImpl.java 1KB
res
mipmap-xxhdpi
ic_launcher_round.png 10KB
ic_launcher.png 6KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 3KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 272B
ic_launcher_round.xml 272B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 15KB
ic_launcher.png 9KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 4KB
values
colors.xml 208B
strings.xml 75B
styles.xml 383B
drawable
ic_launcher_background.xml 5KB
AndroidManifest.xml 388B
proguard-rules.pro 751B
build.gradle 910B
.gitignore 7B
LICENSE 11KB
gradlew.bat 2KB
build.gradle 558B
.idea
codeStyles
Project.xml 3KB
runConfigurations.xml 564B
misc.xml 357B
settings.gradle 82B
gradlew 5KB
demo_app
src
androidTest
java
org
noear
perona_android
ExampleInstrumentedTest.java 764B
test
java
org
noear
perona_android
ExampleUnitTest.java 385B
main
java
org
noear
perona_android
App.java 988B
XModuleHold.java 580B
XModuleKbx.java 693B
MainActivity.java 900B
XModuleJietiao.java 641B
res
mipmap-xxhdpi
ic_launcher_round.png 10KB
ic_launcher.png 6KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 3KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 272B
ic_launcher_round.xml 272B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 15KB
ic_launcher.png 9KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 4KB
values
colors.xml 208B
strings.xml 77B
styles.xml 383B
layout
activity_main.xml 780B
drawable
ic_launcher_background.xml 5KB
AndroidManifest.xml 746B
proguard-rules.pro 751B
build.gradle 976B
.gitignore 7B
.gitignore 1KB
共 83 条
- 1
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6732
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现电磁优化计算功能,进行线型规划优化电磁设计.rar
- 基于matlab实现带精英策略的非支配排序遗传算法matlab 源码.rar
- 基于matlab实现差分进化算法,最新的用于替代遗传算法,是以后的主要发展方法.rar
- VSCode配置c/c++环境教程.md
- 基于matlab实现标准合作型协同进化遗传算法matlab源程序
- 七下人教.zip
- 基于matlab实现本份代码能对图像进行gabor滤波处理,结合指纹方向图以及指纹沟壑频率特性,对指纹图像进行增强.rar
- 基于matlab实现RBM神经网络实现了手写数字体识别的GUI程序.rar
- 基于matlab实现蝙蝠算法优化相关向量机建模对数据进行建模和预测.rar
- 基于matlab实现编写的禁忌搜索算法,解决了TSP问题,对初学者有重要的参考价值.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功