资讯专栏INFORMATION COLUMN

jsonrpc4j在Java项目间通讯实例讲解【轰隆隆原创】

Miracle / 1023人阅读

摘要:三者之中既可独立使用,又可与无缝集合,比较适合于基于的项目开发。为开源项目,源代码和包在网上都可以下载到,为了避免广告嫌疑故略去。有必要的情况下可以对参数进行加密,并在这里解密。就是对外公开的方法。转贴请注明轰隆隆小站

技术介绍

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 List> 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;
}
Java客户端调用
    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")
    public  T invokes(String methodName, Object argument)throws Throwable {
        return (T)invoke(methodName, argument,Type.class.cast(List.class));
    }

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

至此,整个请求流程结束,各位可以试着运行,有问题可以随时觅我,本人轰隆隆-小站欢迎大家光临。

因为时间仓促,文章难免有纰漏和不足之处,敬请各位大侠斧正。

转贴请注明轰隆隆-小站

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64373.html

相关文章

  • 博客 - 收藏集 - 掘金

    摘要:技术之类加载机制掘金类加载机制是语言的一大亮点,使得类可以被动态加载到虚拟机中。玩转仿探探卡片式滑动效果掘金讲起本篇博客的历史起源,估计有一段历史了。 Java 技术之类加载机制 - Android - 掘金类加载机制是 Java 语言的一大亮点,使得 Java 类可以被动态加载到 Java 虚拟机中。 这次我们抛开术语和概念,从例子入手,由浅入深地讲解 Java 的类加载机制。 本文...

    Shimmer 评论0 收藏0
  • Java深入-框架技巧

    摘要:从使用到原理学习线程池关于线程池的使用,及原理分析分析角度新颖面向切面编程的基本用法基于注解的实现在软件开发中,分散于应用中多出的功能被称为横切关注点如事务安全缓存等。 Java 程序媛手把手教你设计模式中的撩妹神技 -- 上篇 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样…… Java 进阶面试问题列表 -...

    chengtao1633 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<