六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

用JavaScript編寫HelloWorld應用(轉)

[摘要]你是一個渴望永遠站在技術最前沿的Java開發者嗎?軟件產業風云變幻,你渴望把握Web的未來,更重要的是,如何把自己數年的Java經驗發揮到極致。要尋找這些問題的答案,你不必走得太遠,答案就在于SOAP。 SOAP(簡單對象訪問協議)是一種利用XML編碼數據的有線協議,它為Java的平臺無關性、可移...
你是一個渴望永遠站在技術最前沿的Java開發者嗎?軟件產業風云變幻,你渴望把握Web的未來,更重要的是,如何把自己數年的Java經驗發揮到極致。要尋找這些問題的答案,你不必走得太遠,答案就在于SOAP。

SOAP(簡單對象訪問協議)是一種利用XML編碼數據的有線協議,它為Java的平臺無關性、可移植性帶來了更高層次的協同操作能力。在這個關于SOAP的系列文章的第二篇中,我介紹了Apache SOAP。作為SOAP規范的實現之一,Apache SOAP簡化了SOAP應用的構造。我們曾經用Apache SOAP構造了兩個簡單的HelloWorld服務,以及調用這些服務的sayHelloTo()方法的客戶程序。我們看到,雖然創建SOAP服務相當簡單,但客戶程序必須完成許多額外的工作,例如它必須設置Call對象,調用Call對象的invoke()方法,然后分析作為調用結果返回的Response對象。

其實,用Apache SOAP創建SOAP服務的過程還可以變得更簡單,唯一的前提是:你必須懂得規定的幾種腳本語言之一。對我來說——以及對大多數Java開發者來說,幸運的是,這些腳本語言中包含了JavaScript。確實不錯,在Apache SOAP中,你可以用JavaScript創建SOAP服務。本文要介紹的就是用JavaScript創建SOAP服務的具體做法。

一、重新構造Apache SOAP
Apache SOAP的腳本支持建立在Bean Scripting Framework(BSF,Bean腳本框架)的基礎之上。BSF原先由IBM開發,現在作為一個源代碼開放的工程發行,它使得Java程序能夠運行用其他語言編寫的腳本,也使得其他腳本語言能夠使用已有的Java類。Apache SOAP利用了BSF的前一種能力。從Apache網站下載的標準二進制版本不支持腳本。具體地說,soap.jar不包含org.apache.soap.server.InvokeBSF類,而這個類是Apache SOAP和BSF的結合點和接口。Apache SOAP的開發者知道,并非每一個使用SOAP的人都需要BSF,也并非每一個人都安裝了腳本引擎,所以在soap.jar中省略了腳本支持。要想用腳本編寫SOAP服務,你必須從源代碼重新構造以便引入InvokeBSF類。

首先要從http://xml.apache.org/dist/soap/下載源代碼(soap-src-2.0.zip)。然后,把下載得到的文件解壓縮到Apache SOAP所安裝的目錄。在我這里,它是E:驅動器的根目錄。完成后,你將在soap_2-0目錄下得到一個src子目錄,子目錄中包含Apache SOAP的所有源代碼。重新從源代碼構造Apache SOAP之前,你還必須下載必需的BSF jar文件。在ftp://ftp.mozilla.org/pub/js/可以找到一個。請結合Mozilla的JavaScript引擎Rhino使用它,Rhino可以從http://www.mozilla.org/rhino/download.html下載一個ZIP文件得到。我把這個文件解壓縮到E:盤根目錄下,最終得到一個包含了Rhino的E:\rhino目錄,我們感興趣的是它的js.jar。

接下來,你需要一個實際執行重新構造操作的工具,即Ant。Ant也是一個Apache的軟件工程,它是一個基于Java的工具。Ant實際上和創建Web服務器Tomcat的工程同屬一個工程,即Jakarta。在Ant中,所有構造信息,例如構造目標、依賴關系等,都通過XML配置文件指定,這是Ant獨一無二的特點。此外,Ant是可擴展的。請參見本文最后“參考資源”部分收錄的文章,了解如何充分發揮Ant的潛能。你可以從參考資源提供的鏈接下載Ant,然后解開壓縮(我把它放入了C:盤的根目錄)。

現在,從Apache SOAP安裝目錄執行如下命令:

set
CLASSPATH=E:\jakarta-tomcat\lib\servlet.jar;E:\xerces-1_2_0\xerces.jar;
E:\soap-2_0\lib\bsf.jar
C:\build\bin\ant


