Java Web Start簡單入門步驟

來源:互聯網
上載者:User
 編寫:桂靜秋
參考: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一樣(其實就是系統漏洞,呵呵),請大家批評指正。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.