版权所有:(xiaodaoxiaodao)蓝小刀
				
				
						
								  
								
										xiaodaoxiaodao@gmail.com
								
								
								
								
						
				
		
		
				
						
								
										http://www.blogjava.net/xiaodaoxiaodao/articles/103469.html
								
						
				
				
						  
				
						   
				
						
						
				
		
		
				
						转载请注明来源/作者
				
		
		
				
						Java Web Start
				
				
						入门基础教程
				
		
		
				
						 
				
		
		
				关于Web Start的JNLP Specification可以到sun网站http://java.sun.com/products/javawebstart/download-spec.html下载。
		
		
				下面是用最简单的HelloWorld方法实现一个Java Web Start的例子,工程webstart目录结构如下:
		
		
				
						
						
				
		
		
				
						
						
目录说明如下:
		
		
				images
				:存放*.jnlp文件中定义的图标文件
		
		
				jar
				:存放classes打包后的jar文件
		
		
				jnlp
				:存放*.jnlp描述文件
		
		
				src
				:java源码
		
		
				WEB-INF/classes
				:java编译后的class文件
		
		
				
						 
				
		
		
				webatart
				建立步骤如下:
		
		
				1
				.在webstart/src/jws下新建一HelloWorld.java文件:
		
		
				package jws;
		
		
				import javax.swing.*;
				
						
						
				
		
		
				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();
		
		
				
						        jPanel.add(label);
		
		
				
						        jFrame.add(jPanel);
		
		
				
						 
				
		
		
				
						        jFrame.pack();
		
		
				
						        jFrame.setSize(400, 150);
		
		
				
						        jFrame.setLocation(400, 300);
		
		
				
						        jFrame.setVisible(true);
		
		
				
						        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		
				
						    }
		
		
				
						 
				
		
		
				
						    
						// webstart
				
				启动时执行的主方法
		
		
				
						    public static void main(String args[]){
		
		
				
						        new HelloWorld();
		
		
				
						    }
		
		
				
						 
				
		
		
				}
				
						
						
				
		
		
				
						 
				
		
		
				
						注:
				
				在main方法中完全可以不用写new HelloWorld();,而只在main方法中输出一条测试语句
		
		
				System.out.println("This is test!");
				
						
						
				
		
		
				进行简单测试,打印结果会出现在步骤7java控制台中
		
		
				
						 
				
		
		
				2
				.编译HelloWorld.java,在WEB-INF/classes目录下执行命令:
		
		
				
						jar cvf helloworld.jar jws/*.class
				
		
		
				执行后把生成的helloworld.jar包拷贝到webstart/jar/jws目录下。
		
		
				(在IDEA中打包使用Jar Tool插件比较方便,eclipse中可以使用Fatjar)
		
		
				
						 
				
		
		
				3
				.从helloworld.jar/META-INF中解压出MNIFEST.MF,更改MNIFEST.MF内容:
		
		
				Manifest-Version: 1.0
		
		
				Created-By: 1.5.0_01 (Sun Microsystems Inc.)
		
		
				为:
		
		
				Manifest-Version: 1.0
		
		
				Created-By: 1.5.0_01 (Sun Microsystems Inc.)
		
		
				Main-Class: jws.HelloWorld
				
						
						
				
		
		
				然后在WEB-INF/classes目录下执行命令:
		
		
				
						jar umf MANIFEST.MF helloworld.jar
				
		
		
				把新的MNIFEST.MF更新到helloworld.jar包中,
		
		
				
						 
				
		
		
				
						注:
				
				如果在下面步骤4中的<application-desc main-class="jws.HelloWorld"/>指定了Main-Class方法,此步骤可以省略。
		
		
				
						 
				
		
		
				4
				.webstart/jnlp目录下新建一HelloWorld.jnlp文件:
		
		
				<?xml version="1.0" encoding="UTF-8"?>
		
		
				<!--codebase
				属性指出搜索应用程序资源的顶级URL,下面的icon/jar元素都是以这个URL为基本.-->
		
		
				<jnlp codebase="http://127.0.0.1:8081/webstart">
		
		
				
						    <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 href="http://127.0.0.1:8081/webstart/index.html"/>
		
		
				
						        
						<!--icon
				
				指定图标会显示在应用程序缓存查看器中,
		
		
				
						        
				
				在查看器中新建webstart快捷方式到桌面时也会显示为快捷方式图标,
		
		
				
						        
				
				只支持GIF/JPEG格式,其它格式无效-->
		
		
				
						        <icon href="./images/logo.jpg"/>
		
		
				
						       
						
								 <!--splash
				
				在sun的文档中提到会出现在webstart启动时的闪屏中,不过可能由于速度问题,我没有观察到-->
		
		
				
						        <icon kind="splash" href="./images/logo.jpg"/>
		
		
				
						   
						    
						
								 <!--
				
				允许离线启动,可以使用javaws -offline命令-->
		
		
				
						        <offline-allowed/>
		
		
				
						    </information>
		
		
				
						    <resources>
		
		
				
						       
						
								 <!--
				
				指定客户端需要安装的j2se版本,下面指定为1.5+,
		
		
				
						        
				
				如果版本是1.4,在链接此jnlp文件时会提示更新j2se版本-->
		
		
				
						        <j2se version="1.5+"/>
		
		
				
						       
						
								 <!--
				
				指定要下载到本地的jar文件(注意,所有的文件都需要打包才能够下载),
		
		
				
						        
				
				可以包含一些资源文件,如icons/configuration files,可以使用getResource方法取得-->
		
		
				
						        <jar href="./jar/jws/helloworld.jar"/>
		
		
				
						    </resources>
		
		
				
						    <!--application-desc
				必须,指定webstart启动时执行jar文件中的哪个类-->
		
		
				
						    
						<application-desc main-class="jws.HelloWorld"/>
						
						
				
		
		
				</jnlp>
		
		
				
						 
				
		
		
				
						注:
				
		
		
				其中*.jnlp文件的语法的详细信息可以在sun网站上查询http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/syntax.html
		
		
				其中javaws命令行的详细参数可以在sun网站上查询http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/javaws.html#options
		
		
				
						 
				
		
		
				5
				.webstart目录下建一index.html
		
		
				内容如下
		
		
				
						<a href="jnlp/HelloWorld.jnlp">HelloWorld</a>
				
		
		
				
						 
				
		
		
				6
				.因为是web应用,所以webstart/WEB-INF建一web.xml文件,
		
		
				内容为:
		
		
				
						<web-app>
				
		
		
				
						</web-app>
				
		
		
				即可,启动tomcat时默认会去找index.html文件
		
		
				
						 
				
		
		
				7
				.webstart工程放入tomcat/webapps,启动tomcat即可。
		
		
				启动后会看到helloworld的swing弹出窗口,还有如下图会有一个java控制台(如果没有出现,可在"控制面板"——"java控制面板"——"高级"——"Java控制台"中勾选"显示控制台"单选框):
		
		
				
						
						
				
		
		
				
						 
				
		
		
				
						 
				
		
		
				
						 
				
		
		
				如果要在HelloWorld.java中对本地文件进行操作,就必须对jar文件进行签名,具体步骤如下:
		
		
				
						1.     
				
				在HelloWorld.java的main方法中对文件进行操作,
		
		
				
						        File file = new File("E:" + "/test.txt");
		
		
				
						        try {
		
		
				
						            System.out.println(file.createNewFile());
		
		
				
						        } catch (IOException e) {
		
		
				
						            e.printStackTrace(); 
		
		
				
						        }
		
		
				
						 
				
		
		
				2
				.用keytool -genkey产生一个私钥(使用keytool –help命令可查看keytool命令参数)
		
		
				
						keytool -genkey -alias mykey -keystore mykeystore -keypass mypass -storepass mykeystorepass -validity 80
				
		
		
				参数说明如下:
		
		
				-alias mykey
				:指定密钥的别名,不指定的话默认为
				"mykey"
		
		
				-keystore mykeystore
				:指定密钥数据库名,不指定则默认在Documents and                      Settings\Administrator下生成一个名称为 .keystore的文件。
		
		
				-keypass mypass
				:指定密钥密码,用jarsigner签名时需要。
		
		
				-storepass mykeystorepass
				:指定密钥数据库密码,用jarsigner签名时需要。
		
		
				-validity 80
				:密钥有效时间为80天,不指定的话默认为90天
		
		
				
						 
				
		
		
				3
				.在WEB-INF/classes目录下运行keytool命令,会提示输入一些姓名/公司/国家之类的信息:
		
		
				
						
						
				
		
		
				
						
								
 
				
		
		
				如果不想一步步输入上面信息,可以直接输入下面命令执行:
		
		
				
						keytool -genkey -alias mykey -keystore mykeystore -keypass mypass -storepass mykeystorepass -validity 80  
				
				
						-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
										
								
						
				
		
		
				4 .执行完毕在WEB-INF/classes目录下生成一个名mykeystore的密钥文件,下面要用此密钥文件对jar文件进行加密:
		
				
						jarsigner -keystore mykeystore helloworld.jar mykey 
				
		
		
				helloworld.jar mykey
				:指定要签名的jar文件和密钥的别名
		
		
				运行命令后会提示输入密钥密码和密钥数据库密码:
		
		
				
						
						
				
		
		
				
						
								
 
				
		
		
				签名者证书将在六个月内过期。
		
		
				
						 
				
		
		
				由于安全原因,在上面的命令中无法指定密钥密码和密钥数据库密码,即使运行:
		
		
				
						jarsigner -keystore mykeystore helloworld.jar mykey 
				
				-keypass mypass -storepass mykeystorepass
				
						
								
								
						
				
		
		
				仍然会提示输入密钥密码和密钥数据库密码。
		
		
				
						 
				
		
		
				
						注:
				
		
		
				其中keytool的详细参数说明可以在sun网站上查询
		
		
				
						http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/keytool.html
						
						
				
		
		
				其中jarsigner命令行的详细参数可以在sun网站上查询http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/jarsigner.html
		
		
				
						 
				
		
		
				5. 
				执行后在helloworld.jar/META-INF中可以看到生成MYKEY.DSA和MYKEY.SF文件(可以通过-sigFile MKSIGN指定生成 "MKSIGN.SF"和"MKSIGN.DSA")。
		
		
				其中SF文件包含了JAR中所有类的一个列表,保存了签名过程中使用的摘要算法。DSA文件是一个二进制密匙文件。扩展名是DSA还是RSA取决你使用的签名算法,默认是DSA,可以在keytool参数中指定RSA算法。
		
		
				
						 
				
		
		
				6 .把生成的helloworld.jar包拷贝到webstart/jar/jws目录下。
		
				
						 
				
		
		
				7 .在webstart/jnlp/HelloWorld.jnlp中添加:
		
				<security>
		
		
				
						   <all-permissions/>
		
		
				</security>
		
		
				增加了签名后,如果缺少<security><all-permissions/></security>会报错:
		
		
				启动/运行应用程序时发生错误。
		
		
				
						 
				
		
		
				标题:JNLP Argument Solution
		
		
				供应商:Lively
		
		
				类别:安全错误
		
		
				
						 
				
		
		
				access denied (java.io.FilePermission E:\test.txt write)
				
						
						
				
		
		
				
						 
				
		
		
				8. webstart
				工程放入tomcat/webapps,启动tomcat即可,链接jnlp后发现E盘新建一test.txt文件,测试成功。
		
		
				
						注:
				
				网上介绍有时候需要在webstart/WEB-INF/web.xml文件中配置:
		
		
				<mime-mapping>
		
		
				
						      <extension>jnlp</extension>
		
		
				
						       <mime-type>application/x-java-jnlp-file</mime-type>
		
		
				
						  </mime-mapping>
				
						
						
				
		
		
				
						 
				
		
		
				在tomcat5.5.20中测试发现不需要在web.xml中添加此代码。
				
		
		
				
						
								
						
				
		
		
				
						
								 
						
				
		
		
				
						Java Web Start
				
				入门基础教程
				
						.pdf
				
				下载地址:
		
		
				
						
								Java Web Start
								
										入门基础教程
								
								.rar
						
				
		
		
				
 
		
				
						版权所有:(xiaodaoxiaodao)蓝小刀
				
				
						
								  
								
										xiaodaoxiaodao@gmail.com