??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品网站视频,久久综合五月,国产91在线播放http://www.aygfsteel.com/jbwang/JINBO~~zh-cnWed, 09 Jul 2025 13:56:13 GMTWed, 09 Jul 2025 13:56:13 GMT60json rpc 实现http://www.aygfsteel.com/jbwang/archive/2009/06/18/283092.htmlJINBO~~JINBO~~Thu, 18 Jun 2009 09:22:00 GMThttp://www.aygfsteel.com/jbwang/archive/2009/06/18/283092.htmlhttp://www.aygfsteel.com/jbwang/comments/283092.htmlhttp://www.aygfsteel.com/jbwang/archive/2009/06/18/283092.html#Feedback1http://www.aygfsteel.com/jbwang/comments/commentRss/283092.htmlhttp://www.aygfsteel.com/jbwang/services/trackbacks/283092.html工作中,需要用到JSON RPCQ整了个例子,q将实现q程贴出来,供新学者参考:至于JSON RPC的原理,在网上有很多文章Q在此不再多aQ?br /> Q?Q获得JSON RPC支持QJSON RPC是一个客L与服务器异步通讯机制Qؓ实现JSON RPCQ先得到JAR包,及其JS文g。也可以导入JSON RPC 源码到工E中。我在这现这个例子时Q是导入了其源码?br /> Q?Q修改web.xml配置Q当工程启动Ӟ服务器加裁json rpc 相应的servlet ,获得容器支持,加入如下配置Q?br />
<!-- 用于JSON RPC -->
 <servlet>
  <servlet-name>JSONRPCServlet</servlet-name>
  <servlet-class>
   com.metaparadigm.jsonrpc.JSONRPCServlet
  </servlet-class>
  <load-on-startup>2</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>JSONRPCServlet</servlet-name>
  <url-pattern>/JSON-RPC</url-pattern>
 </servlet-mapping>

Q?Q创建后台类文gQ此例中用到两个c?Examle.java,User.java
User.javac,如下Q?/p>

package test;

import java.io.*;

public class User implements Serializable{

 /**
  *
  */
 private static final long serialVersionUID = 1L;
 
 private String name;
 private int age;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 
}


Example.java cd下:
package test;

import java.io.*;

public class Example implements Serializable {

 /**
  *
  */
 private static final long serialVersionUID = 1L;
 
 public String aboutMe(User user){  
  String str="您好,我是"+user.getName()+",今年"+user.getAge()+"?;
  return str;
 }

 public String aboutMe(){  
  String str="您好,我是张三,今年30?;
  return str;
 }

}


Q?Q创建前台访问JSP文gQƈ~写相应的JS代码Qjsonrpc.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<jsp:useBean id="JSONRPCBridge" scope="session"
 class="com.metaparadigm.jsonrpc.JSONRPCBridge" />
<jsp:useBean id="example" scope="session"
 class="test.Example" />
<%
JSONRPCBridge.registerObject("example", example);
%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'jsonrpc.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 
 <script type="text/javascript" src="js/util/jsonrpc.js"></script> 
 <script type="text/javascript">

 <!--jsonrpc 客户端JS代码 -->
 var jsonrpc=null;
 function onLoad(){
  jsonrpc=new JSONRpcClient("JSON-RPC"); 
 }
  
 function aboutme_1(){
  var str1=jsonrpc.example.aboutMe();
  alert(str1); 
 }


 function aboutme_2(name,age){
  var user={"javaclass":"test.User","name":name,"age":age};
  var str2=jsonrpc.example.aboutMe(user);
  alert(str2);
 } 
 
 </script>

  </head>
 
  <body onload="onLoad()">
    JSON RPC 试,通过JS异步获取q程服务器后C息,在IE上显C?br />     <br>
    <br>
    异步调用后台数据Q在前台昄
    <input type=button id="aboutme_1" value=" show aboutme" onclick="aboutme_1()"><br><br>
    通过客户端传入的信息Q构造一个对象,传到后台Q再在前台显C?br />     <input type=button id="aboutme_2" value=" show aboutme" onclick="aboutme_2('李四','32')">
  </body>
</html>


在JSP面文g中,有几点,本h以ؓ是比较重要的Q?br /> Q?Q通过useBeanQ蝲入JSONRPCBridge实例Qƈ用同L方式Q蝲入业务处理类实例example.
<jsp:useBean id="JSONRPCBridge" scope="session"
 class="com.metaparadigm.jsonrpc.JSONRPCBridge" />
<jsp:useBean id="example" scope="session"
 class="test.Example" />
Q?Q将前面加裁的example注册到JSONRPCBridge
<%
JSONRPCBridge.registerObject("example", example);
%>
Q?Q引入Jsonrpc 的js  <script type="text/javascript" src="js/util/jsonrpc.js"></script> 
Q?Q在面加蝲时new一个JSON RPC 客户端,q一步不可少
    var jsonrpc=new JSONRpcClient("JSON-RPC"); 
Q?Q以上准备好后,在客L可以与服务器进行异步通讯?br />

 

 

 

 





 



