下面是用最簡單的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>
<! 在開始運行菜單中輸入javaws或javaws 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指定生成 MKSIGNSF和MKSIGNDSA)
其中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