zoukankan      html  css  js  c++  java
  • jsonrpc环境搭建和简单实例

    一、环境准备

      下载需要的jar包和js文件,下载地址:https://yunpan.cn/cxvbm9DhK9tDq  访问密码 6a50

    二、新建一个web工程,jsonrpc-1.0.jar复制到lib目录下,jsonrpc.js放到WebContent目录下,如下图所示:

     

    到此,环境已经准备完毕。

    简单实例:

    一、新建RPC远程调用的类,RPCTest.java,如下图所示:

    源码如下:

    package com.cvicse.ump.rpc;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class RPCTest {
    	
    	public String TestStringRpc(String rpcString){
    		return "rpc字符串:"+rpcString;
    	}
    	
    	public Map TestMapRpc(String schoolName){
    		Map map = new HashMap<String, String>();
    		map.put("初一","好好学习,努力上初二");
    		map.put("初二","好好学习,努力上初三");
    		map.put("初三","好好学习,努力上大学");
    		
    		return map;
    	}
    
    }
    

      代码分析:函数TestStringRpc返回一个字符串;函数TestMapRpc返回一个map。

    二、新建jsp,调用远程接口,如下图所示:

    源码如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <jsp:useBean id="JSONRPCBridge" scope="session" class="com.metaparadigm.jsonrpc.JSONRPCBridge" />
    <jsp:useBean id="RPCTest" scope="request" class="com.cvicse.ump.rpc.RPCTest" ></jsp:useBean>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>RPC TEST</title>
    <script type="text/javascript" src="jsonrpc.js"></script>
    <%
    JSONRPCBridge.registerObject("RPCTest", RPCTest);
    %>
    <script type="text/javascript">
        var jsonrpc = new JSONRpcClient("JSON-RPC");
        function callback(result, exception){
            if (exception == null) {
                alert(result);
            } else {
                alert(exception.message);
            }
        }
        function getRPCName(){
            jsonrpc.RPCTest.TestStringRpc(callback,"你好,祖国!");
        }
        function getRPCMap(){
            jsonrpc.RPCTest.TestMapRpc(receive,"实验中学");
        }
        function receive(result, exception){
            if (exception == null) {
                var mid = result.map;
                for(var key in mid){
                    alert(key+":"+mid[key]);
                }
    
            }else {
                alert(exception.message);
            }
        }
    </script>
    </head>
    <body>
    <input type="button" value="rpc字符串测试" onclick="getRPCName()">
    <input type="button" value="rpcMap测试" onclick="getRPCMap()">
    </body>
    </html>

    源码分析:

    生成一个JSONRPCBridge对象:<jsp:useBean id="JSONRPCBridge" scope="session" class="com.metaparadigm.jsonrpc.JSONRPCBridge" />;

    生成一个RPCTest对象:<jsp:useBean id="RPCTest" scope="request" class="com.cvicse.ump.rpc.RPCTest" ></jsp:useBean>;

    引入jsonrpc.js文件:<script type="text/javascript" src="jsonrpc.js"></script>

    把要远程调用的对象注册:JSONRPCBridge.registerObject("RPCTest", RPCTest);

    定义远程调用的客户端:var jsonrpc = new JSONRpcClient("JSON-RPC");函数参数"JSON-RPC"调用servlet的url,和后面Web.xml中定义的servlet中url对应;

    真正的远程调用:jsonrpc.RPCTest.TestStringRpc(callback,"你好,祖国!");和jsonrpc.RPCTest.TestMapRpc(receive,"实验中学");参数中的callback和receive是两个对应的回调函数。

    三、在Web.xml中,配置对应的servlet,如下图所示:

    源码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        <servlet>
            <servlet-name>JSONRPCServlet</servlet-name>
            <servlet-class>
                com.metaparadigm.jsonrpc.JSONRPCServlet
            </servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>JSONRPCServlet</servlet-name>
            <url-pattern>/JSON-RPC</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>

    注意:url-pattern中的/JSON-RPC与jsp中var jsonrpc = new JSONRpcClient("JSON-RPC");中的参数一致。

    运行效果:

    对应工程源码:https://yunpan.cn/cxvzMXyEFS6tf  访问密码 6561

  • 相关阅读:
    Golang 数组
    Golang 定时任务库使用
    Golang 选项设计模式
    使用阿里云构建海外docker镜像
    大数相加算法实现
    递归思想和迭代思想
    阶乘函数(factorial)——结果在整型范围内的阶乘计算
    最大公约数和最小公倍数(Greatest Common Divisor and Least Common Multiple)
    日结(2018年12月23日)
    日结(2018年12月22日)
  • 原文地址:https://www.cnblogs.com/dyh004/p/5204200.html
Copyright © 2011-2022 走看看