熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java web start入門

2013-11-23 18:50:07  來源: Java核心技術 

  下面是用最簡單的HelloWorld方法實現一個Java Web Start的例子工程webstart目錄結構如下

  目錄說明如下

  images 存放*jnlp文件中定義的圖標文件

  jar 存放classes打包後的jar文件

  jnlp 存放*jnlp描述文件

  src java源碼

  WEBINF/classes java編譯後的class文件

  webatart 建立步驟如下

   .在webstart/src/jws下新建一HelloWorldjava文件

  package jws;

  import javaxswing*;

  public class HelloWorld {

  private JFrame jFrame;

  private JPanel jPanel;

  private JLabel label;

  public HelloWorld(){

  jFrame = new JFrame(HelloWorld Test Frame);

  label = new JLabel(Hello world!);

  jPanel = new JPanel();

  jPaneladd(label);

  jFrameadd(jPanel);

  jFramepack();

  jFramesetSize( );

  jFramesetLocation( );

  jFramesetVisible(true);

  jFramesetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

  }

  // webstart 啟動時執行的主方法

  public static void main(String args[]){

  new HelloWorld();

  }

  }

  注 在main方法中完全可以不用寫new HelloWorld();而只在main方法中輸出一條測試語句

  Systemoutprintln(This is test!);

  進行簡單測試打印結果會出現在步驟java控制台中

   .編譯HelloWorldjava在WEBINF/classes目錄下執行命令

  jar cvf helloworldjar jws/*class

  執行後把生成的helloworldjar包拷貝到webstart/jar/jws目錄下

  (在IDEA中打包使用Jar Tool插件比較方便eclipse中可以使用Fatjar)

   .從helloworldjar/METAINF中解壓出MNIFESTMF更改MNIFESTMF內容

  ManifestVersion:

  CreatedBy: _ (Sun Microsystems Inc)

  為

  ManifestVersion:

  CreatedBy: _ (Sun Microsystems Inc)

  MainClass: jwsHelloWorld

  然後在WEBINF/classes目錄下執行命令

  jar umf MANIFESTMF helloworldjar

  把新的MNIFESTMF更新到helloworldjar包中

  注 如果在下面步驟中的<applicationdesc mainclass=jwsHelloWorld/>指定了MainClass方法此步驟可以省略

   .webstart/jnlp目錄下新建一HelloWorldjnlp文件

  <?xml version= encoding=UTF?>

  <!codebase 屬性指出搜索應用程序資源的頂級URL下面的icon/jar元素都是以這個URL為基本>

  <jnlp codebase=>

  <information>

  <!開始運行菜單中輸入javawsjavaws viewer啟動Web Start會看到客戶端已經安裝的webstart應用程序>

  <!title 應用程序標題 vendor供應商

  title/vendor 元素必須會顯示在用javaws viewer命令

  打開的應用程序緩存查看器(Java Application Cache Viewer)中>

  <title>HelloWorld</title>

  <vendor>Lively Corporation</vendor>

  <description>HelloWorld Test Example for WebStart</description>

  <!homepage 存放有關應用程序的相關文檔的URL如help文件等僅僅是description作用>

  <homepage />

  <!icon 指定圖標會顯示在應用程序緩存查看器中

  在查看器中新建webstart快捷方式到桌面時也會顯示為快捷方式圖標

  只支持GIF/JPEG格式其它格式無效>

  <icon />

  <!splash 在sun的文檔中提到會出現在webstart啟動時的閃屏中不過可能由於速度問題我沒有觀察到>

  <icon kind=splash />

  <! 允許離線啟動可以使用javaws offline命令>

  <offlineallowed/>

  </information>

  <resources>

  <! 指定客戶端需要安裝的jse版本下面指定為+

  如果版本是在鏈接此jnlp文件時會提示更新jse版本>

  <jse version=+/>

  <! 指定要下載到本地的jar文件(注意所有的文件都需要打包才能夠下載)

  可以包含一些資源文件如icons/configuration files可以使用getResource方法取得>

  <jar />

  </resources>

  <!applicationdesc 必須指定webstart啟動時執行jar文件中的哪個類>

  <applicationdesc mainclass=jwsHelloWorld/>

  </jnlp>

  注

  其中*jnlp文件的語法的詳細信息可以在sun網站上查詢

  其中javaws命令行的詳細參數可以在sun網站上查詢

   .webstart目錄下建一l

  內容如下

  <a >HelloWorld</a>

   .因為是web應用所以webstart/WEBINF建一webxml文件

  內容為

  <webapp>

  </webapp>

  即可啟動tomcat時默認會去找l文件

   .webstart工程放入tomcat/webapps啟動tomcat即可

  啟動後會看到helloworld的swing彈出窗口還有如下圖會有一個java控制台

  如果要在HelloWorldjava中對本地文件進行操作就必須對jar文件進行簽名具體步驟如下:

       在HelloWorldjava的main方法中對文件進行操作

  File file = new File(E: + /testtxt);

  try {

  Systemoutprintln(filecreateNewFile());

  } catch (IOException e) {

  eprintStackTrace();

  }

   .用keytool genkey產生一個私鑰(使用keytool –help命令可查看keytool命令參數)

  keytool genkey alias mykey keystore mykeystore keypass mypass storepass mykeystorepass validity

  參數說明如下

  alias mykey 指定密鑰的別名不指定的話默認為 mykey

  keystore mykeystore 指定密鑰數據庫名不指定則默認在Documents and                      Settings\Administrator下生成一個名稱為 keystore的文件

  keypass mypass 指定密鑰密碼用jarsigner簽名時需要

  storepass mykeystorepass 指定密鑰數據庫密碼用jarsigner簽名時需要

  validity 密鑰有效時間為不指定的話默認為

   .在WEBINF/classes目錄下運行keytool命令會提示輸入一些姓名/公司/國家之類的信息

  如果不想一步步輸入上面信息可以直接輸入下面命令執行

  keytool genkey alias mykey keystore mykeystore keypass mypass storepass mykeystorepass validity dname cn=Henry Zhou ou=JavaSoft l=SZ S=JS o=Lively c=CN

  dname 參數說明如下

  CN=commonName

  OU=organizationUnit

  O=organizationName

  L=localityName

  S=stateName

  C =country

   .執行完畢在WEBINF/classes目錄下生成一個名mykeystore的密鑰文件下面要用此密鑰文件對jar文件進行加密

  jarsigner keystore mykeystore helloworldjar mykey

  helloworldjar mykey 指定要簽名的jar文件和密鑰的別名

  運行命令後會提示輸入密鑰密碼和密鑰數據庫密碼

  簽名者證書將在六個月內過期

  由於安全原因在上面的命令中無法指定密鑰密碼和密鑰數據庫密碼即使運行

  jarsigner keystore mykeystore helloworldjar mykey keypass mypass storepass mykeystorepass

  仍然會提示輸入密鑰密碼和密鑰數據庫密碼

  注

  其中keytool的詳細參數說明可以在sun網站上查詢

  

  其中jarsigner命令行的詳細參數可以在sun網站上查詢

   執行後在helloworldjar/METAINF中可以看到生成MYKEYDSA和MYKEYSF文件(可以通過sigFile MKSIGN指定生成 MKSIGNSFMKSIGNDSA

  其中SF文件包含了JAR中所有類的一個列表保存了簽名過程中使用的摘要算法DSA文件是一個二進制密匙文件擴展名是DSA還是RSA取決你使用的簽名算法默認是DSA可以在keytool參數中指定RSA算法

   .把生成的helloworldjar包拷貝到webstart/jar/jws目錄下

   .在webstart/jnlp/HelloWorldjnlp中添加

  <security>

  <allpermissions/>

  </security>

  增加了簽名後如果缺少<security><allpermissions/></security>會報錯

  啟動/運行應用程序時發生錯誤

  標題JNLP Argument Solution

  供應商Lively

  類別安全錯誤

  access denied (javaioFilePermission E:\testtxt write)

   webstart 工程放入tomcat/webapps啟動tomcat即可鏈接jnlp後發現E盤新建一testtxt文件測試成功

  注 網上介紹有時候需要在webstart/WEBINF/webxml文件中配置

  <mimemapping>

  <extension>jnlp</extension>

  <mimetype>application/xjavajnlpfile</mimetype>

  </mimemapping>

  在tomcat中測試發現不需要在webxml中添加此代碼


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25831.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.