由于上面的命令沒有指定一個XML配置文件,Ant批命令文件將在當前目錄(在我這里,是E:\soap_2-0)中尋找一個名為build.xml的文件。Apache SOAP提供了這個文件。打開這個文件可以看到,只有當com.ibm.bsf.BSFManager在classpath中時,InvokeBSF類才會編譯。這就是我把bsf.jar(它包含了BSFManager類)放入類路徑的原因。把新構造出來的soap.jar文件從build\lib子目錄復制到lib子目錄(我建議修改原來的soap.jar文件進行備份)。最后,把bsf.jar和js.jar加入到Web服務器的類路徑。

大功告成!現在你可以開始用腳本編寫SOAP服務了。

二、用JavaScript編寫HelloWorld應用
現在,我們用JavaScript重新編寫第二篇文章的HelloWorld服務。服務程序的完整代碼如下:

function sayHelloTo(name)
{
return "Hello " + name + ", How are you?";
}


還有比這更容易的事情嗎?不過,不要讓這簡單易行欺騙了你。事實上,你可以在服務程序里進行相當復雜的處理。例如,你可以從腳本代碼訪問任何標準的Java類。請看下面經過修改的腳本代碼,它輸出服務器的時間:

function sayHelloTo(name)
{
var today = new java.util.Date();
java.lang.System.out.println("Today is " + today.toString());
return "Hello " + name + ", How are you?";
}


另外,你還可以導入和使用自己的任意Java類。例如,我們可以修改腳本代碼,讓它使用Name JavaBean:

importClass(Packages.hello.Name);
function sayHelloTo(name)
{
var today = new java.util.Date();
java.lang.System.out.println("Today is " + today.toString());
var beanName = new Name();
beanName.setName("John");

java.lang.System.out.println(beanName.getName());
return "Hello " + name + ", How are you?";
}


三、部署服務
在使用JavaScript版本的服務之前,首先要部署它。正如本系列文章的第二篇所介紹的,在Apache SOAP中部署服務有兩種辦法:使用Web界面的管理工具,或者從命令行部署服務。下面我們來看看兩種辦法的具體操作過程。

3.1 使用Web界面的管理工具
要使用Web界面的管理工具,用瀏覽器打開http://localhost:8080/apache-soap/admin。點擊窗口左邊的Deploy按鈕。記住,ID輸入框用來設置對象ID,SOAP基礎設施利用對象ID把RPC(遠程過程調用)請求關聯到SOAP服務。每一個Apache SOAP服務都必須有一個對象ID,而且這個對象ID必須在該服務器上部署的所有服務之間唯一。把ID設置成urn:Hello,這個ID也就是我們在第二篇文章中為服務設置的對象ID。

把Scope輸入框設置成application。回顧一下,Scope輸入框用來指定響應調用請求的服務實例的生存時間(請參考第二篇文章中的更多說明)。

在Methods輸入框中輸入當前部署的服務允許調用的方法名字,多個方法名字之間以空白字符分隔。我們的服務只支持一個方法,即sayHelloTo()。

由于服務用JavaScript實現,而不是象第二篇文章那樣用Java實現,所以Provider Type輸入框應該填script。相應地,Java Provider輸入框(包括Provider Class和Static輸入框)不必填寫。但現在必須填寫Script Provider輸入框,選擇JavaScript(Rhino)作為腳本語言。由于我們將在Script文本輸入框中提供腳本正文,所以現在不用填寫Script Filename輸入框。把下面的腳本代碼復制到Script輸入框:

importClass(Packages.hello.Name);
function sayHelloTo(name)
{
var today = new java.util.Date();
java.lang.System.out.println("Today is " + today.toString());
var beanName = new Name();
beanName.setName("John");

java.lang.System.out.println(beanName.getName());
return "Hello " + name + ", How are you?";
}


現在滾動到屏幕的最下面,點擊表單下面的Deploy按鈕(不是窗口左邊的Deploy按鈕)。要驗證服務已經成功部署,點擊窗口左邊的List按鈕。這時,urn:Hello服務應該在服務清單中出現。點擊這個服務,確認所有信息都與剛才輸入的吻合。

3.2 從命令行部署服務
要從命令行部署服務,所有部署信息必須放入一個XML部署描述器文件。下面是我用來部署該服務的XML部署描述器文件:

<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment"
id="urn:Hello">
<isd:provider type="script" scope="Application" methods="sayHelloTo">
<isd:script language="javascript">
importClass(Packages.hello.Name);
function sayHelloTo(name)
{
var today = new java.util.Date();
java.lang.System.out.println("Today is " + today.toString());
var beanName = new Name();
beanName.setName("John");

java.lang.System.out.println(beanName.getName());
return "Hello " + name + ", How are you?";
}
</isd:script>
</isd:provider>
</isd:service>


和第二篇文章用到的部署描述器文件相比,這里主要的不同在于把提供者類型設置成了script而不是java。由于這個原因,部署描述器文件不再指定一個Java類,而是提供了服務的腳本代碼。

