json-rpc-자바 전면 수정
소량의 dispath 방법 을 드 러 내 고 반사 적 으로 들 어 오 는 방법 으로 이름 을 Map 매개 변수 에 전달 하 는 방법 이 있 습 니 다.그러나 이런 느낌 도 이상 하기 때문에 자신의 생각 으로 개조 하 는 것 입 니 다.클 라 이언 트 는 new JSONRpcClient 가 아니 라 url 방식 으로 노출 된 업무 구성 요 소 를 방문 합 니 다.예 를 들 어 XXXService.xxx.모든 노출 구성 요 소 를 GlobalBridge 에 등록 합 니 다.수정 은 사실 Servlet 을 고치 면 됩 니 다.
public class RpcServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private final static int buf_size = 4096;
public void service(HttpServletRequest request, HttpServletResponse response)
throws IOException, ClassCastException {
String action = request.getRequestURI().substring(
request.getServletPath().length()
+ request.getContextPath().length() + 1);
JSONRPCBridge json_bridge = JSONRPCBridge.getGlobalBridge();
response.setContentType("text/plain;charset=utf-8");
OutputStream out = response.getOutputStream();
String charset = request.getCharacterEncoding();
if (charset == null)
charset = "UTF-8";
BufferedReader in = new BufferedReader(new InputStreamReader(request
.getInputStream(), charset));
CharArrayWriter data = new CharArrayWriter();
char buf[] = new char[buf_size];
int ret;
while ((ret = in.read(buf, 0, buf_size)) != -1)
data.write(buf, 0, ret);
String json = "{\"method\": \""+action+"\", \"params\": "+data.toString()+"}";
// Process the request
JSONObject json_req = null;
JSONRPCResult json_res = null;
try {
json_req = new JSONObject(json);
json_res = json_bridge.call(new Object[] { request }, json_req);
} catch (ParseException e) {
e.printStackTrace();
json_res = new JSONRPCResult(JSONRPCResult.CODE_ERR_PARSE, null,
JSONRPCResult.MSG_ERR_PARSE);
}
byte[] bout = json_res.toString().getBytes("UTF-8");
response.setIntHeader("Content-Length", bout.length);
out.write(bout);
out.flush();
out.close();
}
}
이전 보다 고치 기 가 쉬 웠 습 니 다.그 다음 에 클 라 이언 트 에서 사용 할 수 있 는 접근 기 를 구축 하 는 것 입 니 다.
응용 프로그램 은 Ext 와 결합 되 어 있 기 때문에 기본 라 이브 러 리 를 사 용 했 습 니 다(게 으 름 피 웠 습 니 다- -)그리고 jsonrpc js 라 이브 러 리 의 몇 가지 도움말 방법 으로 동기 화 와 비동기 호출 을 실현 합 니 다.
JsonRpc = {
rootUrl : ""
};
JsonRpc.request = function(url, params, callback) {
if (callback) {
Ext.Ajax.request({
url : JsonRpc.rootUrl + url,
params : toJSON(params),
method : "POST",
callback : function(op, success, response) {
if (success) {
var o = eval("(" + response.responseText + ")");
callback(o.result, o.error);
} else {
callback(undefined, {
msg : "failed"
});
}
}
});
} else {
var conn = Ext.lib.Ajax.getConnectionObject().conn;
conn.open("POST", JsonRpc.rootUrl + url, false);
conn.send(toJSON(params));
var o = eval("(" + conn.responseText + ")");
if (o.error) {
throw o.error;
} else {
return o.result;
}
}
};
동기 화 와 비동기 사용 은 다음 과 같 습 니 다.
//
JsonRpc.request("XXXService.xx", [params]);
//
var callback = function(result, ex) {
};
JsonRpc.request("XXXService.xx", [params], callback);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.