成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

jsonrpc4j在Java項(xiàng)目間通訊實(shí)例講解【轟隆隆原創(chuàng)】

Miracle / 1162人閱讀

摘要:三者之中既可獨(dú)立使用,又可與無(wú)縫集合,比較適合于基于的項(xiàng)目開發(fā)。為開源項(xiàng)目,源代碼和包在網(wǎng)上都可以下載到,為了避免廣告嫌疑故略去。有必要的情況下可以對(duì)參數(shù)進(jìn)行加密,并在這里解密。就是對(duì)外公開的方法。轉(zhuǎn)貼請(qǐng)注明轟隆隆小站

技術(shù)介紹

json-rpc是基于json的跨語(yǔ)言遠(yuǎn)程調(diào)用協(xié)議,比xml-rpc、webservice等基于文本的協(xié)議傳輸數(shù)據(jù)格??;相對(duì)hessian、java-rpc等二進(jìn)制協(xié)議便于調(diào)試、實(shí)現(xiàn)、擴(kuò)展,是非常優(yōu)秀的一種遠(yuǎn)程調(diào)用協(xié)議。目前主流語(yǔ)言都已有json-rpc的實(shí)現(xiàn)框架,java語(yǔ)言中較好的json-rpc實(shí)現(xiàn)框架有jsonrpc4j、jpoxy、json-rpc。三者之中jsonrpc4j既可獨(dú)立使用,又可與spring無(wú)縫集合,比較適合于基于spring的項(xiàng)目開發(fā)。本文將介紹jsonrpc4j的具體使用。jsonrpc4j為開源項(xiàng)目,源代碼和JAR包在網(wǎng)上都可以下載到,為了避免廣告嫌疑故略去。

Java服務(wù)端配置

web.xml 中添加

  
    JsonRpcServerServlet
    com.service.jsonrequest.ServiceJsonRpcServlet
    10
  

  
    JsonRpcServerServlet
    /json-Rpc
  

此處配置的/json-Rpc為客戶端請(qǐng)求訪問(wèn)地址。

ServiceJsonRpcServlet的servlet

    private JsonRpcServer rpcService = null; 
    public void init(ServletConfig config) throws ServletException {
        super.init(config); 
       rpcService = new JsonRpcServer(new ReceiveChannel(), ReceiveChannel.class); 
    } 

此處的ReceiveChannel類就是將向客戶端展現(xiàn)的類。在service方法中可以對(duì)客戶端的請(qǐng)求頭進(jìn)行預(yù)驗(yàn)證

protected void service(HttpServletRequest req, HttpServletResponse resp){
    String UserKey = req.getHeader("UserKey");
  //在此可以驗(yàn)證客戶端的請(qǐng)求,前提是客戶端需要在請(qǐng)求頭中加入相應(yīng)的值,我在后面在講。
}

接下來(lái)我們看ReceiveChannel的實(shí)現(xiàn),ReceiveChannel里面的方法是可以被客戶端所能調(diào)用的,方法的返回對(duì)象是可以被客戶端所接收到的,返回的類型可以在客戶端進(jìn)行定義,可以是String,List,int,甚至可以是Java bean對(duì)象或者json格式。對(duì)于方法的傳參,在客戶端調(diào)用的時(shí)候需要設(shè)置,以下我以例子為大家講解

