posts - 38,  comments - 22,  trackbacks - 0
          輕松玩轉(zhuǎn)Java Web Start

          Java Web Start(以下簡稱JWS)是SUN提供的一種通過Web來部署和發(fā)布Java 程序的新技術(shù),它既可以用來發(fā)布Application,也可以用來發(fā)布Applet,它獲去年全球Java技術(shù)最佳創(chuàng)意獎(jiǎng)。它僅在第一次運(yùn)行時(shí)下載程序,以后的事情,就全全交給JWS,包括版本的自動(dòng)更新和維護(hù)。這是我們曾經(jīng)夢寐以求的事情,程序運(yùn)行在客戶端(本地運(yùn)行,當(dāng)然有足夠的速度),但不用去安裝配置客戶端,也不用去考慮版本升級后對客戶端的維護(hù),這就是JWS提供給我們的好處之一。OK,下面我們就來看看如何玩轉(zhuǎn)JWS,本文僅用發(fā)布Application來做說明。
          系統(tǒng)環(huán)境:Win2000Professional+Tomcat3.2.1+JDK1.3。
          一:JWS簡介
          JWS主要用來通過網(wǎng)絡(luò)部署你的應(yīng)用程序,它具有安全、穩(wěn)定、易維護(hù)、易使用的特點(diǎn)。用戶訪問用JWS部署應(yīng)用程序的站點(diǎn),下載發(fā)布的應(yīng)用程序,既可以在線運(yùn)行,也可以通過JWS的客戶端離線運(yùn)行已下載的應(yīng)用程序。對同一個(gè)應(yīng)用程序,在第一次運(yùn)行時(shí)下載,以后每次運(yùn)行時(shí),JWS的客戶端會自動(dòng)去探測是否有版本更新,有更新就自動(dòng)下載新版本,沒有更新就直接運(yùn)行本地當(dāng)前版本,所有的麻煩全由JWS去承擔(dān)。好,下面我們就一步一步來搭建JWS
          二:搭建支持JWS的Web站點(diǎn)
          第一步:你的Tomcat3.2.1已經(jīng)正常運(yùn)轉(zhuǎn)
          第二步:找到TomcatHOME/conf下的web.xml文件,在其中添加<mime-type>
          application/x-java-jnlp-file
          </mime-type>
          以支持JNLP文件。
          三:部署應(yīng)用程序
          第一步:開發(fā)你希望發(fā)布的應(yīng)用程序
          第二步:把應(yīng)用程序及所用到的所有資源打成一個(gè)或多個(gè)jar包
          第三步:如果你的應(yīng)用程序不會用到任何運(yùn)行這個(gè)應(yīng)用程序的機(jī)器的本地資源,那么,你的應(yīng)用程序就可以部署了。
          第四步:如果你的應(yīng)用程序用到了運(yùn)行這個(gè)應(yīng)用程序的機(jī)器的本地資源,那么,你的應(yīng)用程序就必須先簽名然后才可以發(fā)布。
          第五步:如何給應(yīng)用程序簽名
          1:首先確保你已經(jīng)完全安裝了Java2的環(huán)境,有keytool工具,它位于J2SE SDk的bin目錄下。這一般不會有問題。
          2:到Dos狀態(tài)下,進(jìn)入你需發(fā)布應(yīng)用程序的jar包所在的目錄,運(yùn)行下面這句話
          keytool -genkey -keystore myKeystore -alias jwstest
          它將會提示你輸入用戶名、密碼等,不用理它,按照提示隨便輸入即可,但一定要記住密碼。運(yùn)行結(jié)束它將會在當(dāng)前路徑下創(chuàng)建名為myKeystore的文件。
          3:如果你想察看一下剛才生成的myKeystore文件的內(nèi)容,可以使用下面這句話:
          keytool -list -keystore myKeystore
          顯示出來應(yīng)該類似如下:
          Keystore type: jks
          Keystore provider: SUN
          Your keystore contains 1 entry:
          jwstest, Tue Nov 23 19:29:32 PST 2001, keyEntry,
          Certificate fingerprint (Test):
          C3:A9:CD:F3:D3:AC:4D:3F:3C:5B:AF:9E:CF:0D:46:5C
          4:對你需發(fā)布應(yīng)用程序的jar包進(jìn)行簽名,運(yùn)行下面這句話:
          jarsigner -keystore myKeystore yourtest.jar jwstest
          其中yourtest.jar是你的jar包名,你需要修改它,別的就不必修改了。運(yùn)行時(shí)會提示你輸入密碼,就是你剛才在生成myKeystore文件時(shí)設(shè)定的密碼。
          第六步:部署應(yīng)用程序的jar包。
          1:在Tomcat的webapps中新建目錄JWSTest
          2:在JWSTest下新建目錄apps,META-INF,WEB-INF
          3:在apps下新建目錄images和lib
          4:在META-INF中拷入MANIFEST.MF
          5:在WEB-INF中拷入web.xml
          6:把已經(jīng)準(zhǔn)備好的jar包拷入lib目錄下
          四:Jsp頁面
          第一步:編寫用于Web訪問的頁面index.jsp如下:
          <%@page contentType="text/html;charset=gb2312"%>
          <html>
          <title>JWS Test</title>
          <head>
          <SCRIPT LANGUAGE="Javascript">
          function insertLink(url, name) {
          document.write("<a href=" + url + ">" + name + "</a><br><br>");
          }
          insertLink("http://你的IP:8080/ JWSTest /apps/JWSTest.jnlp"," JWSTest ");
          </SCRIPT>
          </head>
          <body>
          </body>
          </html>
          第二步:在jsp中添加檢測訪問的客戶端是否已經(jīng)安裝了JWS的客戶端的代碼,示例如下:
          <%@page contentType="text/html;charset=gb2312"%>
          <html>
          <title> JWS Test </title>
          <head>
          <SCRIPT LANGUAGE="Javascript">
          var javawsInstalled = 0;
          isIE = "false";
          if (navigator.mimeTypes && navigator.mimeTypes.length) {
          x = navigator.mimeTypes['application/x-java-jnlp-file'];
          if (x) javawsInstalled = 1;
          } else {
          isIE = "true";
          }
          function insertLink(url, name) {
          if (javawsInstalled) {
          document.write("<a href=" + url + ">" + name + "</a><br><br>");
          } else {
          document.write("<a href=" + url + ">"+ name +"</a><br><br>");
          }
          }
          </SCRIPT>
          <SCRIPT LANGUAGE="VBScript">
          on error resume next
          If isIE = "true" Then
          If Not(IsObject(CreateObject("JavaWebStart.IsInstalled"))) Then
          javawsInstalled = 0
          Else
          javawsInstalled = 1
          End If
          End If
          </SCRIPT>
          <SCRIPT LANGUAGE="Javascript">
          if(javawsInstalled){
          insertLink("http://你的IP:8080/ JWSTest /apps/JWSTest.jnlp"," JWSTest ");
          }else{
          //通知用戶要先安裝JWS的客戶端,你可以自己提供下載或是直接鏈接到Sun的JWS下載。
          //分為兩種,如果客戶端已經(jīng)安裝了Java運(yùn)行環(huán)境,則只要下載javaws-1_0_1_01-win-int.exe即可。
          //如果客戶端沒有安裝Java運(yùn)行環(huán)境,則要下載完整的javaws-1_0_1_01-win-int-rt.exe。
          }
          </SCRIPT>
          </head>
          <body>
          </body>
          </html>
          五:JNLP文件
          第一步:下面我們來編寫JWS的核心配置文件JNLP,有了它,才能將以上各部分聯(lián)系起來,真正讓JWS運(yùn)轉(zhuǎn)起來。JNLP文件符合標(biāo)準(zhǔn)的XML語法,實(shí)質(zhì)就是一個(gè)XML文件。當(dāng)然,編寫它的最好方式是對已寫好的JNLP進(jìn)行改寫。JWSTest.jnlp示例如下:
          <?xml version="1.0" encoding="utf-8"?>
          <!-- JNLP File for SwingSet2 Demo Application -->
          <jnlp
          spec="1.0+"
          codebase="http://你的IP:8080/JWSTest/apps"
          href=" JWSTest.jnlp">
          <information>
          <title> JWS Test </title>
          <vendor>YOUR Name</vendor>
          <homepage href=" JWSTest.html"/>
          <description> JWS Test </description>
          <icon href="images/ JWSTest.jpg"/>
          <offline-allowed/>
          </information>
          <security>
          <all-permissions/>
          </security>
          <resources>
          <j2se version="1.3"/>
          <jar href="lib/ JWSTest.jar"/>
          </resources>
          <application-desc main-class="運(yùn)行啟動(dòng)的主類"/>
          </jnlp>
          第二步:部分JNLP的關(guān)鍵語法
          <jnlp>元素
          spec:必須是1.0及以上版本,這里用1.0+,不需修改。
          codebase:資源的URL,是JNLP指向各連接的起始處,需自行修改。
          Href:JNLP文件相對codebase的存放位置,和JNLP文件的全名,需自行修改。
          <infomation>元素
          Title:發(fā)布的應(yīng)用程序簡單標(biāo)題,需自行修改。
          Vendor:發(fā)行商信息,可以寫上你的大名,需自行修改。
          Homepage:存放有關(guān)應(yīng)用程序的相關(guān)文檔的URL,如help文件等,可有可無。
          Description:對應(yīng)用程序的描述,可以有多對<description></description>,可有可無。
          Icon:用戶下載你的應(yīng)用程序后,在JWS里顯示的圖標(biāo)的URL,應(yīng)是gif或jpeg格式。需自行修改。
          Offline-allowed:選擇項(xiàng),允許用戶離線運(yùn)行應(yīng)用程序,一般都會有,不用修改。
          <security>元素
          選擇項(xiàng),如果沒有指明<security>,默認(rèn)是不允許應(yīng)用程序訪問用戶的本地資源,即應(yīng)用程序是沙箱運(yùn)行。
          如果設(shè)定為<all-permissions/>,則表示允許應(yīng)用程序訪問用戶的本地資源。一般都會設(shè)定此值。
          <resource>元素
          <j2se version = 指定jdk版本>
          <jar href = 指定需發(fā)布的應(yīng)用程序的jar包存放的位置>
          <application-desc>元素
          main-class:應(yīng)用程序運(yùn)行啟動(dòng)的主類
          <argument>:應(yīng)用程序運(yùn)行時(shí)的參數(shù),可以有多個(gè),每一個(gè)參數(shù)用一對<argument>參數(shù)</argument>。
          至此,你已經(jīng)完全構(gòu)建了運(yùn)轉(zhuǎn)JWS的各部件。
          六:完整發(fā)布和測試
          前面我們已經(jīng)準(zhǔn)備好了需發(fā)布的應(yīng)用程序的jar包,也寫好了用來訪問的jsp文件和服務(wù)器端的核心jnlp文件。
          第一步:在JWSTest下新建目錄jsp。把index.jsp拷入jsp目錄。
          第二步:把jnlp文件直接拷入apps目錄下。
          第三步:在瀏覽器里輸入:http://localhost:8080/JWSTest/jsp/index.jsp 即可訪問到j(luò)sp頁面。頁面應(yīng)出現(xiàn)JWSTest字樣。
          第四步:點(diǎn)擊JWSTest,連接到apps下的JWSTest.jnlp文件,JWS啟動(dòng),開始下載你發(fā)布的應(yīng)用程序。
          第五步:下載完畢,直接運(yùn)行即可。以后,你也可以直接運(yùn)行JWS客戶端里已下載的應(yīng)用程序。
          不出意外,應(yīng)恭喜你已經(jīng)開始享受JWS帶來的樂趣了。
          七:常見問題
          通過上面的講述,你一定能體會到JWS的易用性。或許事情并沒有那么簡單,以我的使用經(jīng)驗(yàn),還會有許多問題出現(xiàn),在這里挑幾個(gè)經(jīng)常出現(xiàn)的問題,給出相應(yīng)解決方法,讓大家少走彎路,而享受更多的樂趣。
          問題一:JWS不能運(yùn)行,JNLP文件像普通XML文件一樣顯示在Browser里
          解決辦法:請修改tomcat里,發(fā)布程序的路徑中的web.xml。
          在其中添加<mime-type>
          application/x-java-jnlp-file
          </mime-type>
          以支持JNLP文件。
          問題二:不能下載資源或下載資源失敗
          解決辦法:請卸載JWS的客戶端,并將注冊表里有關(guān)JWS的項(xiàng)目都刪除,并確保program Files下的Java Web Start目錄已被刪除,然后,重裝JWS。
          問題三:下載資源中有未簽名文件
          解決辦法:1:確保所有的jar包及其他資源都進(jìn)行過簽名。
          2:確保整個(gè)資源中,沒有中文的命名。好像簽名工具不支持中文命名的文件名,所以未簽到名。這可讓我郁悶了一下午哦。
          3:察看已經(jīng)簽名的jar包中,meta-inf路徑下的jwstest.sf(jwstest是你在進(jìn)行簽名時(shí)-alias后的命名)文件,他詳細(xì)的列出了所有已簽名的文件,以分析簽名失敗的原因。

          http://www.itpub.net/595150.html
          <?xml version="1.0" encoding="utf-8"?>
          <!-- JNLP File for SwingSet2 Demo Application -->
          <jnlp
          spec="1.0+"
          codebase="href=" JWSTest.jnlp">
          <information>
          <title> JWS Test </title>
          <vendor>YOUR Name</vendor>
          <description> JWS Test </description>
          <offline-allowed/>
          </information>
          <security>
          <all-permissions/>
          </security>
          <resources>
          <j2se version="1.4"/>
          <jar href="lib/xx.jar"/>
          </resources>
          <application-desc main-class="fullScreen.FullScreenTest"/>
          </jnlp>

          主站蜘蛛池模板: 深州市| 吴旗县| 界首市| 饶河县| 隆昌县| 乌苏市| 沭阳县| 宝鸡市| 铁岭县| 奉贤区| 万源市| 方山县| 普定县| 晋城| 安国市| 灵山县| 凤庆县| 麟游县| 大荔县| 镇安县| 清新县| 且末县| 普安县| 阳东县| 东明县| 抚顺县| 西华县| 云梦县| 容城县| 福泉市| 潍坊市| 汾西县| 平阴县| 故城县| 蒙阴县| 台湾省| 珠海市| 宝山区| 渝中区| 收藏| 安阳市|