JINBO~~ 2009-06-18 17:22 发表评论
]]>
设计模式之facadehttp://www.aygfsteel.com/jbwang/archive/2009/06/18/283020.htmlJINBO~~JINBO~~Thu, 18 Jun 2009 04:26:00 GMThttp://www.aygfsteel.com/jbwang/archive/2009/06/18/283020.htmlhttp://www.aygfsteel.com/jbwang/comments/283020.htmlhttp://www.aygfsteel.com/jbwang/archive/2009/06/18/283020.html#Feedback0http://www.aygfsteel.com/jbwang/comments/commentRss/283020.htmlhttp://www.aygfsteel.com/jbwang/services/trackbacks/283020.html       Facade 即传说中的外观模式,在复杂的企业应用中,各子pȝ间的关系是很紧密的,Z降低子系l或模块之间的耦合Q可对复杂的业务逻辑q行l装Q对外就表现Z个统一的接口Ş式,提供一个调用入口,不管内部的逻辑如何变化Q都不会影响到对外的表面形式Q这是它的基本的核心思想?br />       关于FacadeQ这里有D|通俗的理解,感谢原创Q呵c?br />       Facade外观模式Q是一U结构型模式Q它主要解决的问题是Q组件的客户和组件中各种复杂的子pȝ有了q多的耦合Q随着外部客户E序和各子系l的演化Q这U过多的耦合面很多变化的挑战。在q里我想举一个例子:比如Q现在有一辆汽车,我们Q客L序)要启动它Q那我们p发动引擎Q子pȝ1Q,使四个R轮(子系l?/span>2Q{动。但是实际中我们q不需要用手推动R轮其{动,我们t下沚wQ此时汽车再Ҏ一些其他的操作使R轮{动。a门就好比pȝl我们留下的接口Q不论汽车是以何U方式{动R轮,车轮变化成什么牌子的Q我们要开走汽车所要做的还是踩下a门?br />       GoF《设计模式》中说道Qؓ子系l中的一l接口提供一个一致的界面Q?/span>Facade模式定义了一个高层接口,q个接口使得q一子系l更加容易用?br />
以下为简单的代码实现Q首先我们要实现三个子系l(Wheel?/span>Engine?/span>BodyQ:

       internal class Engine

    {

        public string EngineWork()

        {

            return "BMW's Engine is Working";

        }

 

        public string EngineStop()

        {

            return "BMW's Engine is stoped";

        }

    }

 

    internal class Wheel

    {

        public string WheelCircumrotate()

        {

            return "BMW's Wheel is Circumrotating";

        }

 

        public string WheelStop()

        {

            return "BMW's Wheel is stoped";

        }

    }

   

    internal class Body

    {

        public Wheel[] wheels = new Wheel[4];

        public Engine engine = new Engine();

        public Body()

        {

            for (int i = 0; i < wheels.Length; i++)

            {

                wheels[i] = new Wheel();

            }

        }

}

 

然后Q我们再来实现汽车的Facade

class CarFacade

    {

        Body body = new Body();

 

        public void Run()

        {

            Console.WriteLine(body.engine.EngineWork());

            for(int i = 0; i < body.wheels.Length; i++)

            {

                Console.WriteLine(body.wheels[i].WheelCircumrotate());

            }

        }

 

        public void Stop()

        {

            Console.WriteLine(body.engine.EngineStop());

            for (int i = 0; i < body.wheels.Length; i++)

            {

                Console.WriteLine(body.wheels[i].WheelStop());

            }

        }

}

 

现在我们来用客LE序验证一下,代码如下Q?span lang="EN-US">

class Program

    {

        static void Main(string[] args)

        {

            CarFacade car = new CarFacade();

            car.Run();

            car.Stop();

            Console.Read();

        }

}

      

       执行l果如下Q?/span>

   BMW's Engine is Working

BMW's Wheel is Circumrotating

BMW's Wheel is Circumrotating

BMW's Wheel is Circumrotating

BMW's Wheel is Circumrotating

BMW's Engine is stoped

BMW's Wheel is stoped

BMW's Wheel is stoped

BMW's Wheel is stoped

BMW's Wheel is stoped

 

正如上面所_客户端代码(ProgramQ不需要关心子pȝQ它只需要关?/span>CarFacade所留下来的和外部交互的接口Q而子pȝ是在CarFacade中聚合?/span>

 

Façade模式的几个要点:

       1、从客户E序的角度看Q?/span>Facade模式不仅化了整个lgpȝ的接口,同时对于lg内部与外部客L序来_从某U程度上也达C一U?#8220;解?#8221;的效果——内部子pȝ的Q何变化不会媄响到Facade接口的变化?/span>

2?/span>Facade设计模式更注重从架构的层ơ去看整个系l,而不是单个类的层ơ?/span>Facade很多时候更是一U架构设计模式?/span>


    



JINBO~~ 2009-06-18 12:26 发表评论
]]>
վ֩ģ壺 ¡| | | ̩| Ϻ| ű| | | | | | | Ұ| | | | Ρɽ| û| | | Ǭ| ͼ| | | ɳ| | | | ̨| ٺ| | ͼ| | | | ٽ| ֹ| | | | ˹|