public List> publicQuery(String key1,String key2,String sql) throws Exception{
    //在進(jìn)行業(yè)務(wù)邏輯處理前,可以對(duì)傳遞過(guò)來(lái)的參數(shù)進(jìn)行合法性驗(yàn)證。
    //有必要的情況下可以對(duì)參數(shù)進(jìn)行加密,并在這里解密。
    List> list = new ArrayList>();
    HashMap hm = new LinkedHashMap();
    hm.put("網(wǎng)站名稱","轟隆隆小站");
    hm.put("網(wǎng)站地址","http://www.honglonglong.com");
    list.add(hm);
 return list;
}
Java客戶端調(diào)用
    public List> getQueryMap(String sql){
        List> list = new ArrayList>();
        JsonRpcHttpClient client;
        try {
            //實(shí)例化請(qǐng)求地址,注意服務(wù)端web.xml中地址的配置
            client = new JsonRpcHttpClient(new URL("http://127.0.0.1:8080/json-Rpc"));
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return list;
        }

        //請(qǐng)求頭中添加的信息
        Map headers = new HashMap();
        headers.put("UserKey", "www.honglonglong.com");
        //添加到請(qǐng)求頭中去
        client.setHeaders(headers);
        try {
            //將請(qǐng)求參數(shù)封裝為數(shù)組(注:服務(wù)端publicQuery方法的參數(shù)個(gè)數(shù))
            String [] send =new String[3];
            send[0]="我是轟隆隆";
            send[1]="轟隆隆是我";
            send[2]=sql;
            long x1=System.currentTimeMillis();
            //此處就是向服務(wù)端獲取數(shù)據(jù)。publicQuery就是ReceiveChannel對(duì)外公開的方法。
            list = client.invokes("publicQuery",send);
            System.out.println("請(qǐng)求時(shí)間:"+ (System.currentTimeMillis()-x1)+"毫秒,返回記錄數(shù):"+list.size()+"條,SQL:"+sql);
            return list;
        } catch (Throwable e) {
            e.printStackTrace();
            return null;
        }
    }

接下來(lái)我們看一下JsonRpcHttpClient的invokes方法寫法

    @SuppressWarnings("unchecked")
    public  T invokes(String methodName, Object argument)throws Throwable {
        return (T)invoke(methodName, argument,Type.class.cast(List.class));
    }

其中的invoke方法是JsonRpcHttpClient類的原始方法,可以不作處理。

至此,整個(gè)請(qǐng)求流程結(jié)束,各位可以試著運(yùn)行,有問(wèn)題可以隨時(shí)覓我,本人轟隆隆-小站歡迎大家光臨。

因?yàn)闀r(shí)間倉(cāng)促,文章難免有紕漏和不足之處,敬請(qǐng)各位大俠斧正。

轉(zhuǎn)貼請(qǐng)注明轟隆隆-小站

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64373.html

相關(guān)文章

  • 博客 - 收藏集 - 掘金

    摘要:技術(shù)之類加載機(jī)制掘金類加載機(jī)制是語(yǔ)言的一大亮點(diǎn),使得類可以被動(dòng)態(tài)加載到虛擬機(jī)中。玩轉(zhuǎn)仿探探卡片式滑動(dòng)效果掘金講起本篇博客的歷史起源,估計(jì)有一段歷史了。 Java 技術(shù)之類加載機(jī)制 - Android - 掘金類加載機(jī)制是 Java 語(yǔ)言的一大亮點(diǎn),使得 Java 類可以被動(dòng)態(tài)加載到 Java 虛擬機(jī)中。 這次我們拋開術(shù)語(yǔ)和概念,從例子入手,由淺入深地講解 Java 的類加載機(jī)制。 本文...

    Shimmer 評(píng)論0 收藏0
  • Java深入-框架技巧

    摘要:從使用到原理學(xué)習(xí)線程池關(guān)于線程池的使用,及原理分析分析角度新穎面向切面編程的基本用法基于注解的實(shí)現(xiàn)在軟件開發(fā)中,分散于應(yīng)用中多出的功能被稱為橫切關(guān)注點(diǎn)如事務(wù)安全緩存等。 Java 程序媛手把手教你設(shè)計(jì)模式中的撩妹神技 -- 上篇 遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經(jīng)風(fēng)雨慢慢變老,回首走過(guò)的點(diǎn)點(diǎn)滴滴,依然清楚的記得當(dāng)初愛(ài)情萌芽的模樣…… Java 進(jìn)階面試問(wèn)題列表 -...

    chengtao1633 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<