Java Web Start简单入门步骤

Java Web Start简单入门步骤 

 编写:桂静秋
参考: http://java.sun.com/j2se/1.5.0/docs/guide/javaws/developersguide/contents.html

前言
项目需要,所以前几天研究了一下,折腾了我1.5天的时间,不能浪费,特此写出来share大家。

应用
JWS主要应用在发布应用程序上,主要写好了jnlp文件,用户通过http访问到,应用程序会自动安装在本地机器,今后升级等工作JWS将自动完成。可以说是发布软件的一种新方式。(当然,前提对方必须有jvm)

实施步骤

编写好一个测试文件,并且打成hello.jar包
  1.  
  2. //File HelloJNLP.java
  3. import  javax.swing.*;
  4. import  java.awt.*;
  5. import  java.awt.event.*;
  6. import  java.io.*;
  7. import  java.net.*;
  8.  
  9. public  class  HelloJNLP extends  JFrame  implements  ActionListener  {
  10.     /**
  11.      * 
  12.      */
  13.     private  static  final  long  serialVersionUID = 1L;
  14.  
  15.     public  HelloJNLP() {
  16.         super ("Hello JNLP" );
  17.         String  loadedFrom = this .getClass().getClassLoader().toString();
  18.         JLabel  jl = new  JLabel ("loaded by "  + loadedFrom);
  19.         JEditorPane  jtp = new  JEditorPane ("text/plain""版本1.1.2" );
  20.         JButton  bb = new  JButton ("write native file" );
  21.         getContentPane().add(jl, BorderLayout .NORTH);
  22.         getContentPane().add(jtp, BorderLayout .CENTER);
  23.         getContentPane().add(bb, BorderLayout .SOUTH);
  24.         bb.addActionListener(this );
  25.         bb.setActionCommand("wnf" );
  26.     }
  27.  
  28.     public  static  void  main(String [] args) {
  29.         JFrame  f = new  HelloJNLP();
  30.         f.setBounds(100, 100, 325, 250);
  31.         f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
  32.         f.setVisible(true );
  33.         f.addWindowListener(new  WindowAdapter () {
  34.             public  void  windowClosed(WindowEvent  e) {
  35.                 System .out.println("Shutting down..." );
  36.                 System .exit(0);
  37.             }
  38.         });
  39.     }
  40.  
  41.     public  void  actionPerformed(ActionEvent  arg0) {
  42.         //System.out.println(arg0.getActionCommand());
  43.         try  {
  44.             FileOutputStream  fos = new  FileOutputStream ("abcfile" );
  45.             try  {
  46.                 fos.write(0xffff);
  47.                 fos.close();
  48.                 System .out.println("write file ok" );
  49.             } catch  (IOException  e) {
  50.                 // TODO Auto-generated catch block
  51.                 e.printStackTrace();
  52.             }
  53.             
  54.         } catch  (FileNotFoundException  e) {
  55.             // TODO Auto-generated catch block
  56.             e.printStackTrace();
  57.         }
  58.         
  59.         
  60.         try  {
  61.             Socket  sock = new  Socket (InetAddress .getByName("www.cctv.com" ), 80);
  62.             sock.close();
  63.             System .out.println("socket create ok" );
  64.         } catch  (UnknownHostException  e) {
  65.             // TODO Auto-generated catch block
  66.             e.printStackTrace();
  67.         } catch  (IOException  e) {
  68.             // TODO Auto-generated catch block
  69.             e.printStackTrace();
  70.         }
  71.         
  72.     }
  73. }
  74.  


此应用在点JButton 的时候测试写本地文件系统和使用本地网络资源。(编译和打包过程省略)

接着,也是我折腾了一 天的事情,如何把此jar进行证书认证,使得此应用安装到用户那可以操作本地资源。原来我使用jdk的keytool工具生成证书,但是只可用半年,后来 考虑去官方申请一个,居然要800$/年。最后考虑用openssl自己做,但是过程相当复杂,而且没法很好的控制流程,主要是对openssl命令不太 熟悉用途。折腾了一天,终于发现原来java自己就可以生成使用限期自定义的证实。哎...

生成一个新的keystore
keytool -genkey -keystore myKeystore -alias myself 

生成一个私证书
keytool -selfcert -alias myself -keystore myKeystore -validity 365

注意-validity 365为证书使用期限,为1年,可以自己定义更大。

对jar进行签名
jarsigner -keystore myKeystore hello.jar myself 

这样签名工作就完成了。最后写个jnlp描述文件hello.jnlp


  1.  
  2. <?xml version="1.0"  encoding="UTF-8" ?>
  3. <!-- file Hello.jnlp -->
  4. <jnlp codebase="http://192.168.1.6:81/jnlp/"
  5. href="http://192.168.1.6:81/jnlp/hello.jnlp" >
  6.         <information>
  7.     <title>Hello</title>
  8.     <vendor>Tech Tips Sample May 2001</vendor>
  9.     <icon href="/jnlp/qq.jpg" />
  10.   </information>
  11.   <resources>
  12.     <j2se version="1.3+" />
  13.     <jar href="/jnlp/hello.jar" />
  14.   </resources>
  15.   <security> 
  16.    <all-permissions> 
  17.   </security>
  18.   <application-desc main-class ="HelloJNLP" />
  19. </jnlp>
  20.  


我这里把jar和jnlp都放在192.168.1.6的主机上面,并且通过81port进行访问。你可以更加自己的需要修改上面的相关信息。

测 试一下。http://192.168.1.6:81/jnlp/hello.jnlp用ie打开,马上会弹出一个你是否接受的筐,并且说明这个个人或者 公司是不可信的(就因为不是权威机构申请的证书,哎),点接受后就可以正常运行jar中的程序,可以正常使用本地功能。

同样,applet经过上面步骤也可以操作本地,就好比经过签名的activeX一样,也好比一部分ie自己认为已经签名的activeX一样(其实就是系统漏洞,呵呵),请大家批评指正。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值