国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-18 12:12:32
字體:
供稿:網(wǎng)友

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

  <form>
  <input type="text" name="textField">

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 定州市| 明溪县| 巴里| 宣城市| 县级市| 延长县| 成都市| 阿尔山市| 阳春市| 于田县| 汤原县| 彭州市| 库伦旗| 光泽县| 灌云县| 油尖旺区| 永寿县| 察哈| 太保市| 酉阳| 新蔡县| 琼结县| 芮城县| 邹平县| 南开区| 卢龙县| 镇宁| 馆陶县| 石景山区| 曲麻莱县| 盐山县| 乌鲁木齐市| 建湖县| 大渡口区| 正蓝旗| 平定县| 桂林市| 灵川县| 武威市| 五大连池市| 达孜县|