亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Applet與Servlet通訊的四種方法及其比較

2019-11-18 11:57:47
字體:
來源:轉載
供稿:網友

   Applet與Servlet之間的聯系一般是間接的,即頁面請求由瀏覽器發送給Servlet,
  作為回答,Servlet將結果生成Html文檔發送給瀏覽器。很多時候在Servlet與Applet之
  間建立直接的聯系是沒有必要的,但假如要顯示一些實時的動態數據,如聊天室窗口、
  新聞顯示、股市行情等,建立兩者之間的直接聯系就很有用了。非凡地,在較為復雜的
  分布式java應用中,這種通訊更是必不可少。在客戶端Java程序與服務器端Java程序之
  間建立這種復雜的交互方式僅僅使用Servlet與Applet API是不夠的,本文為你介紹和比
  較四種通訊方式:通過HTML頁面傳遞參數,用java.net包的網絡功能建立直接網絡連接
  ,遠程方法調用(RMI)與CORBA。
   一、通過HTML頁面傳遞Applet參數
   通過HTML頁面傳遞參數是在Servlet與Applet之間建立聯系最為常用的方法。Serv
  let只要把傳遞給Applet的參數寫入HTML頁面就可以了。這種通訊是單向的,用于實現S
  ervlet對Applet的控制。其實現方法類如:
  // doGet()方法生成一個包含Applet的HTML頁面,
  // 該Applet需要一個Data參數
  Applet與Servlet通訊的四種方法及其比較
   這種方法很簡單,但它有兩個缺點。首先,所有參數都是靜態的,即一旦HTML頁面
  發送完成,要更新其中部分數據就很困難了。雖然可以使用HTTP的刷新機制,但這種刷
  新需要重新下載整個頁面,效率是很低的。第二,假如需要傳遞給Applet的數據量很大
  或數據結構很復雜,就會使得HTML頁面過于龐大或復雜了。
   二、用java.net包建立雙向通訊
   第二種方法是利用java.net包提供的網絡能力。以有連接流通訊方式為例,在服務
  器端的操作為一般為:
   ⑴ 創建一個ServerSocket對象,在指定端口監聽客戶端發來的請求。
   ⑵ 在接收到請求時accept()方法將返回一個Socket對象。
   ⑶ 用上述Socket對象創建輸入、輸出流對象。
   ⑷ 通過輸入、輸出流與客戶交互。
   ⑸ 交互完畢,關閉輸入、輸出流與Socket。
   ⑹ 服務程序運行結束,關閉ServerSocket。
   實現代碼代碼類如:
  try{
  boolean flag=true;
  Socket clientSocket=null;
  ServerSocket serverSocket = new ServerSocket(0);
  System.out.  while(flag){
  clientSocket=serverSocket.accept();
  DataInputStream is=new DataInputStream( new bufferedInputStream(clientSocket
  .getInputStream()));
  PrintStream os=new PrintStream( new bufferedOutputStream(clientSocket.getOut
  putStream()));
  // 處理Applet請求
  os.close();
  is.close();
  clientSocket.close();
  }
  serverSocket.close();
  }catch( IOException e){
  System.err.println(" Exception: "+e);
  }
   在客戶端的操作為:
   ⑴ 創建Socket對象建立與服務器的連接。
   ⑵ 用該Socket對象創建輸入、輸出流。
   ⑶ 與服務器交互。
   ⑷ 交互完畢,關閉輸入、輸出流與Socket。
   實現代碼類如:
  try {
  Socket clientSocket =new Socket("serverName",7);
  OutputStream os=clientSocket.getOutputStream();
  DataInputStream is=new DataInputStream( clientSocket.getInputStream());
  // 其它操作.
  os.close();
  is.close();
  clientSocket.close();
  }catch(Exception e){
  System.err.println("Exception:"+e);
  }
   這種方法只依靠于標準的Java網絡支持,不需要用到附加的軟件包或工具, 因此
  顯得相當簡潔和靈活,易于實現某些非凡的需要。但在另一方面,服務器端對進入請求
  以及客戶端對返回結果的分析工作量較大。假如服務器端要執行大量的操作,可以考慮
  使用RMI。
   三、遠程方法調用RMI
   Java的RMI技術顯著地改善了客戶程序操作復雜的服務器端對象的能力。對Applet
  來說,服務器端對象所提供的遠程方法可以象普通的客戶端句柄一樣調用。使用RMI時應
  先定義遠程接口,即一個繼續自java.rmi.Remote的公用接口。在該接口中定義要求在服
  務器上運行的方法,所有這些方法的throws子句至少應該聲明java.rmi.RemoteExcepti
  on異常。
   接下來是實現遠程接口,遠程接口的實現類應該:
   ⑴ 指定所實現的一個或多個接口。
   ⑵ 定義遠程對象的構造方法。
   ⑶ 提供所有可供遠程調用的方法的實現。
   ⑷ 創建和安裝安全治理器。
   ⑸ 創建一個或多個遠程對象實例。
   ⑹ 注冊至少一個遠程對象。
   下面的代碼實現一個返回日期字符串的getData()遠程方法,該方法由接口RMISer
  v2App定義:
  // 本類繼續自UnicastRemoteObject,實現接口serv2app
  package com.servletsolutions.serv2app.rmi;
  import java.rmi.*;
  import java.rmi.server.*;
  public class RMIImplementation extends UnicastRemoteObject
  implements RMIServ2App{
  public RMIImplementation() throws RemoteException{}
  public String getData() throws RemoteException{
  return java.text.DateFormat.getDateInstance().format(
  new java.util.Date());
  }
  public static void main(String[] args){
  // 安全治理器
  System.setSecurityManager(new RMISecurityManager());
  try{
  // 遠程對象實例
  RMIImplementation bootStrap = new RMIImplementation();
  // 注冊
  Naming.bind(args[0], bootStrap);
  System.out.println(args[0] + " 注冊成功");
  }catch(Exception e){
  System.err.println("注冊失敗.");
  System.err.println(e);
  }
  }
  }
   在客戶端,Applet對接口RMIServ2App的引用通過調用Naming.lookup(String)獲得
  ,如下所示:
   RMIServ2App obj = (RMIServ2App)Naming.lookup("http://" + getCodeBase().getHo
  st() + "/ServerName");
   除了編譯Java代碼之外,還要用rmic編譯器生成遠程對象的存根和骨架。存根(S
  tub)是遠程對象在客戶端的代理,它將RMI調用傳遞給服務器端的骨架(Skeleton),
  后者負責將該調用傳遞給實際的遠程方法。例如執行命令rmic com.servletsolutions.
  RMIImplementation,則生成的兩個類文件分別為RMIImplementation_Stub.class 和RM
  IImplementation_Stub.class,前者封裝入Applet且運行于客戶端,后者封裝入Servle
  t且運行與服務器端。
   當大量的數據是由服務器端的對象動態提供時使用RMI是非常合適的。雖然RMI支持
  面向對象的分布式編程,但它要求客戶端和服務器端都是Java程序。因此,對于使用混
  合語言開發的應用來說,CORBA比RMI更為適用。
   四、使用CORBA
   CORBA即公用對象請求代理體系(Common Object Request Broker Architecture)
  ,它的使用方法類似于RMI:定義接口,使用某個工具創建Stub和Skeleton,實現接口,
  在服務器上注冊后客戶就可以像本地對象一樣訪問遠程對象了。兩者主要的不同之處在
  于,CORBA使用一種語言中立的接口定義語言(IDL)來定義接口,IDL是一種可用于混合
  語言環境的更為廣泛的協議集。CORBA最大的缺點在于客戶本身必須具備調用ORB的能力
  ,這往往意味著增加一個體積較大的JAR文件。
   下面的CORBAServ2App.idl是上述getData()接口的IDL描述,它定義了一組與Java
  包名字對應的嵌套模塊:
  module com {
  module servletsolutions {
  module serv2app {
  module corba {
  interface CORBAServ2App{
  string getData();
  };
  };
  };
  };
  };
   可以用idl2java從IDL文件生成對應的java文件。其中_CORBAServ2AppImplBase.j
  ava包含了描述該接口的java抽象類,下面的CORBAImplementation類繼續自抽象類_COR
  BAServ2AppImplBase并具體實現getData()方法:
  package com.servletsolutions.serv2app.corba;
  public class CORBAImplementation extends _CORBAServ2AppImplBase {
  CORBAImplementation(String s){ super(s); }
  public String getData(){
  return java.text.DateFormat.getDateInstance().format(new java.util.Date());
  }
  }
   為了讓該類可以被客戶訪問,Servlet中還應該創建其實例。代碼如下所示:
  // 在Servlet的init()方法中初始化CORBAImplementation對象
  // 其中BOA(Basic Object Adapter)的作用類似于RMI中的注冊服務
 ?。ǔ绦蚵裕?br>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美午夜性色大片在线观看| 欧美中文字幕在线观看| 亚洲天堂av在线播放| 国产婷婷成人久久av免费高清| 亚洲美腿欧美激情另类| 午夜精品www| 久久亚洲国产精品| 国产日韩精品在线| 法国裸体一区二区| 欧美国产视频一区二区| 亚洲欧美日韩中文视频| 日本精品久久久久影院| 欧美日韩国产色视频| 亚洲精品欧美极品| 欧美日韩国产一区中文午夜| 亲子乱一区二区三区电影| 成人午夜一级二级三级| 久久久av一区| 中文字幕久久久| 国产精品白丝av嫩草影院| 亚洲日本中文字幕| 久久精品视频va| www亚洲精品| 欧洲s码亚洲m码精品一区| 久久久精品久久| 日韩欧美在线观看视频| 亚洲激情免费观看| 亚洲 日韩 国产第一| 亚洲精品国产福利| 热久久免费视频精品| 97国产精品免费视频| 欧美日韩国产精品一区二区不卡中文| 亚洲女人被黑人巨大进入| 成人激情视频在线观看| 欧美黑人巨大xxx极品| 日韩av成人在线| 日韩av一区在线| 97在线观看视频国产| 亚洲精品电影在线| 欧美小视频在线| 日韩精品在线免费播放| 日韩精品极品视频免费观看| 日韩精品高清视频| 国产精品一区电影| 国产精品一区专区欧美日韩| 在线亚洲欧美视频| 欧美丰满少妇xxxx| 夜色77av精品影院| 欧美裸身视频免费观看| 色妞在线综合亚洲欧美| 日韩精品视频在线免费观看| 亚洲视频电影图片偷拍一区| 亚洲激情第一页| 亚洲永久免费观看| 欧美性猛交丰臀xxxxx网站| 亚洲图中文字幕| 欧美日韩国产一区二区三区| 91av福利视频| 国产精品久久久91| 最近2019年中文视频免费在线观看| 欧美电影在线观看网站| 亚洲欧美成人精品| 国产日韩视频在线观看| 成人免费黄色网| 免费99精品国产自在在线| 精品美女永久免费视频| 日本一区二区三区四区视频| 国产三级精品网站| 亚洲色图13p| 久久精品免费播放| 日韩欧美在线播放| 欧美日韩国产123| 91精品国产免费久久久久久| 久久国产精品网站| 国产一区二区三区四区福利| 亚洲欧美激情另类校园| 亚洲国产第一页| 精品视频在线观看日韩| 国产精品久久久久久久美男| 欧美激情免费看| 国产精品夜色7777狼人| 久久久久久成人| 97超级碰碰人国产在线观看| 中文字幕免费国产精品| 亚洲大尺度美女在线| 欧美日韩综合视频网址| 俺去啦;欧美日韩| 4k岛国日韩精品**专区| 欧美肥老太性生活视频| 精品在线欧美视频| 国产欧美精品va在线观看| 欧美激情xxxx| 亚洲资源在线看| 国产精品极品尤物在线观看| 欧洲s码亚洲m码精品一区| 97国产精品视频| 91麻豆桃色免费看| 亚洲电影天堂av| 91中文字幕一区| 一区二区三欧美| 夜夜躁日日躁狠狠久久88av| 久久精品久久久久久国产 免费| 久久大大胆人体| 欧美大人香蕉在线| 久久艳片www.17c.com| 亚洲午夜未删减在线观看| 在线播放精品一区二区三区| 中文字幕免费精品一区高清| 国产精品1区2区在线观看| 国产成人精品网站| 国产91对白在线播放| 久色乳综合思思在线视频| 亚洲免费av网址| 中文字幕亚洲欧美日韩在线不卡| 成人黄色生活片| 日韩电影中文 亚洲精品乱码| 欧美视频国产精品| 中文字幕久热精品视频在线| 精品伊人久久97| 日韩视频在线免费| 国语自产偷拍精品视频偷| 欧美插天视频在线播放| 国产女人18毛片水18精品| 国产精品a久久久久久| 国产精品一区二区久久久| 国产一区二区三区在线看| 久久天天躁狠狠躁夜夜躁2014| 日韩美女视频在线观看| 久久97精品久久久久久久不卡| 欧美午夜精品久久久久久久| 久久精品小视频| 国产91热爆ts人妖在线| 久久精品国产欧美亚洲人人爽| 国产亚洲精品一区二555| 日韩av在线天堂网| 欧美日产国产成人免费图片| 国产精品流白浆视频| 亚洲欧美综合v| 国产亚洲欧美日韩一区二区| 久久久久久亚洲精品不卡| 91手机视频在线观看| 国产成人精品电影久久久| 欧美理论电影网| 欧美精品18videos性欧美| 欧美国产精品va在线观看| 亚洲欧洲在线免费| 欧美精品午夜视频| 亚洲香蕉成视频在线观看| 国产免费一区二区三区在线能观看| 久久免费成人精品视频| 欧美日韩成人免费| 国产免费一区二区三区香蕉精| 亚洲国产精品久久久久久| 亚洲精品永久免费精品| 中文字幕在线国产精品| 国产精品久久久久久久久借妻| 成人国产精品日本在线| 国产欧美精品日韩| 在线亚洲午夜片av大片| 日韩国产高清污视频在线观看| 粗暴蹂躏中文一区二区三区| 亚洲va欧美va国产综合剧情| 日韩电影大片中文字幕| 亚洲自拍高清视频网站|