Java Web Start简单入门步骤

    技术2022-05-19  19

    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包  //File HelloJNLP.java import  javax.swing.*; import  java.awt.*; import  java.awt.event.*; import  java.io.*; import  java.net.*;  public  class  HelloJNLP extends  JFrame  implements  ActionListener  {     /**      *       */     private  static  final  long  serialVersionUID = 1L;      public  HelloJNLP() {         super ("Hello JNLP" );         String  loadedFrom = this .getClass().getClassLoader().toString();         JLabel  jl = new  JLabel ("loaded by "  + loadedFrom);         JEditorPane  jtp = new  JEditorPane ("text/plain""版本1.1.2" );         JButton  bb = new  JButton ("write native file" );         getContentPane().add(jl, BorderLayout .NORTH);         getContentPane().add(jtp, BorderLayout .CENTER);         getContentPane().add(bb, BorderLayout .SOUTH);         bb.addActionListener(this );         bb.setActionCommand("wnf" );     }      public  static  void  main(String [] args) {         JFrame  f = new  HelloJNLP();         f.setBounds(100, 100, 325, 250);         f.setDefaultCloseOperation(DISPOSE_ON_CLOSE);         f.setVisible(true );         f.addWindowListener(new  WindowAdapter () {             public  void  windowClosed(WindowEvent  e) {                 System .out.println("Shutting down..." );                 System .exit(0);             }         });     }      public  void  actionPerformed(ActionEvent  arg0) {         //System.out.println(arg0.getActionCommand());         try  {             FileOutputStream  fos = new  FileOutputStream ("abcfile" );             try  {                 fos.write(0xffff);                 fos.close();                 System .out.println("write file ok" );             } catch  (IOException  e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }                      } catch  (FileNotFoundException  e) {             // TODO Auto-generated catch block             e.printStackTrace();         }                           try  {             Socket  sock = new  Socket (InetAddress .getByName("www.cctv.com" ), 80);             sock.close();             System .out.println("socket create ok" );         } catch  (UnknownHostException  e) {             // TODO Auto-generated catch block             e.printStackTrace();         } catch  (IOException  e) {             // TODO Auto-generated catch block             e.printStackTrace();         }              } }   此应用在点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  <?xml version="1.0"  encoding="UTF-8" ?> <!-- file Hello.jnlp --> <jnlp codebase="http://192.168.1.6:81/jnlp/" href="http://192.168.1.6:81/jnlp/hello.jnlp" >         <information>     <title>Hello</title>     <vendor>Tech Tips Sample May 2001</vendor>     <icon href="/jnlp/qq.jpg" />   </information>   <resources>     <j2se version="1.3+" />     <jar href="/jnlp/hello.jar" />   </resources>   <security>     <all-permissions>    </security>   <application-desc main-class ="HelloJNLP" /> </jnlp>   我这里把jar和jnlp都放在192.168.1.6的主机上面,并且通过81port进行访问。你可以更加自己的需要修改上面的相关信息。 测 试一下。http://192.168.1.6:81/jnlp/hello.jnlp用ie打开,马上会弹出一个你是否接受的筐,并且说明这个个人或者 公司是不可信的(就因为不是权威机构申请的证书,哎),点接受后就可以正常运行jar中的程序,可以正常使用本地功能。 同样,applet经过上面步骤也可以操作本地,就好比经过签名的activeX一样,也好比一部分ie自己认为已经签名的activeX一样(其实就是系统漏洞,呵呵),请大家批评指正。

    最新回复(0)