部署服務之前應當確保Web服務器已經啟動。下面的代碼顯示了如何部署服務:

java org.apache.soap.server.ServiceManagerClient
http://localhost:8080/apache-soap/servlet/rpcrouter deploy
DeploymentDescriptor.xml


DeploymentDescriptor.xml是前面介紹的包含部署描述信息的XML文件。要驗證服務已經成功部署,執行下面的命令:

java org.apache.soap.server.ServiceManagerClient
http://localhost:8080/apache-soap/servlet/rpcrouter query urn:Hello


這時,我們應該看到和DeploymentDescriptor.xml文件一樣的內容。

四、測試
我們用第二篇文章提供的客戶程序Client.java來測試HelloWorld服務。為什么可以用同一個客戶程序訪問JavaScript編寫的服務呢?因為客戶程序完全不會在乎服務用什么語言編寫。只要服務能夠理解SOAP請求,能夠返回SOAP應答,客戶程序不會關注服務用什么方式實現。回顧一下,下面就是我用來運行hello.Client的批命令文件:

set
CLASSPATH=E:\soap-2_0\samples\;E:\soap-2_0\lib\soap.jar;
E:\xerces-1_2_0\xerces.jar
java hello.Client Tarak


觀察Web服務器的控制臺窗口,每次運行客戶程序的時候,我們都可以看到當前的日期和輸出“John”。

■ 結束語
在這篇文章中,我介紹了Apache SOAP實現所提供的腳本語言支持。為什么說它很重要呢?只要分析一下為何Web開發如此流行。在我看來,一個關鍵的原因在于Web開發已經成熟,幾乎任何人都能夠用HTML和JavaScript之類的簡單腳本語言構造出復雜的Web頁面。類似地,在Web開發的服務器端,人們可以使用JSP這類易學但強大的腳本語言。我認為這種推理同樣適用于SOAP開發。如果SOAP想要挺進主流,獲得絕大部分人的支持,那么它應該盡量地簡化。Apache SOAP加入對腳本的支持正是為了這個目標;它顯著地擴展了創建SOAP服務的開發者的范圍。

不過,不要忘了還有另一個因素需要考慮:客戶端開發者,即調用SOAP服務的開發者。如前所述,Apache SOAP的客戶端開發者比較“吃虧”,反而增加了一些原本不必做的工作。因此,在本系列文章的下一篇也即最后一篇中,我將介紹一個框架,它以Java 2平臺1.3版本新引入的動態代理類為基礎,使得創建客戶程序就象創建SOAP服務一樣簡單直觀。(下一篇)
■ 參考資源

W3C的SOAP 1.1規范

http://www.w3.org/TR/SOAP/
下載Apache SOAP:

http://xml.apache.org/dist/soap/
關于IBM SOAP工程的更多信息:

http://www.alphaworks.ibm.com/tech/soap4j
關于Mozilla Rhino的更多信息:

http://www.mozilla.org/rhino/
關于Ant的更多信息:

http://jakarta.apache.org/ant/index.html
利用Java和Ant自動化構造過程(JavaWord,2001年10月):

http://www.javaworld.com/jw-10-2000/jw-1020-ant.html
下載Ant:

http://jakarta.apache.org/builds/jakarta-ant/release/v1.2/bin/





主站蜘蛛池模板: 日本精品a在线 | 一级女人毛片人一女人 | 日本道综合一本久久久88 | 日产乱码卡一卡2卡三卡四福利 | 日本高清在线视频www色下载 | 亚洲成a人v欧美综合天堂软件 | 亚洲成人第一 | 日本高清视频一区 | 日韩午夜在线视频不卡片 | 亚洲 日本 欧美 中文字幕001 | 青草草产国视频 | 欧美亚洲欧美区 | 色狠狠色综合吹潮 | 亚洲伊人久久大香线蕉啊 | 一级做a爰片 | 日本欧美一区二区三区在线观看 | 色综合天天综合中文网 | 欧美一级网址 | 日韩中文字幕一区二区不卡 | 天天干天天上 | 天天影视色香欲综合网天天录日日录 | 特片网在线观看 | 青草99 | 日韩麻豆 | 欧美性第一页 | 日本高清在线播放一区二区三区 | 青青草原国产视频 | 亚洲第一页在线视频 | 天天干天天爱天天操 | 中国黄色毛片 | 欧美午夜色视频国产精品 | 日本人亚洲人成人 | 四虎永久免费地址在线观看 | 亚洲国产精品线播放 | 亚洲视频在线观 | 一区在线视频 | 四虎www成人影院免费观看 | 色综合综合色综合色综合 | 天天做夜夜做久久做狠狠 | 日本a级片免费 | 青青国产成人久久激情91麻豆 |