摘要:三者之中既可獨立使用,又可與無縫集合,比較適合于基于的項目開發。為開源項目,源代碼和包在網上都可以下載到,為了避免廣告嫌疑故略去。有必要的情況下可以對參數進行加密,并在這里解密。就是對外公開的方法。轉貼請注明轟隆隆小站
技術介紹
json-rpc是基于json的跨語言遠程調用協議,比xml-rpc、webservice等基于文本的協議傳輸數據格小;相對hessian、java-rpc等二進制協議便于調試、實現、擴展,是非常優秀的一種遠程調用協議。目前主流語言都已有json-rpc的實現框架,java語言中較好的json-rpc實現框架有jsonrpc4j、jpoxy、json-rpc。三者之中jsonrpc4j既可獨立使用,又可與spring無縫集合,比較適合于基于spring的項目開發。本文將介紹jsonrpc4j的具體使用。jsonrpc4j為開源項目,源代碼和JAR包在網上都可以下載到,為了避免廣告嫌疑故略去。
Java服務端配置web.xml 中添加
JsonRpcServerServlet com.service.jsonrequest.ServiceJsonRpcServlet 10 JsonRpcServerServlet /json-Rpc
此處配置的/json-Rpc為客戶端請求訪問地址。
ServiceJsonRpcServlet的servlet
private JsonRpcServer rpcService = null; public void init(ServletConfig config) throws ServletException { super.init(config); rpcService = new JsonRpcServer(new ReceiveChannel(), ReceiveChannel.class); }
此處的ReceiveChannel類就是將向客戶端展現的類。在service方法中可以對客戶端的請求頭進行預驗證
protected void service(HttpServletRequest req, HttpServletResponse resp){ String UserKey = req.getHeader("UserKey"); //在此可以驗證客戶端的請求,前提是客戶端需要在請求頭中加入相應的值,我在后面在講。 }
接下來我們看ReceiveChannel的實現,ReceiveChannel里面的方法是可以被客戶端所能調用的,方法的返回對象是可以被客戶端所接收到的,返回的類型可以在客戶端進行定義,可以是String,List,int,甚至可以是Java bean對象或者json格式。對于方法的傳參,在客戶端調用的時候需要設置,以下我以例子為大家講解
public ListJava客戶端調用> publicQuery(String key1,String key2,String sql) throws Exception{ //在進行業務邏輯處理前,可以對傳遞過來的參數進行合法性驗證。 //有必要的情況下可以對參數進行加密,并在這里解密。 List > list = new ArrayList >(); HashMap hm = new LinkedHashMap (); hm.put("網站名稱","轟隆隆小站"); hm.put("網站地址","http://www.honglonglong.com"); list.add(hm); return list; }
public List> getQueryMap(String sql){ List > list = new ArrayList >(); JsonRpcHttpClient client; try { //實例化請求地址,注意服務端web.xml中地址的配置 client = new JsonRpcHttpClient(new URL("http://127.0.0.1:8080/json-Rpc")); } catch (MalformedURLException e) { e.printStackTrace(); return list; } //請求頭中添加的信息 Map headers = new HashMap (); headers.put("UserKey", "www.honglonglong.com"); //添加到請求頭中去 client.setHeaders(headers); try { //將請求參數封裝為數組(注:服務端publicQuery方法的參數個數) String [] send =new String[3]; send[0]="我是轟隆隆"; send[1]="轟隆隆是我"; send[2]=sql; long x1=System.currentTimeMillis(); //此處就是向服務端獲取數據。publicQuery就是ReceiveChannel對外公開的方法。 list = client.invokes("publicQuery",send); System.out.println("請求時間:"+ (System.currentTimeMillis()-x1)+"毫秒,返回記錄數:"+list.size()+"條,SQL:"+sql); return list; } catch (Throwable e) { e.printStackTrace(); return null; } }
接下來我們看一下JsonRpcHttpClient的invokes方法寫法
@SuppressWarnings("unchecked") publicT invokes(String methodName, Object argument)throws Throwable { return (T)invoke(methodName, argument,Type.class.cast(List.class)); }
其中的invoke方法是JsonRpcHttpClient類的原始方法,可以不作處理。
至此,整個請求流程結束,各位可以試著運行,有問題可以隨時覓我,本人轟隆隆-小站歡迎大家光臨。
因為時間倉促,文章難免有紕漏和不足之處,敬請各位大俠斧正。
轉貼請注明轟隆隆-小站
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/64373.html
摘要:技術之類加載機制掘金類加載機制是語言的一大亮點,使得類可以被動態加載到虛擬機中。玩轉仿探探卡片式滑動效果掘金講起本篇博客的歷史起源,估計有一段歷史了。 Java 技術之類加載機制 - Android - 掘金類加載機制是 Java 語言的一大亮點,使得 Java 類可以被動態加載到 Java 虛擬機中。 這次我們拋開術語和概念,從例子入手,由淺入深地講解 Java 的類加載機制。 本文...
摘要:從使用到原理學習線程池關于線程池的使用,及原理分析分析角度新穎面向切面編程的基本用法基于注解的實現在軟件開發中,分散于應用中多出的功能被稱為橫切關注點如事務安全緩存等。 Java 程序媛手把手教你設計模式中的撩妹神技 -- 上篇 遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經風雨慢慢變老,回首走過的點點滴滴,依然清楚的記得當初愛情萌芽的模樣…… Java 進階面試問題列表 -...
閱讀 2929·2021-11-24 09:39
閱讀 3612·2021-11-22 13:54
閱讀 3415·2021-11-16 11:45
閱讀 2444·2021-09-09 09:33
閱讀 3202·2019-08-30 15:55
閱讀 1297·2019-08-29 15:40
閱讀 926·2019-08-29 15:19
閱讀 3402·2019-08-29 15:14