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

首頁 > 編程 > JavaScript > 正文

在JavaScript程序中整合Java函數(上)

2019-11-18 12:12:32
字體:
來源:轉載
供稿:網友

  問題的提出:
  假定我們的Html 頁中有一些表單需要處理,并且我們需要初始化數據庫中的字段,我們該怎么辦?標準的解決辦法就是使用CGI腳本或是使用java Servlet等服務器端程序,但是你有沒有想過,還可以編寫一個腳本程序使你可以用javascript直接調用服務器端Java程序進行任何計算的結果,就像下面代碼中列的那樣:
 ?。糷tml>
  我們的表單

 ?。糵orm>
  <input type="text" name="textField">

 ?。糹nput type="button" value="Click" onClick="updateField();">
 ?。?form>
 ?。約cript>
  function updateField()
  {
  document.forms[0].textField.value=java.dbConnection.getData('SQL_eX  }
 ?。?script>
  </html>
  所以,當用戶點擊按鈕,該程序就會調用Java的dbConnection類,然后就可以在
Javascript應用程序中使用Java返回的結果了。上面的程序只是更新了textField的值,我們不必刷新整個頁面。由于這個程序也不是jsp文件,所以不必把你的頁面編譯成Java Servlet。
  你還可以使用調用某些Java函數返回的結果替代段落中的文字;在一個非常大的HTML表中,你可以使用同樣的方法,只要更新一行信息:
 ?。約cript language="JavaScript">
  function changeCol()
  {
  document.all.quote.rows[0].cells[1].innerText=java.Stock.getQuote('Wayne');
  }
  </script>
 ?。紅able id="quote" border=1>
  <tr><td>Wayne</td><td>123</td></tr>
 ?。紅r><td>Another one</td><td>34</td></tr>
 ?。?table>
  怎么樣,能夠直接在JavaScript中嵌入Java對象的調用,而且可以保證你的頁面的其它部分不會被改變,你一定對這個問題比較感愛好吧。好吧,現在就讓我們用Java Servlet來實現它吧。
  工作原理
  我的構思是使用Java Servlet編寫一個JinJ(Java in JavaScript)程序,能夠讓 HTML 頁面內整合 Java 類和 JavaScript腳本,將所有使用JavaScript調用Java函數的HTML頁面都傳送到這個Servlet中處理,JinJ將即時產生帶有Java applet的隱藏幀,這個applet起著橋梁的作用,用來和Java通訊,它的大小還不到2KB,為了調用對象,Applet使用HTTP連接同一個JinJ Servlet。JinJ用相應的JavaScript結構來替換所有的Java調用(其實每一個調用前都有前綴java),并且保持頁面的其它部分不變。所以,為了能夠讓JinJ正確識別,你的JavaScript代碼中的任何Java調用,都要使用如下的結構: java.object_name.function_name(list_of_parameters) 其中:
  java:是一個標準的前綴:
  object_name:是一個變量名,保存某些Java類的實例(在后面,我們會具體的探討如何創建/定義這樣的變量),比如說它可以是一個類名。
  function_name:是一個Java類的函數名。
  list_of_parameters:是調用的函數的參數列表(可以為空)。
  下面也將會探討如何把參數傳給Java,每個參數顯然是某個JavaScript表達式。你也可以使用預編譯頁,換句話說就是在使用HTML頁面之前編譯它。
  服務器實現
  在談編程之前我還想說一說JinJ的服務器實現。在你的服務器中需要兩個組成部分:JINJ servlet和bridge applet.。你所有需要被整合的HTML頁面都是被JinJ servlet預處理,你可以通過以下方法實現:
  a)把你的頁面當作一個參數傳遞給JinJ servlet
  所以你可以把你HTML頁中如下的超鏈接<a href="mypage.html">我的頁面</a>改為:<a href="http://myhost/servlet/JinJ?mypage.html" target="_top">我的頁面</a>
  JinJ servlet 隨即把所有的Java調用轉化成JavaScript,然后產生頁面并輸出出來。
  b)定義某種映射。舉例來說,這里我們設置Servlet調用擴展名為.JinJ的文件 (這里介紹的方法針對運行于NT上的JSWDK,你所使用的Servelt系統的具體定義映射的方法請參看你的用戶指南)
  JinJ.code=JinJ
  JinJ.initparams=servlet=http://myhost/servlet/JinJ, root=c://jswdk//webpages objects=c://jswdk//obj.txt,
   codebase=http://myhost/
  設置了以后,你就可以使用http://myhost/some_file.JinJ然后JinJ servlet將會自動被調用了
  Servlet參數
  為了讓JinJ正常運行,還應當能夠為JinJ servlet設置一些全局參數,這也是我們在編程是應當注重到的問題。對于JSWDK, Servlet屬性是參數'initparams'的一部分;對于Tomcat,則應當編輯系統中的web.xml
  1)需要設置JinJ servlet的路徑,參數名是servlet,就像這樣:
    http://your_host:port/servlet/JINJ
  2) 需要設置存放HTML頁的根目錄,參數名是root,其值就像這樣: /home/webpages (或c:/webpages) (默認值是一個空的字符串)。 例如,假如你的根目錄是:/home/webpages,并且你使用http://host/servlet/JINJ?myfile.htm 的話,那你的真實的文件名是/home/webpages/myfile.htm
  3) 需要設置你定義的Java對象的文件的完全目錄,參數名是objects,其值只是一個存放在你的服務器中的一個文件的文件名。
  4) 需要設置用于java applet的codebase,參數名是codebase,定義了存放applet的類的路徑,比如http://your_host/ 。
  以下為Tomcat中web.xml 中的相應設置:
  <servlet>
 ?。約ervlet-name>JinJ</servlet-name>
 ?。約ervlet-class>JinJ</servlet-class>
 ?。糹nit-param>
 ?。紁aram-name>servlet</param-name>
 ?。紁aram-value>http://your_host/servlet/JinJ</param-value>
 ?。?init-param>
 ?。糹nit-param>
  <param-name>root</param-name>
 ?。紁aram-value>path_to_the_root_Directory</param-value>
 ?。?init-param>
 ?。糹nit-param>
 ?。紁aram-name>objects</param-name>
 ?。紁aram-value>path_to_your_objects_file</param-value>
 ?。?init-param>
  <init-param>
 ?。紁aram-name>codebaset</param-name>
 ?。紁aram-value>http://your_host/</param-value>
  </init-param>
 ?。?servlet>
  在編程時還應當注重實現讀取對象文件中所包含的對象,或創建新的Java對象
  1. 在初始化JinJ Servlet時將創建一些Java對象,因此你必須在某個文本文件中定義這些對象,并且在參數objects中設置這個文件的路徑,這是一個文本文件,每一行描述了一個元素(空行和以#或//開頭的行將被忽略),使用下面的格式來描述參數:
  object_name=new class_name(list_of_parameters);
  換句話說,它很象每次調用類構造器的new操作符,object_name 是就是某個你將在JavaScript中使用到的標識符,例如:
  file://數據池
  A=new dbPool(5);
  file://哈希表
  B=new java.util.Hashtable();
  或者使用你自己定義的包和類:c=new myPackage.myClass(true);
  然后在JavaScript中,你就可以使用它們了,如A.connect(),其中connect() 是類dbPool的一個函數,或者使用B.put('key',value)
  注重:
  1)你的類應當放在你的CLASSPATH指定的目錄下面。
  2)你可以使用類名作為對象名 (不過這必須在沒有重名的情況下,因為對象名必須是唯一的),如:dbPool=new dbPool();
  2. 為了更優化程序,應當在編程的時候就預建一些對象組成標準化庫,通過標準化庫,你可以在運行中創建/刪除對象的實例,查看存在的對象等。
  下面就是我們需要實現的標準化庫(預定義的對象) ,對象名是JinJ,所以服務器端名為JinJ的實例將會被自動創建,這給類中有下面幾個函數:
  public boolean create(String object_name,String class_name,list_of_constrUCtors_parameters);
  public void delete(String object_name);
  public boolean exists(String object_name);
  public String id();
  public int random(int n1, int n2);
  public String rewriteURL(document,String id_name);
  public String rewriteURL(document,String id_name,String id_value);
  create(創建):能夠讓你在運行時創建某個對象的實例:
  參數為:
  - 新的對象名
  - 類名
  - 參數列表 (假如你使用默認構造函數的時候,可以為空)。
  返回值:
  - 根據創建的接過返回true 或 false
  例如:
  <script language="JavaScript">
 ?。?--創建myHash 作為一個新的哈希表Hashtable -->
  java.JinJ.create("myHash","java.util.Hashtable");
 ?。?-- 使用myHash -->
  java.myHash.put('key1','shop1');
 ?。?script>
  delete:讓你刪除任何對象的實例。
  參數為:
  - 對象名
  例如:
  <script language="JavaScript">
 ?。?-- 刪除myHash -->
  java.JinJ.delete("myHash");
  </script>
  exists:查看對象的實例是否存在。
  參數為:
  - 對象名
  返回值:
  true 或 false
  例如:
 ?。約cript language="JavaScript">
  if (java.JinJ.exists("myHash")=='false')
  {
 ?。?--創建myHash 作為一個新的哈希表Hashtable -->
  java.JinJ.create(myHash,"java.util.Hashtable");
 ?。?--使用myHash -->
  java.myHash.put('key1','shop1');
  </script>
  id: 返回唯一的標示符,比如你可以在支持session的程序中使用這個函數。
  R

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲激情久久久| 欧美壮男野外gaytube| 久久久最新网址| 国产一区二区三区视频| 国产在线拍揄自揄视频不卡99| 亚洲国产成人一区| 欧美极品欧美精品欧美视频| 51视频国产精品一区二区| 欧美日韩国产一中文字不卡| 久久99久久99精品中文字幕| 精品调教chinesegay| 国产精品久久久久久久久久免费| 91精品久久久久久久久久久| 亚洲精品久久7777777| 国产一区二区三区视频在线观看| 欧美在线播放视频| 欧美裸体xxxxx| 久久久女人电视剧免费播放下载| 中文字幕亚洲天堂| 国产成人一区二区在线| 欧美多人乱p欧美4p久久| 欧美激情视频一区二区三区不卡| 久久久综合av| 欧美大片免费观看在线观看网站推荐| 国产精品精品久久久久久| 国产美女高潮久久白浆| 日韩精品中文字幕在线| 川上优av一区二区线观看| 亚洲国产成人久久| 色偷偷91综合久久噜噜| 国产精品视频公开费视频| 中文字幕亚洲无线码a| 欧美极品少妇与黑人| 国产日韩欧美自拍| 国模gogo一区二区大胆私拍| 久久久国产一区二区三区| 91黑丝高跟在线| 色青青草原桃花久久综合| 在线观看不卡av| 亚洲成人精品在线| 久久国产精品影视| 欧美精品videossex88| 欧美日韩国产一区二区三区| 亚洲人成在线一二| 国产mv久久久| 久久久在线免费观看| 精品欧美激情精品一区| 亚洲人成欧美中文字幕| 成人网在线视频| 国产欧美日韩专区发布| 懂色aⅴ精品一区二区三区蜜月| 国产亚洲美女久久| 一区二区欧美在线| 亚洲精品一区中文| 中文字幕亚洲无线码在线一区| 日韩精品在线免费观看| 亚洲精品白浆高清久久久久久| 欧美精品激情blacked18| 成人免费视频97| 亚洲精品99999| 日韩电视剧在线观看免费网站| 久久精品最新地址| 国产精欧美一区二区三区| 久久99精品久久久久久琪琪| 狠狠久久亚洲欧美专区| 人人澡人人澡人人看欧美| 欧洲成人性视频| 26uuu日韩精品一区二区| 国产精品偷伦免费视频观看的| 成人黄色网免费| 久久精品电影一区二区| 久久99热精品| 欧美激情18p| 成人做爽爽免费视频| 国产精品丝袜久久久久久不卡| 成人黄色av网站| 欧美日韩一区二区三区| 欧美国产日韩一区| 国产69精品久久久| 国产在线98福利播放视频| 国产精品久久久久久久天堂| 中文字幕亚洲欧美| 久久乐国产精品| 成人av电影天堂| 亚洲激情自拍图| 57pao成人国产永久免费| 久久亚洲精品中文字幕冲田杏梨| 国产一区二区成人| 国产午夜精品一区理论片飘花| 亚洲国语精品自产拍在线观看| 国产成人免费91av在线| 日韩av在线网站| 国产精品xxx视频| 亚洲高清久久久久久| 人妖精品videosex性欧美| 色香阁99久久精品久久久| 欧美日韩国产精品一区| 伊人久久久久久久久久久久久| 久久精品国产综合| 国产欧美一区二区白浆黑人| 中文精品99久久国产香蕉| 日韩最新中文字幕电影免费看| 韩国日本不卡在线| 国产成人一区二区| 欧美多人爱爱视频网站| 欧美激情一级欧美精品| 日韩电影中文字幕av| 在线观看免费高清视频97| 91亚洲精品久久久| 琪琪亚洲精品午夜在线| 亚洲精品v天堂中文字幕| 日韩久久精品成人| 亚洲精品电影网站| 亚洲人成电影在线播放| 亚洲欧美国产精品久久久久久久| 国模视频一区二区三区| 懂色av影视一区二区三区| 日韩视频免费中文字幕| 中文字幕av一区| 精品久久久久久久久久久久久久| 亚洲精品理论电影| 国产精品观看在线亚洲人成网| 亚洲free性xxxx护士hd| 成人妇女淫片aaaa视频| 久久精品2019中文字幕| 69国产精品成人在线播放| 欧美日韩亚洲网| 国产色视频一区| 欧美激情在线播放| 久久久亚洲福利精品午夜| 成人精品视频99在线观看免费| 国产va免费精品高清在线| 一区二区三区无码高清视频| 91视频8mav| 久久精品中文字幕一区| 亚洲美女av在线播放| 国产精品极品美女在线观看免费| 精品小视频在线| 亚洲电影av在线| 日韩禁在线播放| 国产亚洲日本欧美韩国| 欧美—级高清免费播放| 亚洲人在线观看| 欧美性受xxx| 久久噜噜噜精品国产亚洲综合| 国产精品久久一区主播| 国产99久久精品一区二区| 九色精品免费永久在线| 国产一区二区三区在线观看视频| 久久国产加勒比精品无码| 在线精品高清中文字幕| 亚洲精品国产精品自产a区红杏吧| 国产精品久久久久av| 日韩精品在线视频观看| 欧美有码在线观看| 国产一区二区视频在线观看| 久久久久久久久久久网站| 成人免费网视频| 日韩精品中文在线观看| 国产中文字幕亚洲| 岛国av一区二区在线在线观看| 国产精品jizz在线观看麻豆| 亚洲视屏在线播放| 亚洲欧洲国产一区|